use serde::Deserialize;
use super::common::{Action, Amount, Balance, Caps, Subject};
use super::enums::{
CommitStatus, Decision, EventStatus, ExtendStatus, ReleaseStatus, ReservationStatus,
};
use super::ids::{EventId, ReservationId};
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ReservationCreateResponse {
pub decision: Decision,
#[serde(default)]
pub reservation_id: Option<ReservationId>,
#[serde(default)]
pub affected_scopes: Vec<String>,
#[serde(default)]
pub expires_at_ms: Option<u64>,
#[serde(default)]
pub scope_path: Option<String>,
#[serde(default)]
pub reserved: Option<Amount>,
#[serde(default)]
pub caps: Option<Caps>,
#[serde(default)]
pub reason_code: Option<String>,
#[serde(default)]
pub retry_after_ms: Option<u64>,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct CommitResponse {
pub status: CommitStatus,
pub charged: Amount,
#[serde(default)]
pub released: Option<Amount>,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ReleaseResponse {
pub status: ReleaseStatus,
pub released: Amount,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ExtendResponse {
pub status: ExtendStatus,
pub expires_at_ms: u64,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct DecisionResponse {
pub decision: Decision,
#[serde(default)]
pub caps: Option<Caps>,
#[serde(default)]
pub reason_code: Option<String>,
#[serde(default)]
pub retry_after_ms: Option<u64>,
#[serde(default)]
pub affected_scopes: Option<Vec<String>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct EventCreateResponse {
pub status: EventStatus,
pub event_id: EventId,
#[serde(default)]
pub charged: Option<Amount>,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ReservationDetail {
pub reservation_id: ReservationId,
pub status: ReservationStatus,
pub subject: Subject,
pub action: Action,
pub reserved: Amount,
pub created_at_ms: u64,
pub expires_at_ms: u64,
pub scope_path: String,
pub affected_scopes: Vec<String>,
#[serde(default)]
pub idempotency_key: Option<String>,
#[serde(default)]
pub committed: Option<Amount>,
#[serde(default)]
pub finalized_at_ms: Option<u64>,
#[serde(default)]
pub metadata: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ReservationSummary {
pub reservation_id: ReservationId,
pub status: ReservationStatus,
pub subject: Subject,
pub action: Action,
pub reserved: Amount,
pub created_at_ms: u64,
pub expires_at_ms: u64,
pub scope_path: String,
pub affected_scopes: Vec<String>,
#[serde(default)]
pub idempotency_key: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct ReservationListResponse {
pub reservations: Vec<ReservationSummary>,
#[serde(default)]
pub has_more: Option<bool>,
#[serde(default)]
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct BalanceResponse {
pub balances: Vec<Balance>,
#[serde(default)]
pub has_more: Option<bool>,
#[serde(default)]
pub next_cursor: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ErrorResponse {
pub error: String,
pub message: String,
#[serde(default)]
pub request_id: Option<String>,
#[serde(default)]
pub details: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Deserialize)]
#[non_exhaustive]
pub struct DryRunResult {
pub decision: Decision,
#[serde(default)]
pub caps: Option<Caps>,
#[serde(default)]
pub affected_scopes: Option<Vec<String>>,
#[serde(default)]
pub scope_path: Option<String>,
#[serde(default)]
pub reserved: Option<Amount>,
#[serde(default)]
pub balances: Option<Vec<Balance>>,
#[serde(default)]
pub reason_code: Option<String>,
#[serde(default)]
pub retry_after_ms: Option<u64>,
}