Skip to main content

oag_core/parse/
operation.rs

1use indexmap::IndexMap;
2use serde::{Deserialize, Serialize};
3
4use super::parameter::ParameterOrRef;
5use super::request_body::RequestBodyOrRef;
6use super::response::ResponseOrRef;
7use super::security::SecurityRequirement;
8
9/// An API operation.
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
11pub struct Operation {
12    #[serde(rename = "operationId", skip_serializing_if = "Option::is_none")]
13    pub operation_id: Option<String>,
14
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub summary: Option<String>,
17
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub description: Option<String>,
20
21    #[serde(default, skip_serializing_if = "Vec::is_empty")]
22    pub tags: Vec<String>,
23
24    #[serde(default, skip_serializing_if = "Vec::is_empty")]
25    pub parameters: Vec<ParameterOrRef>,
26
27    #[serde(rename = "requestBody", skip_serializing_if = "Option::is_none")]
28    pub request_body: Option<RequestBodyOrRef>,
29
30    #[serde(default, skip_serializing_if = "IndexMap::is_empty")]
31    pub responses: IndexMap<String, ResponseOrRef>,
32
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub deprecated: Option<bool>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub security: Option<Vec<SecurityRequirement>>,
38}
39
40/// A path item, containing operations keyed by HTTP method.
41#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
42pub struct PathItem {
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub summary: Option<String>,
45
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub description: Option<String>,
48
49    #[serde(default, skip_serializing_if = "Vec::is_empty")]
50    pub parameters: Vec<ParameterOrRef>,
51
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub get: Option<Operation>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub post: Option<Operation>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub put: Option<Operation>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub delete: Option<Operation>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub patch: Option<Operation>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub options: Option<Operation>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub head: Option<Operation>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub trace: Option<Operation>,
68}