use serde::Serialize;
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
pub(super) struct PostmanCollection {
pub event: Vec<Event>,
pub info: Information,
pub item: Vec<Items>,
pub variable: Vec<Variable>,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct PostmanEnvironment {
pub id: String,
pub name: String,
pub values: Vec<Variable>,
}
impl Default for PostmanEnvironment {
fn default() -> Self {
Self {
id: uuid::Uuid::new_v4().as_hyphenated().to_string(),
name: Default::default(),
values: Default::default(),
}
}
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct Event {
pub listen: EventType,
pub script: Script,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
#[serde(rename_all = "snake_case")]
pub(super) enum EventType {
Test,
Prerequest,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct Script {
#[serde(skip_serializing_if = "String::is_empty")]
pub exec: String,
#[serde(rename = "type")]
pub script_type: &'static str,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
pub(super) struct Variable {
#[serde(skip_serializing_if = "Option::is_none")]
pub disabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub key: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system: Option<bool>,
#[serde(rename = "type")]
pub variable_type: VariableType,
pub value: serde_json::Value,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct Information {
#[serde(rename = "_postman_id")]
pub postman_id: String,
pub name: String,
pub schema: String,
}
impl Default for Information {
fn default() -> Self {
Self {
schema: "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
.to_owned(),
name: "dothttp".to_owned(),
postman_id: uuid::Uuid::new_v4().as_hyphenated().to_string(),
}
}
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
#[serde(rename_all = "camelCase")]
pub(super) struct Items {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub event: Vec<Event>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub name: String,
pub request: Option<RequestClass>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub variable: Vec<Variable>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub item: Vec<Items>,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
#[serde(rename_all = "camelCase")]
pub(super) struct RequestClass {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub body: Option<BodyClass>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub header: Vec<Header>,
#[serde(default)]
pub method: Method,
pub url: String,
}
#[derive(Clone, Copy, Debug, Serialize, PartialEq, Default)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub(super) enum Method {
#[default]
Get,
Post,
Patch,
Put,
Delete,
Options,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
#[serde(rename_all = "camelCase")]
pub(super) struct BodyClass {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub disabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file: Option<File>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub formdata: Option<Vec<FormParameter>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<Options>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mode: Option<Mode>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub raw: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub urlencoded: Option<Vec<UrlEncodedParameter>>,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct Options {
pub raw: Raw,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct Raw {
pub language: Language,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
#[allow(unused)]
pub(super) enum Language {
#[serde(rename = "html")]
Html,
#[serde(rename = "json")]
Json,
#[serde(rename = "text")]
Text,
#[serde(rename = "xml")]
Xml,
#[serde(rename = "javascript")]
Javascript,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
pub(super) struct File {
pub content: Option<String>,
pub src: Option<String>,
}
#[derive(Clone, Debug, Serialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub(super) struct FormParameter {
pub content_type: Option<String>,
pub disabled: Option<bool>,
pub key: String,
#[serde(rename = "type")]
pub form_parameter_type: Option<String>,
pub value: Option<String>,
pub src: Option<Vec<String>>,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
pub(super) struct UrlEncodedParameter {
pub disabled: Option<bool>,
pub key: String,
pub value: Option<String>,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
pub(super) struct Header {
pub disabled: Option<bool>,
pub key: String,
pub value: String,
}
#[derive(Clone, Debug, Serialize, PartialEq, Default)]
#[serde(rename_all = "snake_case")]
#[allow(unused)]
pub(super) enum VariableType {
#[default]
Default,
Any,
Boolean,
Number,
String,
}
#[derive(Clone, Copy, Debug, Serialize, PartialEq)]
pub(super) enum Mode {
#[allow(unused)]
#[serde(rename = "file")]
File,
#[serde(rename = "formdata")]
Formdata,
#[serde(rename = "raw")]
Raw,
#[serde(rename = "urlencoded")]
Urlencoded,
}