#![allow(non_snake_case)] macro_rules! wrapper { ($name: ident, $value: ident $(, $t: ty)?) => { #[derive(serde::Serialize, serde::Deserialize)] #[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))] pub struct $name { $value: T, } impl<'de, T> $name { pub fn serialize(value: &T, serializer: S) -> Result where S: serde::Serializer, T: serde::Serialize, { let wrapper = $name { $value: value }; serde::Serialize::serialize(&wrapper, serializer) } pub fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de>, T: serde::Deserialize<'de>, { let v: $name = serde::Deserialize::deserialize(deserializer)?; Ok(v.$value) } } }; } wrapper!(ValueWrapper, value); wrapper!(PrefixWrapper, vendorPrefix, crate::vendor_prefix::VendorPrefix);