use serde::Deserialize;
#[derive(Debug, Deserialize)]
pub struct Spec {
#[serde(default)]
pub item: Vec<Items>,
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum Items {
Item(Item),
ItemGroup(ItemGroup),
}
#[derive(Debug, Deserialize)]
pub struct Item {
pub name: Option<String>,
pub description: Option<DescriptionUnion>,
pub request: RequestClass,
pub response: Option<Vec<ResponseClass>>,
}
#[derive(Debug, Deserialize)]
pub struct ItemGroup {
pub name: Option<String>,
pub item: Vec<Items>,
}
#[derive(Debug, Deserialize)]
pub struct RequestClass {
pub method: Option<String>,
pub url: Option<Url>,
pub header: Option<Vec<Header>>,
pub body: Option<Body>,
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum Url {
String(String),
UrlClass(UrlClass),
}
#[derive(Debug, Deserialize)]
pub struct UrlClass {
pub raw: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct Header {
#[serde(default)]
pub key: String,
#[serde(default)]
pub value: String,
pub disabled: Option<bool>,
}
#[derive(Debug, Deserialize)]
pub struct Body {
pub raw: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct ResponseClass {
pub code: Option<i64>,
pub status: Option<String>,
pub body: Option<String>,
}
#[derive(Debug, Deserialize)]
#[serde(untagged)]
pub enum DescriptionUnion {
Description(Description),
String(String),
}
#[derive(Debug, Deserialize)]
pub struct Description {
pub content: Option<String>,
}