[identity] Improve error handling after fxr/282508

In the few minutes I'd spent this morning I'd checked whether &Write
implmented Write but not whether &mut Write did.

This lets us catch a failure during the flushing of a token database to
disk and avoid overwriting the previous valid copy with one thats
potentially corrupted.

Change-Id: I4ac59c3d3d22b4e053baf0bb43caa9f9320a368a
diff --git a/src/identity/lib/token_store/src/file.rs b/src/identity/lib/token_store/src/file.rs
index a56184c..de464009 100644
--- a/src/identity/lib/token_store/src/file.rs
+++ b/src/identity/lib/token_store/src/file.rs
@@ -9,7 +9,7 @@
 use std::collections::BTreeMap;
 use std::ffi::OsString;
 use std::fs::{self, File};
-use std::io::{BufReader, BufWriter};
+use std::io::{BufReader, BufWriter, Write};
 use std::path::{Path, PathBuf};
 use std::result;
 
@@ -71,8 +71,12 @@
         // Note that we first write into a temporary staging file then rename to provide atomicity.
         // We use a fixed tempfile rather than dynamically generating filenames to ensure we
         // never accumulate multiple tempfiles.
-        let f = BufWriter::new(Self::truncate_file(&self.tmp_file_path)?);
-        self.serializer.serialize(f, self.credentials.values())?;
+        let mut buffer = BufWriter::new(Self::truncate_file(&self.tmp_file_path)?);
+        self.serializer.serialize(&mut buffer, self.credentials.values())?;
+        buffer.flush().map_err(|err| {
+            warn!("AuthDbFile failed to flush serialized file: {:?}", err);
+            AuthDbError::IoError(err)
+        })?;
         Self::rename_file(&self.tmp_file_path, &self.file_path)?;
         Ok(())
     }