Skip to content

Latest commit

 

History

History
37 lines (30 loc) · 887 Bytes

visibility.md

File metadata and controls

37 lines (30 loc) · 887 Bytes

Making fields private

Fields can be made private for various reasons. You may wish to enforce some invariant on the fields of a structure, which cannot be achieved if the field is public and can be set by any code. For example, you may wish to ensure that a pointer always points to something appropriate.

Annotation

struct OneFieldPrivate {
    /** Null-terminated, static string. <div rustbindgen private> */
    const char *s;
    bool b;
};

/** <div rustbindgen private> */
struct MostFieldsPrivate {
    int a;
    bool b;
    /** <div rustbindgen private="false"></div> */
    char c;
};

Then in Rust:

# #[repr(C)]
# pub struct OneFieldPrivate {
#     s: *const ::std::os::raw::c_char,
#     pub b: bool,
# }

impl OneFieldPrivate {
    pub fn new(s: &'static std::ffi::CStr, b: bool) -> Self {
        OneFieldPrivate { s: s.as_ptr(), b }
    }
}