use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use serde_json::Map;
use strum_macros::EnumString;
use uuid::Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ApiLogObject {
pub request_id: Uuid,
pub api_version: String,
pub client: String,
pub http_method: HttpMethod,
pub http_status: i32,
pub request_origin: String,
pub request_path: String,
pub request_body: Map<String, serde_json::Value>,
pub request_response: Option<Map<String, serde_json::Value>>,
pub logged_at: DateTime<Utc>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize, EnumString)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum HttpMethod {
Post,
Put,
Delete,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum HttpStatus {
Code(i32),
Outcome(StatusOutcome),
}
#[derive(Debug, Clone, Serialize, Deserialize, EnumString)]
#[serde(rename_all = "lowercase")]
#[strum(serialize_all = "lowercase")]
pub enum StatusOutcome {
Succeeded,
Failed,
}