melib: fix bincode serialization
Previous commit changed bincode deserializes in maildir and sqlite3.rs from bincode::deserialize_from to using bincode::config::DefaultOptions and bincode::Options trait's method deserialize_from. However, these two different deserializes use a different default settings: https://github.com/servo/bincode/issues/348 Specifically, varint encoding for integers is the default for DefaultOptions but not when using bincode::{de,}serialize_* functions. That means that serialized structs were not able to be deserialized. This commit makes all {de,}serializations use the DefaultOptions interface rather than the top level functions.jmap-eventsource
parent
353ac2d029
commit
a34f0aac5b
|
@ -289,7 +289,11 @@ impl MailBackend for MaildirType {
|
||||||
f.set_permissions(permissions)?;
|
f.set_permissions(permissions)?;
|
||||||
|
|
||||||
let writer = io::BufWriter::new(f);
|
let writer = io::BufWriter::new(f);
|
||||||
bincode::serialize_into(writer, &env)?;
|
bincode::Options::serialize_into(
|
||||||
|
bincode::config::DefaultOptions::new(),
|
||||||
|
writer,
|
||||||
|
&env,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
(sender)(
|
(sender)(
|
||||||
account_hash,
|
account_hash,
|
||||||
|
@ -1366,7 +1370,7 @@ fn add_path_to_index(
|
||||||
permissions.set_mode(0o600); // Read/write for owner only.
|
permissions.set_mode(0o600); // Read/write for owner only.
|
||||||
f.set_permissions(permissions)?;
|
f.set_permissions(permissions)?;
|
||||||
let writer = io::BufWriter::new(f);
|
let writer = io::BufWriter::new(f);
|
||||||
bincode::serialize_into(writer, &env)?;
|
bincode::Options::serialize_into(bincode::config::DefaultOptions::new(), writer, &env)?;
|
||||||
}
|
}
|
||||||
Ok(env)
|
Ok(env)
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,11 @@ impl MaildirStream {
|
||||||
f.set_permissions(permissions)?;
|
f.set_permissions(permissions)?;
|
||||||
|
|
||||||
let writer = io::BufWriter::new(f);
|
let writer = io::BufWriter::new(f);
|
||||||
bincode::serialize_into(writer, &env)?;
|
bincode::Options::serialize_into(
|
||||||
|
bincode::config::DefaultOptions::new(),
|
||||||
|
writer,
|
||||||
|
&env,
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
if !env.is_seen() {
|
if !env.is_seen() {
|
||||||
unseen_total += 1;
|
unseen_total += 1;
|
||||||
|
|
|
@ -88,7 +88,11 @@ impl Drop for Collection {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let writer = io::BufWriter::new(f);
|
let writer = io::BufWriter::new(f);
|
||||||
bincode::serialize_into(writer, &self.threads).unwrap();
|
let _ = bincode::Options::serialize_into(
|
||||||
|
bincode::config::DefaultOptions::new(),
|
||||||
|
writer,
|
||||||
|
&self.thread,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,9 +135,10 @@ pub fn reset_db(description: &DatabaseDescription, identifier: Option<&str>) ->
|
||||||
|
|
||||||
impl ToSql for Envelope {
|
impl ToSql for Envelope {
|
||||||
fn to_sql(&self) -> rusqlite::Result<ToSqlOutput> {
|
fn to_sql(&self) -> rusqlite::Result<ToSqlOutput> {
|
||||||
let v: Vec<u8> = bincode::serialize(self).map_err(|e| {
|
let v: Vec<u8> = bincode::Options::serialize(bincode::config::DefaultOptions::new(), self)
|
||||||
rusqlite::Error::ToSqlConversionFailure(Box::new(MeliError::new(e.to_string())))
|
.map_err(|e| {
|
||||||
})?;
|
rusqlite::Error::ToSqlConversionFailure(Box::new(MeliError::new(e.to_string())))
|
||||||
|
})?;
|
||||||
Ok(ToSqlOutput::from(v))
|
Ok(ToSqlOutput::from(v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,7 +406,11 @@ impl Drop for Account {
|
||||||
permissions.set_mode(0o600); // Read/write for owner only.
|
permissions.set_mode(0o600); // Read/write for owner only.
|
||||||
f.set_permissions(permissions).unwrap();
|
f.set_permissions(permissions).unwrap();
|
||||||
let writer = io::BufWriter::new(f);
|
let writer = io::BufWriter::new(f);
|
||||||
if let Err(err) = bincode::serialize_into(writer, &self.collection) {
|
if let Err(err) = bincode::Options::serialize_into(
|
||||||
|
bincode::config::DefaultOptions::new(),
|
||||||
|
writer,
|
||||||
|
&self.collection,
|
||||||
|
) {
|
||||||
eprintln!("{}", err);
|
eprintln!("{}", err);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue