three_commas_types/
common.rs

1use std::fmt;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
6pub enum TakeProfitType {
7  #[serde(rename = "base")]
8  Base,
9
10  #[serde(rename = "total")]
11  Total,
12}
13
14#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
15pub enum ProfitCurrency {
16  #[serde(rename = "quote_currency")]
17  Quote,
18
19  #[serde(rename = "base_currency")]
20  Base,
21}
22
23#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24pub enum StopLossType {
25  #[serde(rename = "stop_loss")]
26  StopLoss,
27
28  #[serde(rename = "stop_loss_and_disable_bot")]
29  StopLossAndDisableBot,
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
33pub enum VolumeType {
34  #[serde(rename = "quote_currency")]
35  QuoteCurrency,
36
37  #[serde(rename = "base_currency")]
38  BaseCurrency,
39
40  #[serde(rename = "percent")]
41  Percent,
42
43  #[serde(rename = "xbt")]
44  Xbt,
45}
46
47impl fmt::Display for VolumeType {
48  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49    let repr = match self {
50      VolumeType::QuoteCurrency => "quote_currency",
51      VolumeType::BaseCurrency => "base_currency",
52      VolumeType::Percent => "percent",
53      VolumeType::Xbt => "xbt",
54    };
55
56    f.write_str(repr)
57  }
58}
59
60#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61pub enum Strategy {
62  #[serde(rename = "long")]
63  Long,
64
65  #[serde(rename = "short")]
66  Short,
67}
68
69impl fmt::Display for Strategy {
70  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
71    let repr = match self {
72      Strategy::Long => "long",
73      Strategy::Short => "short",
74    };
75
76    f.write_str(repr)
77  }
78}
79
80#[cfg(test)]
81mod tests {
82  use super::*;
83
84  #[test]
85  fn test_profit_currency_serde() {
86    let json = "\"quote_currency\"";
87    let profit_currency: ProfitCurrency =
88      serde_json::from_str(json).expect("deserialized successfully");
89
90    assert_eq!(profit_currency, ProfitCurrency::Quote);
91
92    let serialized = serde_json::to_string(&profit_currency).expect("serialized successfully");
93    assert_eq!(&*serialized, json);
94  }
95}