pub struct NestedJson<T>(/* private fields */);
Expand description
Wraps an instance of T for nested serialization and deserializion. You will however need to extract and insert the inner value on, so Its recommended to use the entire module at once instead - see the main crate docs or README.md for that.
use serde::{Serialize, Deserialize};
use serde_json::{json, from_value, to_string_pretty};
use serde_nested_json::NestedJson;
let as_json = json!({
"nestedJson": "{\"baz\":123}"
});
#[derive(Serialize, Deserialize)]
struct SomeData {
baz: u32
}
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct MyStruct {
nested_json: NestedJson<SomeData>
}
// NestedJson<T> implements From<T>, so you can use t.into()
// as well as NestedJson::from(t)
impl From<SomeData> for MyStruct {
fn from(value: SomeData) -> MyStruct {
MyStruct {
nested_json: value.into()
}
}
}
// There's also an associated `into` fn which returns T
// NestedJson::from is also available, but I havent found
// a way to associate it with with the std::conversion
// traits using stable features
impl From<MyStruct> for SomeData {
fn from(value: MyStruct) -> SomeData {
value.nested_json.into()
}
}
// NestedJson<T> also implements AsRef<T>:
impl AsRef<SomeData> for MyStruct {
fn as_ref(&self) -> &SomeData {
self.nested_json.as_ref()
}
}
let a = SomeData { baz: 32 };
let b: MyStruct = a.into();
let c: SomeData = b.into();
let d: NestedJson<SomeData> = c.into();
let e: SomeData = d.into();
let a = SomeData { baz: 32 };
let b = MyStruct::from(a);
let c = SomeData::from(b);
let d = NestedJson::<SomeData>::from(c);
// Sadly not possible without manual implementation:
// let e = SomeData::from(d);
println!("{}", to_string_pretty(&from_value::<MyStruct>(as_json).unwrap()).unwrap());
Implementations§
Source§impl<T> NestedJson<T>
impl<T> NestedJson<T>
Trait Implementations§
Source§impl<T> AsRef<T> for NestedJson<T>
impl<T> AsRef<T> for NestedJson<T>
Source§impl<'de, T> Deserialize<'de> for NestedJson<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for NestedJson<T>where
T: Deserialize<'de>,
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<T> From<T> for NestedJson<T>
impl<T> From<T> for NestedJson<T>
Auto Trait Implementations§
impl<T> Freeze for NestedJson<T>where
T: Freeze,
impl<T> RefUnwindSafe for NestedJson<T>where
T: RefUnwindSafe,
impl<T> Send for NestedJson<T>where
T: Send,
impl<T> Sync for NestedJson<T>where
T: Sync,
impl<T> Unpin for NestedJson<T>where
T: Unpin,
impl<T> UnwindSafe for NestedJson<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more