readonly 0.2.7

Struct fields that are made read-only accessible to other modules
Documentation
mod m {
    #[readonly::make]
    pub struct S {
        pub n: i32,
    }

    impl S {
        pub fn new(n: i32) -> Self {
            S { n }
        }

        pub fn demo(&mut self) {
            // Can read and write from inside the same module.
            println!("{}", self.n);
            self.n += 1;
        }
    }
}

fn demo(s: &mut m::S) {
    // From outside the module, can only read.
    println!("{}", s.n);

    // Does not compile:
    //s.n += 1;
}

#[test]
fn test() {
    let mut s = m::S::new(0);

    s.demo();

    demo(&mut s);
}