use serde::{Deserialize, Serialize};
pub use crate::Lazy;
pub mod aturi;
pub mod blob;
pub mod cid;
pub mod collection;
pub mod crypto;
pub mod datetime;
pub mod did;
pub mod did_doc;
pub mod handle;
pub mod ident;
pub mod integer;
pub mod language;
pub mod nsid;
pub mod recordkey;
pub mod string;
pub mod tid;
pub mod uri;
pub mod value;
pub trait Literal: Clone + Copy + PartialEq + Eq + Send + Sync + 'static {
const LITERAL: &'static str;
}
pub const DISALLOWED_TLDS: &[&str] = &[
".local",
".arpa",
".invalid", ".localhost",
".internal",
".example",
".alt",
".onion",
];
pub fn ends_with(string: impl AsRef<str>, list: &[&str]) -> bool {
let string = string.as_ref();
for item in list {
if string.ends_with(item) {
return true;
}
}
false
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(rename_all = "kebab-case")]
pub enum DataModelType {
Null,
Boolean,
Integer,
Bytes,
CidLink,
Blob,
Array,
Object,
#[serde(untagged)]
String(LexiconStringType),
}
impl core::fmt::Display for DataModelType {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
match self {
DataModelType::Null => write!(f, "null"),
DataModelType::Boolean => write!(f, "boolean"),
DataModelType::Integer => write!(f, "integer"),
DataModelType::Bytes => write!(f, "bytes"),
DataModelType::CidLink => write!(f, "cid-link"),
DataModelType::Blob => write!(f, "blob"),
DataModelType::Array => write!(f, "array"),
DataModelType::Object => write!(f, "object"),
DataModelType::String(s) => write!(f, "{}", s),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(rename_all = "kebab-case")]
pub enum LexiconStringType {
Datetime,
AtUri,
Did,
Handle,
AtIdentifier,
Nsid,
Cid,
Language,
Tid,
RecordKey,
Uri(UriType),
#[serde(untagged)]
String,
}
impl core::fmt::Display for LexiconStringType {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
match self {
LexiconStringType::Datetime => write!(f, "datetime"),
LexiconStringType::AtUri => write!(f, "at-uri"),
LexiconStringType::Did => write!(f, "did"),
LexiconStringType::Handle => write!(f, "handle"),
LexiconStringType::AtIdentifier => write!(f, "at-identifier"),
LexiconStringType::Nsid => write!(f, "nsid"),
LexiconStringType::Cid => write!(f, "cid"),
LexiconStringType::Language => write!(f, "language"),
LexiconStringType::Tid => write!(f, "tid"),
LexiconStringType::RecordKey => write!(f, "record-key"),
LexiconStringType::Uri(u) => write!(f, "uri({})", u),
LexiconStringType::String => write!(f, "string"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum UriType {
Did,
At,
Https,
Wss,
Cid,
Dns,
Any,
}
impl core::fmt::Display for UriType {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
match self {
UriType::Did => write!(f, "did"),
UriType::At => write!(f, "at"),
UriType::Https => write!(f, "https"),
UriType::Wss => write!(f, "wss"),
UriType::Cid => write!(f, "cid"),
UriType::Dns => write!(f, "dns"),
UriType::Any => write!(f, "any"),
}
}
}