fynd_core/algorithm/
request.rs1use std::sync::Arc;
4
5use crate::{
6 derived::SharedDerivedDataRef,
7 feed::market_data::{MarketData, StateLabel},
8 types::{quote::RouteExclusions, Order},
9};
10
11pub struct SolveParts<'a, G> {
13 pub graph: &'a G,
15 pub order: &'a Order,
17 pub market: MarketData,
19 pub label: Option<StateLabel>,
21 pub derived: Option<SharedDerivedDataRef>,
23 pub exclusions: Arc<RouteExclusions>,
25}
26
27pub struct SolveRequest<'a, G> {
29 graph: &'a G,
30 market: MarketData,
31 order: &'a Order,
32 label: Option<StateLabel>,
33 derived: Option<SharedDerivedDataRef>,
34 exclusions: Arc<RouteExclusions>,
35}
36
37impl<'a, G> SolveRequest<'a, G> {
38 #[must_use]
40 pub fn into_parts(self) -> SolveParts<'a, G> {
41 SolveParts {
42 graph: self.graph,
43 order: self.order,
44 market: self.market,
45 label: self.label,
46 derived: self.derived,
47 exclusions: self.exclusions,
48 }
49 }
50
51 pub fn new(graph: &'a G, market: MarketData, order: &'a Order) -> Self {
53 Self {
54 graph,
55 market,
56 order,
57 label: None,
58 derived: None,
59 exclusions: Arc::new(RouteExclusions::default()),
60 }
61 }
62
63 #[must_use]
66 pub fn with_label(mut self, label: StateLabel) -> Self {
67 self.label = Some(label);
68 self
69 }
70
71 #[must_use]
73 pub fn with_derived(mut self, derived: SharedDerivedDataRef) -> Self {
74 self.derived = Some(derived);
75 self
76 }
77
78 #[must_use]
80 pub fn with_exclusions(mut self, exclusions: RouteExclusions) -> Self {
81 self.exclusions = Arc::new(exclusions);
82 self
83 }
84
85 pub(crate) fn with_shared_exclusions(mut self, exclusions: Arc<RouteExclusions>) -> Self {
86 self.exclusions = exclusions;
87 self
88 }
89
90 pub fn graph(&self) -> &'a G {
92 self.graph
93 }
94
95 pub fn market(&self) -> &MarketData {
97 &self.market
98 }
99
100 pub fn order(&self) -> &'a Order {
102 self.order
103 }
104
105 pub fn label(&self) -> Option<&StateLabel> {
107 self.label.as_ref()
108 }
109
110 pub fn derived(&self) -> Option<&SharedDerivedDataRef> {
112 self.derived.as_ref()
113 }
114
115 pub fn exclusions(&self) -> &RouteExclusions {
117 &self.exclusions
118 }
119}