shex_ast/ast/
string_or_wildcard.rs

1use serde::ser::SerializeMap;
2use serde::{Serialize, Serializer};
3use std::{result, str::FromStr};
4use void::Void;
5
6#[derive(Debug, PartialEq, Clone)]
7pub enum StringOrWildcard {
8    String(String),
9    Wildcard,
10}
11
12impl FromStr for StringOrWildcard {
13    type Err = Void;
14
15    fn from_str(s: &str) -> Result<Self, Self::Err> {
16        Ok(StringOrWildcard::String(s.to_string()))
17    }
18}
19
20impl Serialize for StringOrWildcard {
21    fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
22    where
23        S: Serializer,
24    {
25        match self {
26            StringOrWildcard::String(s) => serializer.serialize_str(s),
27            StringOrWildcard::Wildcard => {
28                let mut map = serializer.serialize_map(Some(1))?;
29                map.serialize_entry("type", "Wildcard")?;
30                map.end()
31            }
32        }
33    }
34}