Prevent catchall schema types from trying to incorporate the version field during deserialization
This commit is contained in:
parent
1a6bb519ef
commit
ebffd7a922
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "jsondb"
|
||||
version = "0.3.0"
|
||||
version = "0.3.1"
|
||||
edition = "2021"
|
||||
authors = ["xenofem <xenofem@xeno.science>"]
|
||||
license = "MIT"
|
||||
|
|
10
src/lib.rs
10
src/lib.rs
|
@ -74,7 +74,7 @@ pub trait Schema: Send + Sync + Debug + DeserializeOwned + Serialize + 'static {
|
|||
let Version { version } = serde_json::from_str(s)?;
|
||||
match version.cmp(&Self::VERSION) {
|
||||
Ordering::Less => Ok(Self::Prev::parse(s)?.into()),
|
||||
Ordering::Equal => Ok(serde_json::from_str(s)?),
|
||||
Ordering::Equal => Ok(serde_json::from_str::<VersionedData<Self>>(s)?.data),
|
||||
Ordering::Greater => Err(Error::UnknownVersion(version)),
|
||||
}
|
||||
}
|
||||
|
@ -110,11 +110,11 @@ struct Version {
|
|||
version: u32,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
struct Repr<'a, T: Schema> {
|
||||
#[derive(Deserialize, Serialize)]
|
||||
struct VersionedData<T> {
|
||||
version: u32,
|
||||
#[serde(flatten)]
|
||||
data: &'a T,
|
||||
data: T,
|
||||
}
|
||||
|
||||
/// Errors that can occur while working with [`JsonDb`].
|
||||
|
@ -145,7 +145,7 @@ async fn save<T: Schema>(data: &T, path: &Path) -> Result<(), Error> {
|
|||
{
|
||||
let mut temp_file = File::create(&temp_file_path).await?;
|
||||
temp_file
|
||||
.write_all(&serde_json::to_vec_pretty(&Repr {
|
||||
.write_all(&serde_json::to_vec_pretty(&VersionedData {
|
||||
version: T::VERSION,
|
||||
data,
|
||||
})?)
|
||||
|
|
Loading…
Reference in a new issue