From: Ian Jackson Date: Sat, 18 Jul 2020 23:29:34 +0000 (+0100) Subject: save_something X-Git-Tag: otter-0.2.0~1292 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=0635a7ee2cb202ceba37022d0cdf6ba8effd5949;p=otter.git save_something --- diff --git a/src/global.rs b/src/global.rs index 802398de..e813db55 100644 --- a/src/global.rs +++ b/src/global.rs @@ -163,16 +163,27 @@ impl InstanceGuard<'_> { .chain( iter::once(suffix) ) .collect() } - #[throws(OE)] - fn save_game_now(&mut self) { - let savefile = self.savefile("g-","tmp"); - let mut f = BufWriter::new(fs::File::create(&savefile)?); - rmp_serde::encode::write_named(&mut f, &self.ig.gs)?; + fn save_something( + &self, prefix: &str, + w: fn(s: &Self, w: &mut BufWriter) + -> Result<(),rmp_serde::encode::Error> + ) { + let tmp = self.savefile(prefix,".tmp"); + let mut f = BufWriter::new(fs::File::create(&tmp)?); + w(self, &mut f)?; f.flush()?; drop( f.into_inner().map_err(|e| { let e : io::Error = e.into(); e })? ); - fs::rename(&savefile, &self.savefile("g-",""))?; - eprintln!("xxx saved {} to {}!", self.name, &savefile); + let out = self.savefile(prefix,""); + fs::rename(&tmp, &out)?; + eprintln!("xxx saved {} to {}!", self.name, &out); + } + + #[throws(OE)] + fn save_game_now(&mut self) { + self.save_something("g-", |s,w| { + rmp_serde::encode::write_named(w, &s.ig.gs) + })?; } #[throws(OE)]