shex_ast/ast/
lang_or_wildcard.rs

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