1use {
10 crate::models,
11 serde::{Deserialize, Serialize},
12};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct PolicyRuleV2 {
17 #[serde(rename = "name")]
19 pub name: String,
20 #[serde(rename = "id")]
22 pub id: String,
23 #[serde(rename = "policyEngineVersion")]
25 pub policy_engine_version: PolicyEngineVersion,
26 #[serde(rename = "type")]
27 pub r#type: models::PolicyTypeV2,
28 #[serde(rename = "subType", skip_serializing_if = "Option::is_none")]
29 pub sub_type: Option<models::PolicyTypeV2>,
30 #[serde(rename = "initiator")]
31 pub initiator: models::InitiatorConfigPatternV2,
32 #[serde(rename = "asset")]
33 pub asset: models::AssetConfigV2,
34 #[serde(rename = "source")]
35 pub source: models::AccountConfigV2,
36 #[serde(rename = "destination", skip_serializing_if = "Option::is_none")]
37 pub destination: Option<models::DestinationConfigV2>,
38 #[serde(rename = "account", skip_serializing_if = "Option::is_none")]
39 pub account: Option<models::AccountConfigV2>,
40 #[serde(rename = "verdict")]
41 pub verdict: models::VerdictConfigV2,
42 #[serde(rename = "amountOverTime", skip_serializing_if = "Option::is_none")]
43 pub amount_over_time: Option<models::AmountOverTimeConfigV2>,
44 #[serde(rename = "amount", skip_serializing_if = "Option::is_none")]
45 pub amount: Option<models::AmountRangeV2>,
46 #[serde(rename = "externalDescriptor", skip_serializing_if = "Option::is_none")]
48 pub external_descriptor: Option<String>,
49 #[serde(rename = "method", skip_serializing_if = "Option::is_none")]
50 pub method: Option<models::ContractMethodPatternV2>,
51 #[serde(rename = "isGlobalPolicy", skip_serializing_if = "Option::is_none")]
53 pub is_global_policy: Option<bool>,
54 #[serde(rename = "programCall", skip_serializing_if = "Option::is_none")]
55 pub program_call: Option<models::ProgramCallConfigV2>,
56 #[serde(rename = "screeningMetadata", skip_serializing_if = "Option::is_none")]
57 pub screening_metadata: Option<models::ScreeningMetadataConfigV2>,
58 #[serde(rename = "quoteAsset", skip_serializing_if = "Option::is_none")]
59 pub quote_asset: Option<models::AssetConfigV2>,
60 #[serde(rename = "baseAsset", skip_serializing_if = "Option::is_none")]
61 pub base_asset: Option<models::AssetConfigV2>,
62 #[serde(rename = "quoteAmount", skip_serializing_if = "Option::is_none")]
63 pub quote_amount: Option<models::AmountRangeV2>,
64 #[serde(rename = "baseAmount", skip_serializing_if = "Option::is_none")]
65 pub base_amount: Option<models::AmountRangeV2>,
66 #[serde(rename = "derivationPath", skip_serializing_if = "Option::is_none")]
67 pub derivation_path: Option<models::DerivationPathConfigV2>,
68 #[serde(rename = "index", skip_serializing_if = "Option::is_none")]
70 pub index: Option<f64>,
71}
72
73impl PolicyRuleV2 {
74 pub fn new(
76 name: String,
77 id: String,
78 policy_engine_version: PolicyEngineVersion,
79 r#type: models::PolicyTypeV2,
80 initiator: models::InitiatorConfigPatternV2,
81 asset: models::AssetConfigV2,
82 source: models::AccountConfigV2,
83 verdict: models::VerdictConfigV2,
84 ) -> PolicyRuleV2 {
85 PolicyRuleV2 {
86 name,
87 id,
88 policy_engine_version,
89 r#type,
90 sub_type: None,
91 initiator,
92 asset,
93 source,
94 destination: None,
95 account: None,
96 verdict,
97 amount_over_time: None,
98 amount: None,
99 external_descriptor: None,
100 method: None,
101 is_global_policy: None,
102 program_call: None,
103 screening_metadata: None,
104 quote_asset: None,
105 base_asset: None,
106 quote_amount: None,
107 base_amount: None,
108 derivation_path: None,
109 index: None,
110 }
111 }
112}
113#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
115pub enum PolicyEngineVersion {
116 #[serde(rename = "v2")]
117 V2,
118}
119
120impl Default for PolicyEngineVersion {
121 fn default() -> PolicyEngineVersion {
122 Self::V2
123 }
124}