use std::{default, ops::Deref};
use derive_more::{Display, Error};
use crate::v31;
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Reference {
#[serde(rename = "$ref", skip_serializing_if = "Option::is_none")]
pub dollar_ref: Option<String>,
#[serde(rename = "summary", skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(rename = "description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
impl Reference {
pub fn new() -> Reference {
Reference { dollar_ref: None, summary: None, description: None }
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[serde(untagged)]
pub enum ObjectOrRef<T> {
Object(T),
Ref {
#[serde(rename = "$ref")]
r#ref: String,
},
}
#[derive(Clone, Debug, PartialEq, Display, Error)]
pub enum ObjectRefErr {
#[display(fmt = "Reference Error")]
Ref,
}
impl<T> ObjectOrRef<T> {
pub fn resolve(&self) -> Result<&T, ObjectRefErr> {
match self {
ObjectOrRef::Object(object) => Ok(object),
ObjectOrRef::Ref { r#ref: _ } => Err(ObjectRefErr::Ref),
}
}
}