restify_openapi/models/
reference_or.rs

1use schemars::schema::Schema;
2use serde::Serialize;
3
4#[derive(Serialize, Clone, Debug)]
5#[cfg_attr(any(test, feature = "deserialize"), derive(serde::Deserialize, PartialEq))]
6#[serde(untagged)]
7pub enum ReferenceOr<T: Clone> {
8  Object(T),
9  Reference {
10    #[serde(rename = "$ref")]
11    _ref: String,
12  },
13}
14
15impl From<Schema> for ReferenceOr<Schema> {
16  fn from(value: Schema) -> Self {
17    Self::Object(value)
18  }
19}
20
21impl From<String> for ReferenceOr<String> {
22  fn from(value: String) -> Self {
23    Self::Reference { _ref: value }
24  }
25}
26
27impl<T: Clone> ReferenceOr<T> {
28  pub fn get_object(self) -> Option<T> {
29    match self {
30      ReferenceOr::Reference { .. } => None,
31      ReferenceOr::Object(p) => Some(p),
32    }
33  }
34
35  pub fn get_object_mut(&mut self) -> Option<&mut T> {
36    match self {
37      ReferenceOr::Reference { .. } => None,
38      ReferenceOr::Object(p) => Some(p),
39    }
40  }
41}