earl-protocol-http 0.6.4

HTTP and GraphQL execution protocol for earl
Documentation
use std::collections::BTreeMap;

use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
use serde::{Deserialize, Serialize};
use serde_json::Value;

use earl_core::schema::{AuthTemplate, BodyTemplate, TransportTemplate};
use earl_core::with::AsJson;

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct HttpOperationTemplate {
    pub method: String,
    pub url: String,
    pub path: Option<String>,
    #[rkyv(with = AsJson)]
    pub query: Option<BTreeMap<String, Value>>,
    #[rkyv(with = AsJson)]
    pub headers: Option<BTreeMap<String, Value>>,
    #[rkyv(with = AsJson)]
    pub cookies: Option<BTreeMap<String, Value>>,
    pub auth: Option<AuthTemplate>,
    pub body: Option<BodyTemplate>,
    #[serde(default)]
    pub stream: bool,
    pub transport: Option<TransportTemplate>,
}

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct GraphqlOperationTemplate {
    #[serde(default)]
    pub method: String,
    pub url: String,
    pub path: Option<String>,
    #[rkyv(with = AsJson)]
    pub query: Option<BTreeMap<String, Value>>,
    #[rkyv(with = AsJson)]
    pub headers: Option<BTreeMap<String, Value>>,
    #[rkyv(with = AsJson)]
    pub cookies: Option<BTreeMap<String, Value>>,
    pub auth: Option<AuthTemplate>,
    pub graphql: GraphqlTemplate,
    #[serde(default)]
    pub stream: bool,
    pub transport: Option<TransportTemplate>,
}

#[derive(Debug, Clone, Deserialize, Serialize, Archive, RkyvSerialize, RkyvDeserialize)]
#[serde(deny_unknown_fields)]
pub struct GraphqlTemplate {
    pub query: String,
    pub operation_name: Option<String>,
    #[rkyv(with = AsJson)]
    pub variables: Option<Value>,
}