use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct E2eConfig {
#[serde(default = "default_fixtures_dir")]
pub fixtures: String,
#[serde(default = "default_output_dir")]
pub output: String,
#[serde(default)]
pub languages: Vec<String>,
pub call: CallConfig,
#[serde(default)]
pub packages: HashMap<String, PackageRef>,
#[serde(default)]
pub format: HashMap<String, String>,
#[serde(default)]
pub fields: HashMap<String, String>,
#[serde(default)]
pub fields_optional: HashSet<String>,
}
fn default_fixtures_dir() -> String {
"fixtures".to_string()
}
fn default_output_dir() -> String {
"e2e".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CallConfig {
#[serde(default)]
pub function: String,
#[serde(default)]
pub module: String,
#[serde(default = "default_result_var")]
pub result_var: String,
#[serde(default)]
pub r#async: bool,
#[serde(default)]
pub args: Vec<ArgMapping>,
#[serde(default)]
pub overrides: HashMap<String, CallOverride>,
}
fn default_result_var() -> String {
"result".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArgMapping {
pub name: String,
pub field: String,
#[serde(rename = "type", default = "default_arg_type")]
pub arg_type: String,
#[serde(default)]
pub optional: bool,
}
fn default_arg_type() -> String {
"string".to_string()
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct CallOverride {
#[serde(default)]
pub module: Option<String>,
#[serde(default)]
pub function: Option<String>,
#[serde(default)]
pub crate_name: Option<String>,
#[serde(default)]
pub class: Option<String>,
#[serde(default)]
pub alias: Option<String>,
#[serde(default)]
pub header: Option<String>,
#[serde(default)]
pub prefix: Option<String>,
#[serde(default)]
pub options_type: Option<String>,
#[serde(default)]
pub options_via: Option<String>,
#[serde(default)]
pub enum_fields: HashMap<String, String>,
#[serde(default)]
pub enum_module: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PackageRef {
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub module: Option<String>,
#[serde(default)]
pub version: Option<String>,
}