It’s kinda obvious now that I’ve typed it, but the builder pattern in rust can work, even if you don’t expect it to.
let already_initialised = { do_stuff_here() };
use std::fmt; struct Foo { a: u64 } impl Foo { fn build(&self) -> String { format!("!{}!", self.a) } } impl Fromfor Foo { fn from(item: u64) -> Self { Self { a: item } } } impl fmt::Display for Foo { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "={}=", self.a) } } fn main() { let z = { let a = Foo::from(1); // Things to try: // a // a.build().to_owned() a.build() }; println!("{}", z); }