use serde::de::DeserializeSeed;
use serde::de::Deserializer;
use super::internal::MetadataWireV1Visitor;
use super::metadata_wire_v1::MetadataWireV1;
pub(crate) struct MetadataWireV1Seed<S> {
values: S,
}
impl<S> MetadataWireV1Seed<S> {
#[must_use]
#[inline]
pub(crate) const fn new(values: S) -> Self {
Self { values }
}
}
impl<'de, S> DeserializeSeed<'de> for MetadataWireV1Seed<S>
where
S: DeserializeSeed<'de>,
{
type Value = MetadataWireV1<S::Value>;
fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_struct(
"MetadataWireV1",
&["version", "values"],
MetadataWireV1Visitor {
values: Some(self.values),
},
)
}
}