use serde::{de::DeserializeOwned, Deserialize, Deserializer}; use super::{BundledMessageLikeRelations, BundledThread, ReferenceChunk}; use crate::serde::Raw; #[derive(Deserialize)] struct BundledMessageLikeRelationsJsonRepr { #[serde(rename = "m.replace")] replace: Option>>, #[serde(rename = "m.thread")] thread: Option>, #[serde(rename = "m.reference")] reference: Option>, } impl<'de, E> Deserialize<'de> for BundledMessageLikeRelations where E: DeserializeOwned, { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { let BundledMessageLikeRelationsJsonRepr { replace, thread, reference } = BundledMessageLikeRelationsJsonRepr::deserialize(deserializer)?; let (replace, has_invalid_replacement) = match replace.as_ref().map(Raw::deserialize).transpose() { Ok(replace) => (replace, false), Err(_) => (None, true), }; Ok(BundledMessageLikeRelations { replace, has_invalid_replacement, thread, reference }) } }