Skip to main content

mkt_core/
config.rs

1use std::fmt;
2
3use derive_builder::Builder;
4use secrecy::ExposeSecret;
5pub use secrecy::SecretString;
6
7use mkt_types::ExchangeId;
8
9#[derive(Builder)]
10#[builder(pattern = "owned", setter(into, strip_option))]
11pub struct ApiCredentials {
12    api_key: SecretString,
13    secret: SecretString,
14    #[builder(default)]
15    passphrase: Option<SecretString>,
16}
17
18impl PartialEq for ApiCredentials {
19    fn eq(&self, other: &Self) -> bool {
20        self.api_key.expose_secret() == other.api_key.expose_secret()
21            && self.secret.expose_secret() == other.secret.expose_secret()
22            && self.passphrase.as_ref().map(|value| value.expose_secret())
23                == other.passphrase.as_ref().map(|value| value.expose_secret())
24    }
25}
26
27impl Eq for ApiCredentials {}
28
29impl ApiCredentials {
30    pub fn builder() -> ApiCredentialsBuilder {
31        ApiCredentialsBuilder::default()
32    }
33
34    pub fn api_key(&self) -> &SecretString {
35        &self.api_key
36    }
37
38    pub fn secret(&self) -> &SecretString {
39        &self.secret
40    }
41
42    pub fn passphrase(&self) -> Option<&SecretString> {
43        self.passphrase.as_ref()
44    }
45}
46
47impl fmt::Debug for ApiCredentials {
48    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49        f.debug_struct("ApiCredentials")
50            .field("api_key", &self.api_key)
51            .field("secret", &self.secret)
52            .field("passphrase", &self.passphrase)
53            .finish()
54    }
55}
56
57#[derive(Debug, PartialEq, Eq, Builder)]
58#[builder(pattern = "owned", setter(into, strip_option))]
59pub struct ExchangeConfig {
60    pub exchange_id: ExchangeId,
61    #[builder(default)]
62    pub rest_base_url: Option<String>,
63    #[builder(default)]
64    pub websocket_base_url: Option<String>,
65    #[builder(default)]
66    pub credentials: Option<ApiCredentials>,
67}
68
69impl ExchangeConfig {
70    pub fn builder() -> ExchangeConfigBuilder {
71        ExchangeConfigBuilder::default()
72    }
73}