architect_api/algo/
mod.rs1use 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
68pub trait Validate {
70 fn validate(&self) -> Result<()> {
71 Ok(())
72 }
73}