summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/SUMMARY.md1
-rw-r--r--book/src/visibility.md31
2 files changed, 32 insertions, 0 deletions
diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md
index f9cc869f..e7feff95 100644
--- a/book/src/SUMMARY.md
+++ b/book/src/SUMMARY.md
@@ -20,6 +20,7 @@
- [Preventing the Derivation of `Debug`](./nodebug.md)
- [Preventing the Derivation of `Default`](./nodefault.md)
- [Annotating types with `#[must-use]`](./must-use-types.md)
+ - [Field visibility](./visibility.md)
- [Generating Bindings to C++](./cpp.md)
- [Generating Bindings to Objective-c](./objc.md)
- [Using Unions](./using-unions.md)
diff --git a/book/src/visibility.md b/book/src/visibility.md
new file mode 100644
index 00000000..039018fc
--- /dev/null
+++ b/book/src/visibility.md
@@ -0,0 +1,31 @@
+# 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
+
+```c
+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:
+
+```rust
+impl OneFieldPrivate {
+ pub fn new(s: &'static core::ffi::CStr, b: bool) -> Self {
+ OneFieldPrivate { s: s.as_ptr(), b }
+ }
+}
+```