agent_first_pay/types/
limits.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct SpendDebit {
5 pub amount_native: u64,
6 #[serde(default, skip_serializing_if = "Option::is_none")]
7 pub token: Option<String>,
8}
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11#[serde(rename_all = "snake_case")]
12pub enum SpendScope {
13 #[serde(alias = "all")]
14 GlobalUsdCents,
15 Network,
16 Wallet,
17}
18
19fn default_spend_scope_network() -> SpendScope {
20 SpendScope::Network
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
24pub struct SpendLimit {
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub rule_id: Option<String>,
27 #[serde(default = "default_spend_scope_network")]
28 pub scope: SpendScope,
29 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub network: Option<String>,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub wallet: Option<String>,
33 pub window_s: u64,
34 pub max_spend: u64,
35 #[serde(default, skip_serializing_if = "Option::is_none")]
36 pub token: Option<String>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct SpendLimitStatus {
41 pub rule_id: String,
42 pub scope: SpendScope,
43 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub network: Option<String>,
45 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub wallet: Option<String>,
47 pub window_s: u64,
48 pub max_spend: u64,
49 pub spent: u64,
50 pub remaining: u64,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub token: Option<String>,
53 pub window_reset_s: u64,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct DownstreamLimitNode {
58 pub name: String,
59 pub endpoint: String,
60 #[serde(default, skip_serializing_if = "Vec::is_empty")]
61 pub limits: Vec<SpendLimitStatus>,
62 #[serde(default, skip_serializing_if = "Option::is_none")]
63 pub error: Option<String>,
64 #[serde(default, skip_serializing_if = "Vec::is_empty")]
65 pub downstream: Vec<DownstreamLimitNode>,
66}