use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApiModel {
pub name: String,
#[serde(default)]
pub resources: Vec<ResourceModel>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceModel {
pub name: String,
#[serde(default)]
pub profile_url: Option<String>,
#[serde(default)]
pub operations: Vec<OperationModel>,
#[serde(default)]
pub search_params: Vec<SearchParamModel>,
#[serde(default)]
pub search_include: Vec<String>,
#[serde(default)]
pub search_revinclude: Vec<String>,
#[serde(default)]
pub supported_profiles: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OperationModel {
pub name: String,
pub method: String,
pub path: String,
#[serde(default)]
pub request_body: Option<BodyModel>,
#[serde(default)]
pub responses: Vec<ResponseModel>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BodyModel {
#[serde(default = "default_json_content_type")]
pub content_type: String,
#[serde(default)]
pub schema: Option<serde_json::Value>,
#[serde(default)]
pub required_fields: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseModel {
pub status_code: u16,
#[serde(default)]
pub content_type: Option<String>,
#[serde(default)]
pub schema: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchParamModel {
pub name: String,
pub param_type: String,
#[serde(default)]
pub modifiers: Vec<String>,
#[serde(default)]
pub prefixes: Vec<String>,
}
fn default_json_content_type() -> String {
"application/json".to_string()
}