lago_types/models/
api_log.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use serde_json::Map;
4use strum_macros::EnumString;
5use uuid::Uuid;
6
7/// Represents an API log entry in the Lago system.
8///
9/// This struct contains all information about an API request made to Lago's API,
10/// including the request details, response information, and metadata.
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct ApiLogObject {
13    pub request_id: Uuid,
14    pub api_version: String,
15    pub client: String,
16    pub http_method: HttpMethod,
17    pub http_status: i32,
18    pub request_origin: String,
19    pub request_path: String,
20    pub request_body: Map<String, serde_json::Value>,
21    pub request_response: Option<Map<String, serde_json::Value>>,
22    pub logged_at: DateTime<Utc>,
23    pub created_at: DateTime<Utc>,
24}
25
26/// HTTP methods supported by the API logs.
27#[derive(Debug, Clone, Serialize, Deserialize, EnumString)]
28#[serde(rename_all = "lowercase")]
29#[strum(serialize_all = "lowercase")]
30pub enum HttpMethod {
31    Post,
32    Put,
33    Delete,
34}
35
36/// HTTP status filter types for API logs.
37///
38/// This enum represents the different ways to filter API logs by status:
39/// either by specific HTTP status codes or by request outcome (succeeded/failed).
40#[derive(Debug, Clone, Serialize, Deserialize)]
41#[serde(untagged)]
42pub enum HttpStatus {
43    Code(i32),
44    Outcome(StatusOutcome),
45}
46
47/// Request outcome status for filtering.
48#[derive(Debug, Clone, Serialize, Deserialize, EnumString)]
49#[serde(rename_all = "lowercase")]
50#[strum(serialize_all = "lowercase")]
51pub enum StatusOutcome {
52    Succeeded,
53    Failed,
54}