mod private { pub struct Foo { field: i32, bar: Bar, } pub struct Bar { pub field: u32, } impl std::ops::Deref for Foo { type Target = Bar; fn deref(&self) -> &Self::Target { &self.bar } } } use private::Foo; fn example(f: Foo) { let a: i32 = f.field; } fn main() {}