xml: Add tag_name

This commit is contained in:
Lennart
2024-06-20 19:34:01 +02:00
parent 3094fe75bb
commit 2394692004
2 changed files with 45 additions and 0 deletions

View File

@@ -1 +1,2 @@
pub mod tag_list;
pub mod tag_name;

View File

@@ -0,0 +1,44 @@
use serde::{
de::{VariantAccess, Visitor},
Deserialize,
};
#[derive(Debug, Clone)]
pub struct TagName(String);
impl From<TagName> for String {
fn from(value: TagName) -> Self {
value.0
}
}
impl From<String> for TagName {
fn from(value: String) -> Self {
Self(value)
}
}
impl<'de> Deserialize<'de> for TagName {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
struct __Visitor;
impl<'de> Visitor<'de> for __Visitor {
type Value = TagName;
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str("tagname")
}
fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
where
A: serde::de::EnumAccess<'de>,
{
let (name, variant): (String, _) = data.variant()?;
VariantAccess::unit_variant(variant)?;
Ok(TagName(name))
}
}
deserializer.deserialize_enum("doesn't matter", &[], __Visitor)
}
}