use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
use crate::{ApicizeError, ApicizeExecutionTestContext, ApicizeTestBehavior, DataContext, ExecutionResultSuccess};
#[derive(Serialize, Deserialize, PartialEq, Clone)]
#[serde(rename_all = "camelCase", tag = "entityType")]
pub enum ExecutionResultDetail {
Request(Box<ExecutionResultDetailRequest>),
Grouped(Box<ExecutionResultDetailGroup>),
}
#[derive(Serialize, Deserialize, PartialEq, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionResultDetailRequest {
pub exec_ctr: usize,
pub request_id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub row_number: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub run_number: Option<usize>,
pub executed_at: u128,
pub duration: u128,
pub test_context: ApicizeExecutionTestContext,
pub output_variables: Option<Map<String, Value>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tests: Option<Vec<ApicizeTestBehavior>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub curl: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<ApicizeError>,
pub success: ExecutionResultSuccess,
pub request_success_count: usize,
pub request_failure_count: usize,
pub request_error_count: usize,
pub test_pass_count: usize,
pub test_fail_count: usize,
}
#[derive(Serialize, Deserialize, PartialEq, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionResultDetailGroup {
pub exec_ctr: usize,
pub group_id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub row_number: Option<usize>,
#[serde(skip_serializing_if = "Option::is_none")]
pub run_number: Option<usize>,
pub executed_at: u128,
pub duration: u128,
pub data_context: DataContext,
pub success: ExecutionResultSuccess,
pub request_success_count: usize,
pub request_failure_count: usize,
pub request_error_count: usize,
pub test_pass_count: usize,
pub test_fail_count: usize,
}