1use alloy_primitives::{aliases::U192, Address, Bytes, U256};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct SimulatedBalance {
7 pub holder: Address,
8 pub token: Address,
9 pub amount: U256,
10 pub is_wrapped: bool,
11 pub is_static: bool,
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct FindPathParams {
17 #[serde(rename = "Source")]
18 pub from: Address,
19 #[serde(rename = "Sink")]
20 pub to: Address,
21 #[serde(rename = "TargetFlow")]
22 pub target_flow: U256,
23 #[serde(rename = "UseWrappedBalances")]
24 pub use_wrapped_balances: Option<bool>,
25 #[serde(rename = "FromTokens")]
26 pub from_tokens: Option<Vec<Address>>,
27 #[serde(rename = "ToTokens")]
28 pub to_tokens: Option<Vec<Address>>,
29 #[serde(rename = "ExcludeFromTokens")]
30 pub exclude_from_tokens: Option<Vec<Address>>,
31 #[serde(rename = "ExcludeToTokens")]
32 pub exclude_to_tokens: Option<Vec<Address>>,
33 #[serde(rename = "SimulatedBalances")]
34 pub simulated_balances: Option<Vec<SimulatedBalance>>,
35 #[serde(rename = "MaxTransfers")]
36 pub max_transfers: Option<u32>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
42#[serde(rename_all = "camelCase")]
43pub struct PathfindingTransferStep {
44 pub from: Address,
45 pub to: Address,
46 pub token_owner: String, pub value: U256,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct PathfindingResult {
54 pub max_flow: U256,
55 pub transfers: Vec<PathfindingTransferStep>,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize)]
61pub struct FlowEdgeStruct {
62 #[serde(rename = "streamSinkId")]
63 pub stream_sink_id: u16,
64 pub amount: U192, }
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
70pub struct StreamStruct {
71 #[serde(rename = "sourceCoordinate")]
72 pub source_coordinate: u16,
73 #[serde(rename = "flowEdgeIds")]
74 pub flow_edge_ids: Vec<u16>,
75 pub data: Bytes, }
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct PathfindingFlowMatrix {
82 #[serde(rename = "flowVertices")]
83 pub flow_vertices: Vec<String>, #[serde(rename = "flowEdges")]
85 pub flow_edges: Vec<FlowEdgeStruct>,
86 pub streams: Vec<StreamStruct>,
87 #[serde(rename = "packedCoordinates")]
88 pub packed_coordinates: String, #[serde(rename = "sourceCoordinate")]
90 pub source_coordinate: u16, }
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
96pub struct AdvancedTransferOptions {
97 pub use_wrapped_balances: Option<bool>,
99 pub from_tokens: Option<Vec<Address>>,
100 pub to_tokens: Option<Vec<Address>>,
101 pub exclude_from_tokens: Option<Vec<Address>>,
102 pub exclude_to_tokens: Option<Vec<Address>>,
103 pub simulated_balances: Option<Vec<SimulatedBalance>>,
104 pub max_transfers: Option<u32>,
105
106 pub tx_data: Option<Bytes>,
108}
109
110impl AdvancedTransferOptions {
111 pub fn to_find_path_params(
113 self,
114 from: Address,
115 to: Address,
116 target_flow: U256,
117 ) -> FindPathParams {
118 FindPathParams {
119 from,
120 to,
121 target_flow,
122 use_wrapped_balances: self.use_wrapped_balances,
123 from_tokens: self.from_tokens,
124 to_tokens: self.to_tokens,
125 exclude_from_tokens: self.exclude_from_tokens,
126 exclude_to_tokens: self.exclude_to_tokens,
127 simulated_balances: self.simulated_balances,
128 max_transfers: self.max_transfers,
129 }
130 }
131}
132
133#[derive(Clone, Debug, Serialize, Deserialize)]
140pub struct FlowEdge {
141 pub stream_sink_id: u16,
142 pub amount: U192,
143}
144
145#[derive(Clone, Debug, Serialize, Deserialize)]
148pub struct Stream {
149 pub source_coordinate: u16,
150 pub flow_edge_ids: Vec<u16>,
151 pub data: Vec<u8>,
152}
153
154#[derive(Clone, Debug, Serialize, Deserialize)]
157pub struct TransferStep {
158 pub from_address: Address,
159 pub to_address: Address,
160 pub token_owner: Address,
161 pub value: U192,
162}
163
164#[derive(Clone, Debug)]
167pub struct FlowMatrix {
168 pub flow_vertices: Vec<Address>,
169 pub flow_edges: Vec<FlowEdge>,
170 pub streams: Vec<Stream>,
171 pub packed_coordinates: Vec<u8>,
172 pub source_coordinate: u16,
173}