Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use serde::{de, Deserialize, Deserializer};
- #[derive(Debug, Deserialize)]
- struct Foo {
- foo: u32,
- #[serde(deserialize_with = "deserialize_from_str")]
- bar: Bar,
- }
- #[derive(Debug, Deserialize)]
- struct Bar {
- foo: String,
- }
- fn deserialize_from_str<'de, T, D>(deserializer: D) -> Result<T, D::Error>
- where
- D: Deserializer<'de>,
- T: de::DeserializeOwned,
- {
- let data: String = Deserialize::deserialize(deserializer)?;
- serde_json::from_str(&data).map_err(de::Error::custom)
- }
- fn main() {
- let data = r#"
- {
- "foo": 42,
- "bar": "{\"foo\":\"bar\"}"
- }
- "#;
- println!("{:?}", serde_json::from_str::<Foo>(data));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement