From 0635a7ee2cb202ceba37022d0cdf6ba8effd5949 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 19 Jul 2020 00:29:34 +0100 Subject: [PATCH] save_something --- src/global.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) 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)] -- 2.30.2