1/6

Everything in Rust is private by default, and the module tree is what makes an invariant enforceable rather than merely documented.

mod ledger {
    pub struct Balance { stroops: i64 }   // type public, field private
}

Outside ledger, nobody can construct a Balance with a literal, read stroops directly, or mutate it. The only way in is the constructor you exposed — so "a balance is never negative" stops being a comment and becomes a property of the type.