use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Serialize, Deserialize)]
pub struct Collection {
pub info: Info,
pub item: Vec<ItemOrGroup>,
pub event: Option<Vec<Event>>,
pub variable: Option<Vec<Variable>>,
pub auth: Option<Auth>,
#[serde(rename = "protocolProfileBehavior")]
pub protocol_profile_behavior: Option<ProtocolProfileBehavior>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Auth {
#[serde(rename = "auth")]
pub atype: AuthType,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum AuthType {
#[serde(rename = "apikey")]
APIKey,
#[serde(rename = "awsv4")]
AWSv4,
#[serde(rename = "basic")]
Basic,
#[serde(rename = "bearer")]
Bearer,
#[serde(rename = "digest")]
Digest,
#[serde(rename = "edgegrid")]
EdgeGrid,
#[serde(rename = "hawk")]
Hawk,
#[serde(rename = "noauth")]
NoAuth,
#[serde(rename = "oauth1")]
OAuth1,
#[serde(rename = "oauth2")]
OAuth2,
#[serde(rename = "ntlm")]
NTLM,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Description {
Str(String),
Obj(DescriptionObj),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct DescriptionObj {
pub content: Option<String>,
#[serde(rename = "type")]
pub mime_type: Option<String>,
pub version: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Event {
pub id: Option<String>,
pub listen: String,
pub script: Option<Script>,
pub disabled: Option<bool>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Exec {
Str(String),
Obj(Vec<String>),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Info {
pub name: String,
#[serde(rename = "_postman_id")]
pub postman_id: Option<String>,
pub description: Option<Description>,
pub version: Option<Version>,
pub schema: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum ItemOrGroup {
Item(Item),
Group(ItemGroup),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Item {
pub id: Option<String>,
pub name: Option<String>,
pub description: Option<Description>,
pub variable: Option<Vec<Variable>>,
pub event: Option<Vec<Event>>,
pub request: Request,
pub response: Option<Vec<Response>>,
#[serde(rename = "protocolProfileBehavior")]
pub protocol_profile_behavior: Option<ProtocolProfileBehavior>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ItemGroup {}
#[derive(Debug, Serialize, Deserialize)]
pub struct ProtocolProfileBehavior {}
#[derive(Debug, Serialize, Deserialize)]
pub struct QueryParam {
pub key: Option<String>,
pub value: Option<String>,
pub description: Option<String>,
pub disabled: Option<bool>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Request {}
#[derive(Debug, Serialize, Deserialize)]
pub struct Response {}
#[derive(Debug, Serialize, Deserialize)]
pub struct Script {
pub id: Option<String>,
pub stype: Option<String>,
pub exec: Option<Exec>,
pub src: Option<URL>,
pub name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum URL {
Str(String),
Obj(URLObj),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct URLObj {
pub raw: Option<String>,
pub protocol: Option<String>,
pub host: Option<Host>,
pub path: Option<Path>,
pub port: Option<String>,
pub query: Option<Vec<QueryParam>>,
pub hash: Option<String>,
pub variable: Option<Vec<Variable>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Host {
Str(String),
Parts(Vec<String>),
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Path {
Str(String),
Parts(Vec<PathPart>),
}
#[derive(Debug, Serialize, Deserialize)]
pub enum PathPart {
Str(String),
Obj(PathPartObj),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PathPartObj {
pub dtype: Option<String>,
pub value: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Variable {
pub id: Option<String>,
pub key: Option<String>,
pub value: Option<Value>,
#[serde(rename="type")]
pub dtype: Option<VarDType>,
pub name: Option<String>,
pub description: Option<Description>,
pub system: Option<bool>,
pub disabled: Option<bool>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum VarDType {
#[serde(rename="string")]
String,
#[serde(rename="boolean")]
Boolean,
#[serde(rename="number")]
Number,
#[serde(rename="any")]
Any,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Version {
Str(String),
Obj(VersionObj),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct VersionObj {
pub major: u32,
pub minor: u32,
pub patch: u32,
pub identifier: Option<String>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = 2 + 2;
assert_eq!(result, 4);
}
}