Remove FieldName enum
This commit is contained in:
parent
dca8ff5b25
commit
a0163f7487
1 changed files with 6 additions and 34 deletions
|
@ -389,37 +389,6 @@ macro_rules! define_config {
|
||||||
where
|
where
|
||||||
D: Deserializer<'de>,
|
D: Deserializer<'de>,
|
||||||
{
|
{
|
||||||
#[allow(non_camel_case_types)]
|
|
||||||
enum FieldName {
|
|
||||||
$($field,)*
|
|
||||||
}
|
|
||||||
struct FieldNameVisitor;
|
|
||||||
impl<'de> serde::de::Visitor<'de> for FieldNameVisitor {
|
|
||||||
type Value = FieldName;
|
|
||||||
fn expecting(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
||||||
f.write_str("field identifier")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
|
|
||||||
where
|
|
||||||
E: serde::de::Error,
|
|
||||||
{
|
|
||||||
match value {
|
|
||||||
$($field_key => Ok(FieldName::$field),)*
|
|
||||||
_ => Err(serde::de::Error::unknown_field(value, FIELDS)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl<'de> Deserialize<'de> for FieldName {
|
|
||||||
#[inline]
|
|
||||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
||||||
where
|
|
||||||
D: Deserializer<'de>,
|
|
||||||
{
|
|
||||||
Deserializer::deserialize_identifier(deserializer, FieldNameVisitor)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
struct Field;
|
struct Field;
|
||||||
impl<'de> serde::de::Visitor<'de> for Field {
|
impl<'de> serde::de::Visitor<'de> for Field {
|
||||||
type Value = $name;
|
type Value = $name;
|
||||||
|
@ -434,15 +403,15 @@ macro_rules! define_config {
|
||||||
{
|
{
|
||||||
$(let mut $field: Option<$field_ty> = None;)*
|
$(let mut $field: Option<$field_ty> = None;)*
|
||||||
while let Some(key) =
|
while let Some(key) =
|
||||||
match serde::de::MapAccess::next_key::<FieldName>(&mut map) {
|
match serde::de::MapAccess::next_key::<String>(&mut map) {
|
||||||
Ok(val) => val,
|
Ok(val) => val,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
return Err(err);
|
return Err(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
match key {
|
match &*key {
|
||||||
$(FieldName::$field => {
|
$($field_key => {
|
||||||
if $field.is_some() {
|
if $field.is_some() {
|
||||||
return Err(<A::Error as serde::de::Error>::duplicate_field(
|
return Err(<A::Error as serde::de::Error>::duplicate_field(
|
||||||
$field_key,
|
$field_key,
|
||||||
|
@ -457,6 +426,9 @@ macro_rules! define_config {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})*
|
})*
|
||||||
|
key => {
|
||||||
|
return Err(serde::de::Error::unknown_field(key, FIELDS));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok($name { $($field),* })
|
Ok($name { $($field),* })
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue