summaryrefslogtreecommitdiff
path: root/src/generation.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/generation.rs')
-rw-r--r--src/generation.rs20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/generation.rs b/src/generation.rs
index 1d0ee52..a780203 100644
--- a/src/generation.rs
+++ b/src/generation.rs
@@ -196,7 +196,7 @@ impl LocalGeneration {
sql::file_count(&self.conn)
}
- pub fn files(&self) -> LocalGenerationResult<Vec<BackedUpFile>> {
+ pub fn files(&self) -> LocalGenerationResult<Vec<LocalGenerationResult<BackedUpFile>>> {
sql::files(&self.conn)
}
@@ -289,14 +289,22 @@ mod sql {
Ok(count)
}
- pub fn files(conn: &Connection) -> LocalGenerationResult<Vec<BackedUpFile>> {
+ pub fn files(
+ conn: &Connection,
+ ) -> LocalGenerationResult<Vec<LocalGenerationResult<BackedUpFile>>> {
let mut stmt = conn.prepare("SELECT * FROM files")?;
let iter = stmt.query_map(params![], |row| row_to_entry(row))?;
- let mut files = vec![];
+ let mut files: Vec<LocalGenerationResult<BackedUpFile>> = vec![];
for x in iter {
- let (fileno, json, reason) = x?;
- let entry = serde_json::from_str(&json)?;
- files.push(BackedUpFile::new(fileno, entry, &reason));
+ match x {
+ Ok((fileno, json, reason)) => {
+ let result = serde_json::from_str(&json)
+ .map(|entry| BackedUpFile::new(fileno, entry, &reason))
+ .map_err(|e| e.into());
+ files.push(result)
+ }
+ Err(e) => files.push(Err(e.into())),
+ }
}
Ok(files)
}