我正在制作一个包含以下代码的 Rust 库:
pub mod my_module{
use std::os::raw::{c_int, c_double};
use std::collections::HashMap;
struct MyPrivateClass {
my_parameter:c_int
}
(...)
#[repr(C)]
pub struct MyPublicClass {
my_private_parameter:HashMap<String,MyPrivateClass>,
pub my_public_parameter:c_int,
pub my_other_public_parameter:c_double
}
(...)
}
我想使用 Objective-C 中的那个库。所以我使用cbindgen来生成一个 C 头文件。在我的 Objective-C 项目中,我只需要访问 MyPublicClass 的公共字段。但是生成的 C 标头包含我的公共结构的所有字段,包括私有字段。
这是生成的 C 头文件的样子:
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct HashMap_String__MyPrivateClass HashMap_String__MyPrivateClass;
typedef struct {
HashMap_String__MyPrivateClass my_private_parameter;
int my_public_parameter;
double my_other_public_parameter;
} MyPublicClass;
在这种特殊情况下,HashMap 类型没有直接的 C 等效项,所以我不能使用这个 C 标头。
我只需要在我的 Rust 库中使用这个 HashMap。我不需要从 Objective-C 中使用它。
如何生成一个不暴露它的 C 头文件,而不破坏任何东西?