cala_ledger_core_types/velocity/
limit.rs1use 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}