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