use indexmap::IndexMap;
use serde::Serialize;
use super::type_expr::IrTypeExpr;
#[derive(Debug, Clone, Serialize)]
pub struct IrOperation {
pub operation_id: String,
pub tags: Vec<String>,
pub method: String,
pub path: String,
pub summary: Option<String>,
pub description: Option<String>,
pub deprecated: bool,
pub parameters: Vec<IrParameter>,
pub request_body: Option<IrRequestBody>,
pub responses: Vec<IrResponse>,
pub security: Vec<IrSecurityRequirement>,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrParameter {
pub name: String,
pub location: ParameterLocation,
pub type_expr: IrTypeExpr,
pub required: bool,
pub description: Option<String>,
pub default_value: Option<serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub enum ParameterLocation {
Query,
Header,
Path,
Cookie,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrRequestBody {
pub required: bool,
pub description: Option<String>,
pub content: IndexMap<String, IrTypeExpr>,
pub encoding: IndexMap<String, IndexMap<String, IrRequestBodyEncoding>>,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrRequestBodyEncoding {
pub content_type: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrResponse {
pub status: String,
pub description: String,
pub content: IndexMap<String, IrTypeExpr>,
pub item_content: IndexMap<String, IrTypeExpr>,
pub headers: IndexMap<String, IrHeader>,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrHeader {
pub description: Option<String>,
pub type_expr: IrTypeExpr,
pub required: bool,
}
#[derive(Debug, Clone, Serialize)]
pub struct IrSecurityRequirement {
pub scheme_name: String,
pub scopes: Vec<String>,
}