Field visibility - The bindgen User Guide
Description: `bindgen` automatically generates Rust FFI bindings to C and C++ libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 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:

    #![allow(unused)]
    fn main() {
    #[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 }
        }
    }
    }