Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix up deserializing
  • Loading branch information
ascjones committed Aug 10, 2020
commit d4276ecef6234d57920e6da7c93df0d9779bfdee
2 changes: 1 addition & 1 deletion src/ty/composite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ use serde::{Serialize, Deserialize, de::DeserializeOwned};
))]
#[serde(rename_all = "lowercase")]
pub struct TypeDefComposite<T: Form = MetaForm> {
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(skip_serializing_if = "Vec::is_empty", default)]
fields: Vec<Field<T>>,
}

Expand Down
2 changes: 1 addition & 1 deletion src/ty/fields.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ use serde::{Serialize, Deserialize, de::DeserializeOwned};
))]
pub struct Field<T: Form = MetaForm> {
/// The name of the field. None for unnamed fields.
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none", default)]
name: Option<T::String>,
/// The type of the field.
#[serde(rename = "type")]
Expand Down
4 changes: 2 additions & 2 deletions src/ty/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ pub use self::{composite::*, fields::*, path::*, variant::*};
))]
pub struct Type<T: Form = MetaForm> {
/// The unique path to the type. Can be empty for built-in types
#[serde(skip_serializing_if = "Path::is_empty")]
#[serde(skip_serializing_if = "Path::is_empty", default)]
path: Path<T>,
/// The generic type parameters of the type in use. Empty for non generic types
#[serde(rename = "params", skip_serializing_if = "Vec::is_empty")]
#[serde(rename = "params", skip_serializing_if = "Vec::is_empty", default)]
type_params: Vec<T::TypeId>,
/// The actual type definition
#[serde(rename = "def")]
Expand Down
6 changes: 3 additions & 3 deletions src/ty/variant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ use serde::{Serialize, Deserialize, de::DeserializeOwned};
))]
#[serde(rename_all = "lowercase")]
pub struct TypeDefVariant<T: Form = MetaForm> {
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(skip_serializing_if = "Vec::is_empty", default)]
variants: Vec<Variant<T>>,
}

Expand Down Expand Up @@ -118,7 +118,7 @@ pub struct Variant<T: Form = MetaForm> {
/// The name of the struct variant.
name: T::String,
/// The fields of the struct variant.
#[serde(skip_serializing_if = "Vec::is_empty")]
#[serde(skip_serializing_if = "Vec::is_empty", default)]
fields: Vec<Field<T>>,
/// The discriminant of the variant.
///
Expand All @@ -127,7 +127,7 @@ pub struct Variant<T: Form = MetaForm> {
/// Even though setting the discriminant is optional
/// every C-like enum variant has a discriminant specified
/// upon compile-time.
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(skip_serializing_if = "Option::is_none", default)]
discriminant: Option<u64>,
}

Expand Down
13 changes: 13 additions & 0 deletions test_suite/tests/codec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,16 @@ fn scale_encode_then_decode_to_readonly() {

assert_eq!(decoded_serialized, original_serialized);
}

#[test]
fn json_serialize_then_deserialize_to_readonly() {
let mut registry = Registry::new();
registry.register_type(&MetaType::new::<A<B>>());

let original_serialized = serde_json::to_value(registry).unwrap();
// assert_eq!(original_serialized, serde_json::Value::Null);
let readonly_deserialized: RegistryReadOnly = serde_json::from_value(original_serialized.clone()).unwrap();
let readonly_serialized = serde_json::to_value(readonly_deserialized).unwrap();

assert_eq!(readonly_serialized, original_serialized);
}