restify_openapi/models/
reference_or.rs1use 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}