#[derive(PartialEq, Eq, Clone, Debug)]
pub struct EntityUri {
value: String,
kind_name_start: usize,
kind_version_start: usize,
path_start: usize,
name_start: usize,
}
impl EntityUri {
pub fn parse(_s: impl Into<String>) -> Result<Self, EntityUriParseError> {
todo!()
}
}
impl std::str::FromStr for EntityUri {
type Err = EntityUriParseError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
Self::parse(s)
}
}
impl serde::Serialize for EntityUri {
fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_str(&self.value)
}
}
impl<'de> serde::Deserialize<'de> for EntityUri {
fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let value = String::deserialize(deserializer)?;
Self::parse(&value).map_err(serde::de::Error::custom)
}
}
impl schemars::JsonSchema for EntityUri {
fn schema_name() -> String {
"EntityUri".to_string()
}
fn json_schema(_gen: &mut schemars::gen::SchemaGenerator) -> schemars::schema::Schema {
schemars::schema::Schema::Object(schemars::schema::SchemaObject {
instance_type: Some(schemars::schema::InstanceType::String.into()),
..Default::default()
})
}
}
#[derive(Clone, Debug)]
pub enum EntityUriParseError {}
impl std::fmt::Display for EntityUriParseError {
fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
_ => {
todo!()
}
}
}
}
impl std::error::Error for EntityUriParseError {}
#[derive(
serde::Serialize, serde::Deserialize, schemars::JsonSchema, PartialEq, Eq, Clone, Debug,
)]
pub enum EntityOrRef<T> {
#[serde(rename = "ref")]
Ref(EntityUri),
#[serde(rename = "item")]
Item(T),
}