#![forbid(unsafe_code)]
#![deny(clippy::all)]
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct GoogleCloudStructLog<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub severity: Option<GCLogSeverity>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(rename = "@type")]
#[serde(skip_serializing_if = "Option::is_none")]
pub report_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub http_request: Option<GCHttpRequest>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time: Option<DateTime<Utc>>,
#[serde(rename = "logging.googleapis.com/insertId")]
#[serde(skip_serializing_if = "Option::is_none")]
pub insert_id: Option<String>,
#[serde(rename = "logging.googleapis.com/labels")]
#[serde(skip_serializing_if = "HashMap::is_empty")]
pub labels: HashMap<String, String>,
#[serde(rename = "logging.googleapis.com/operation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub operation: Option<GCOperation<'a>>,
#[serde(rename = "logging.googleapis.com/sourceLocation")]
#[serde(skip_serializing_if = "Option::is_none")]
pub source_location: Option<GCSourceLocation<'a>>,
#[serde(rename = "logging.googleapis.com/spanId")]
#[serde(skip_serializing_if = "Option::is_none")]
pub span_id: Option<String>,
#[serde(rename = "logging.googleapis.com/trace")]
#[serde(skip_serializing_if = "Option::is_none")]
pub trace: Option<String>,
#[serde(rename = "logging.googleapis.com/trace_sampled")]
#[serde(skip_serializing_if = "Option::is_none")]
pub trace_sampled: Option<bool>,
#[serde(skip_serializing)]
pub phantom: Option<&'a str>,
}
#[derive(Serialize, Deserialize, Clone, Copy, Debug)]
#[serde(rename_all = "camelCase")]
pub enum GCLogSeverity {
Default,
Debug,
Info,
Notice,
Warning,
Error,
Critical,
Alert,
Emergency,
}
impl Default for GCLogSeverity {
fn default() -> Self {
GCLogSeverity::Default
}
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct GCHttpRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub request_method: Option<GCHttpMethod>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response_size: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_agent: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remote_ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub latency: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub protocol: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Copy, Debug)]
#[serde(rename_all = "camelCase")]
pub enum GCHttpMethod {
Get,
Head,
Put,
Post,
}
impl Default for GCHttpMethod {
fn default() -> Self {
GCHttpMethod::Get
}
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct GCOperation<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub producer: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub first: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct GCSourceLocation<'a> {
#[serde(skip_serializing_if = "Option::is_none")]
pub file: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub line: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub function: Option<&'a str>,
}