Custom Type Getters and Setters ============================== {{#include ../links.md}} A custom type can also expose members by registering `get` and/or `set` functions. Getters and setters each take a `&mut` reference to the first parameter. Getters and setters are disabled when the [`no_object`] feature is used. | `Engine` API | Description | Return Value of Function | | --------------------- | ------------------------------------------------- | :-----------------------------------: | | `register_get` | register a getter | _any_ | | `register_set` | register a setter | _none_ | | `register_get_set` | short-hand to register both a getter and a setter | _none_ | | `register_get_result` | register a getter | `Result>` | | `register_set_result` | register a setter | `Result<(), Box>` | Cannot Override Object Maps -------------------------- Getters and setters are only intended for [custom types]. Any getter or setter function registered for [object maps] is simply ignored because the get/set calls will be interpreted as properties on the [object maps]. Examples -------- ```rust #[derive(Clone)] struct TestStruct { field: String } impl TestStruct { // Remember &mut must be used even for getters fn get_field(&mut self) -> String { self.field.clone() } fn set_field(&mut self, new_val: &str) { self.field = new_val.to_string(); } fn new() -> Self { TestStruct { field: "hello" } } } let mut engine = Engine::new(); engine .register_type::() .register_get_set("xyz", TestStruct::get_field, TestStruct::set_field) .register_fn("new_ts", TestStruct::new); let result = engine.eval::(r#"let a = new_ts(); a.xyz = "42"; a.xyz"#)?; println!("Answer: {}", result); // prints 42 ``` **IMPORTANT: Rhai does NOT support normal references (i.e. `&T`) as parameters.**