Macro tokenizers::impl_serde_type
source · macro_rules! impl_serde_type { ( $(#[$meta:meta])* $vis:vis struct $struct_name:ident { $( $(#[$field_meta:meta])* $field_vis:vis $field_name:ident : $field_type:ty ),*$(,)+ } ) => { ... }; ( $(#[$meta:meta])* $vis:vis struct $struct_name:ident; ) => { ... }; }
Expand description
Implement serde::{Serialize, Serializer}
with #[serde(tag = "type")]
attribute for a given struct.
Panic when a json string being deserilized misses field type
.
§Examples
use serde::{Serialize, Deserialize};
fn main() {
impl_serde_type!{
#[derive(Debug)]
struct Point {
x: i32,
#[serde(default = "default_y")]
y: i32,
}
}
fn default_y() -> i32 {
5
}
let point = Point { x: 1, y: 2 };
let serialized_s = r#"{"type":"Point","x":1,"y":2}"#;
assert_eq!(serde_json::to_string(&point).unwrap(), serialized_s);
}
ⓘ
use serde::{Serialize, Deserialize};
fn main() {
impl_serde_type!{
#[derive(Debug)]
struct Point1D {
x: i32,
}
}
let serialized_s = r#"{"x":1}"#;
let deserialized: Point1D = serde_json::from_str(serialized_s).unwrap();
}
§Examples (unit structs)
use serde::{Serialize, Deserialize};
fn main() {
impl_serde_type!{
struct Unit;
}
let unit = Unit;
let serialized_s = r#"{"type":"Unit"}"#;
assert_eq!(serde_json::to_string(&unit).unwrap(), serialized_s);
}
ⓘ
use serde::{Serialize, Deserialize};
fn main() {
impl_serde_type!{
struct Unit;
}
let serialized_s = r#"{"some_field":1}"#;
let deserialized: Unit = serde_json::from_str(serialized_s).unwrap();
}