cala_ledger_core_types/velocity/
limit.rs

1use cel_interpreter::CelExpression;
2use serde::{Deserialize, Serialize};
3
4pub use crate::param::*;
5use crate::primitives::*;
6
7#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct VelocityLimitValues {
9    pub id: VelocityLimitId,
10    pub name: String,
11    pub description: String,
12    pub window: Vec<PartitionKey>,
13    pub condition: Option<CelExpression>,
14    pub currency: Option<Currency>,
15    pub params: Option<Vec<ParamDefinition>>,
16    pub limit: Limit,
17}
18
19#[derive(Clone, Debug, Serialize, Deserialize)]
20pub struct PartitionKey {
21    pub alias: String,
22    pub value: CelExpression,
23}
24
25#[derive(Clone, Debug, Serialize, Deserialize)]
26pub struct Limit {
27    pub timestamp_source: Option<CelExpression>,
28    pub balance: Vec<BalanceLimit>,
29}
30
31#[derive(Clone, Debug, Serialize, Deserialize)]
32pub struct BalanceLimit {
33    pub limit_type: BalanceLimitType,
34    pub layer: CelExpression,
35    pub amount: CelExpression,
36    pub enforcement_direction: CelExpression,
37    pub start: Option<CelExpression>,
38    pub end: Option<CelExpression>,
39}
40
41#[derive(Clone, Debug, Default, Serialize, Deserialize)]
42#[serde(rename_all = "snake_case")]
43pub enum BalanceLimitType {
44    #[default]
45    Available,
46}