1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use crate::{
cex::{
asset_id::AssetId,
capability::{CexCapability, HasRequiredCapabilities},
orders::single::SingleOrderGeneric,
},
error::result::StockTrekResult,
resolveable::Resolvable,
resolved_context::ResolvedContext,
values::value::{AssetIdValue, NumberValue},
};
use serde::{Deserialize, Serialize};
use std::hash::Hash;
use strum::Display;
#[derive(Debug, Display, Clone, Hash, Serialize, Deserialize)]
pub enum OrderRequest<A, N> {
Single(SingleOrderGeneric<A, N>),
// OneCancelsOther(OneCancelsOtherOrderGeneric<A, N>),
// OneTriggersOther(OneTriggersOtherOrderGeneric<A, N>),
// OneTriggersOco(OneTriggersOcoOrderGeneric<A, N>),
}
impl Resolvable<OrderRequest<AssetId, f64>> for OrderRequest<AssetIdValue, NumberValue> {
fn try_resolve(
&self,
context: &ResolvedContext,
) -> StockTrekResult<OrderRequest<AssetId, f64>> {
match self {
Self::Single(order) => Ok(OrderRequest::Single(order.try_resolve(context)?)),
// Self::OneCancelsOther(order) => {
// Ok(OrderRequest::OneCancelsOther(order.try_resolve(context)?))
// }
// Self::OneTriggersOther(order) => {
// Ok(OrderRequest::OneTriggersOther(order.try_resolve(context)?))
// }
// Self::OneTriggersOco(order) => {
// Ok(OrderRequest::OneTriggersOco(order.try_resolve(context)?))
// }
}
}
}
impl<A, N> HasRequiredCapabilities for OrderRequest<A, N> {
fn required_capabilities(&self) -> Vec<CexCapability> {
match self {
Self::Single(order) => order.required_capabilities(),
// Self::OneCancelsOther(order) => order.required_capabilities(),
// Self::OneTriggersOther(order) => order.required_capabilities(),
// Self::OneTriggersOco(order) => order.required_capabilities(),
}
}
}