use api_builder::{Endpoint, api_endpoint};
use serde::Deserialize;
use time::OffsetDateTime;
use typed_builder::TypedBuilder;
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default, TypedBuilder)]
#[builder(field_defaults(setter(into)))]
pub struct ApiKeyStats<'a> {
pub api_key: &'a str,
#[builder(default = false)]
pub no_users: bool,
}
#[api_endpoint(method = GET, path = format!("/v3/keys/{}/stats?noUsers={}", self.api_key, self.no_users))]
impl Endpoint for ApiKeyStats<'_> {}
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default, Deserialize)]
pub struct ExecutionData {
pub frequency: u32,
pub executions: Vec<u32>,
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default, Deserialize)]
pub struct ScriptDefaultStats {
pub scripts: u8,
pub users: u32,
pub obfuscations: u32,
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize)]
pub struct ScriptStats {
pub obfuscations: u32,
pub scripts: u8,
pub users: u32,
pub attacks_blocked: u32,
pub default: ScriptDefaultStats,
#[serde(with = "time::serde::timestamp")]
pub reset_at: OffsetDateTime,
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize)]
pub struct ScriptStatsNoUsers {
pub obfuscations: u32,
pub scripts: u8,
pub attacks_blocked: u32,
pub default: ScriptDefaultStats,
#[serde(with = "time::serde::timestamp")]
pub reset_at: OffsetDateTime,
}
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize)]
pub struct ApiKeyStatsResponse {
pub execution_data: ExecutionData,
pub stats: ScriptStats,
}
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize)]
pub struct ApiKeyStatsNoUsersResponse {
pub execution_data: ExecutionData,
pub stats: ScriptStatsNoUsers,
}