Skip to main content

eth_id/claims/
types.rs

1use serde::{Deserialize, Serialize};
2use chrono::{DateTime, Utc};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5pub enum ClaimType {
6    Date,
7    Identity,
8    Amount,
9    Signature,
10    Presence,
11    Comparative,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub enum ClaimQuery {
16    Date(DateClaim),
17    Identity(IdentityClaim),
18    Amount(AmountClaim),
19    Signature(SignatureClaim),
20    Presence(PresenceClaim),
21    Comparative(ComparativeClaim),
22}
23
24impl ClaimQuery {
25    pub fn claim_type(&self) -> ClaimType {
26        match self {
27            ClaimQuery::Date(_) => ClaimType::Date,
28            ClaimQuery::Identity(_) => ClaimType::Identity,
29            ClaimQuery::Amount(_) => ClaimType::Amount,
30            ClaimQuery::Signature(_) => ClaimType::Signature,
31            ClaimQuery::Presence(_) => ClaimType::Presence,
32            ClaimQuery::Comparative(_) => ClaimType::Comparative,
33        }
34    }
35    
36    pub fn is_deterministic(&self) -> bool {
37        matches!(self.claim_type(), ClaimType::Date | ClaimType::Amount | ClaimType::Presence)
38    }
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct DateClaim {
43    pub operation: DateOperation,
44    pub threshold: Option<DateTime<Utc>>,
45    pub age_threshold: Option<u32>,
46    pub days_threshold: Option<i64>,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
50pub enum DateOperation {
51    AgeGreaterThan,
52    AgeLessThan,
53    IssuedWithinDays,
54    ExpiresAfter,
55    IsBetween { start: DateTime<Utc>, end: DateTime<Utc> },
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct IdentityClaim {
60    pub field: IdentityField,
61    pub expected_value: Option<String>,
62    pub operation: IdentityOperation,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub enum IdentityField {
67    Name,
68    CPF,
69    RG,
70    Passport,
71    Email,
72    Phone,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub enum IdentityOperation {
77    Matches,
78    Contains,
79    StartsWith,
80    HashMatches,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct AmountClaim {
85    pub field: String,
86    pub operation: AmountOperation,
87    pub threshold: f64,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
91pub enum AmountOperation {
92    GreaterThan,
93    LessThan,
94    EqualTo,
95    Between { min: f64, max: f64 },
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct SignatureClaim {
100    pub required_signers: Vec<String>,
101    pub all_required: bool,
102}
103
104#[derive(Debug, Clone, Serialize, Deserialize)]
105pub struct PresenceClaim {
106    pub field: String,
107    pub must_exist: bool,
108    pub must_not_be_empty: bool,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct ComparativeClaim {
113    pub field1: String,
114    pub field2: String,
115    pub operation: ComparativeOperation,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize)]
119pub enum ComparativeOperation {
120    Equal,
121    NotEqual,
122    Greater,
123    Less,
124}