1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
use std::collections::BTreeMap; use serde::{Serialize, Deserialize}; #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Spec { pub openapi: String, pub paths: BTreeMap<String, PathItem>, pub components: Option<Components>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct PathItem { pub summary: Option<String>, pub description: Option<String>, pub get: Option<Operation>, pub put: Option<Operation>, pub post: Option<Operation>, pub delete: Option<Operation>, pub options: Option<Operation>, pub head: Option<Operation>, pub patch: Option<Operation>, pub trace: Option<Operation>, pub parameters: Option<BTreeMap<String, Parameter>>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Components { pub schemas: Option<BTreeMap<String, Schema>>, pub responses: Option<BTreeMap<String, Response>>, pub parameters: Option<BTreeMap<String, Parameter>>, pub request_bodies: Option<BTreeMap<String, RequestBody>>, pub headers: Option<BTreeMap<String, Header>>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Schema { #[serde(rename = "$ref")] pub ref_: Option<String>, #[serde(rename = "type")] pub type_: Option<String>, pub items: Option<Box<Schema>>, pub format: Option<String>, pub properties: Option<BTreeMap<String, Schema>>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Response { pub description: Option<String>, pub headers: Option<BTreeMap<String, Header>>, pub content: Option<BTreeMap<String, MediaType>>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Parameter { pub name: String, #[serde(rename = "in")] pub in_: String, pub required: Option<bool>, pub schema: Schema, pub style: Option<String>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct RequestBody { pub content: BTreeMap<String, MediaType>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Header { pub description: Option<String>, pub schema: Schema, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct Operation { pub summary: Option<String>, pub description: Option<String>, #[serde(rename = "operationId")] pub operation_id: String, pub parameters: Option<Vec<Parameter>>, pub request_body: Option<RequestBody>, pub responses: Option<BTreeMap<String, Response>>, } #[derive(Debug, Deserialize, Serialize, PartialEq)] pub struct MediaType { pub schema: Schema }