architect_api/algo/
mod.rs

1use crate::{AccountId, OrderId, UserId};
2use anyhow::Result;
3use chrono::{DateTime, Utc};
4use schemars::JsonSchema;
5use serde::{de::DeserializeOwned, Deserialize, Serialize};
6
7pub mod twap;
8
9pub trait Algo {
10    type Params: Validate + Serialize + DeserializeOwned + JsonSchema;
11    type Status: Serialize + DeserializeOwned + JsonSchema;
12}
13
14#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
15pub struct CreateAlgoOrderRequest<A: Algo> {
16    pub algo_name: String,
17    pub algo_order_id: Option<OrderId>,
18    pub parent_order_id: Option<OrderId>,
19    pub trader: Option<UserId>,
20    pub account: Option<AccountId>,
21    pub params: A::Params,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
25pub struct ModifyAlgoOrderRequest<A: Algo> {
26    pub algo_order_id: OrderId,
27    pub params: A::Params,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
31pub struct StartAlgoOrderRequest {
32    pub algo_order_id: OrderId,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
36pub struct StopAlgoOrderRequest {
37    pub algo_order_id: OrderId,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
41pub struct AlgoOrderRequest {
42    pub algo_order_id: OrderId,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
46pub struct AlgoOrder<A: Algo> {
47    pub algo_name: String,
48    pub algo_order_id: OrderId,
49    pub parent_order_id: Option<OrderId>,
50    pub trader: UserId,
51    pub account: AccountId,
52    pub create_time: DateTime<Utc>,
53    pub display_symbols: Option<Vec<String>>,
54    pub last_error: Option<String>,
55    pub last_error_time: Option<DateTime<Utc>>,
56    pub params: A::Params,
57    pub status: A::Status,
58    pub state: AlgoState,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
62pub enum AlgoState {
63    Pending,
64    Running,
65    Stopped,
66}
67
68// CR-someday alee: use something more akin to the validator crate
69pub trait Validate {
70    fn validate(&self) -> Result<()> {
71        Ok(())
72    }
73}