shex_ast/ast/
iri_ref_or_wildcard.rs

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