1use std::fmt;
2
3use crate::{Error, validate};
4
5#[derive(Clone, PartialEq, Eq)]
6pub struct Credentials {
7 api_key: String,
8 secret_key: String,
9}
10
11impl Credentials {
12 pub fn new(api_key: impl Into<String>, secret_key: impl Into<String>) -> Result<Self, Error> {
13 let api_key = validate::non_empty_string("api_key", api_key)?;
14 let secret_key = validate::non_empty_string("secret_key", secret_key)?;
15 validate::valid_header_value("api_key", &api_key)?;
16 validate::valid_header_value("secret_key", &secret_key)?;
17
18 Ok(Self {
19 api_key,
20 secret_key,
21 })
22 }
23
24 #[must_use]
25 pub fn api_key(&self) -> &str {
26 &self.api_key
27 }
28
29 #[must_use]
30 pub fn secret_key(&self) -> &str {
31 &self.secret_key
32 }
33}
34
35impl fmt::Debug for Credentials {
36 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37 f.debug_struct("Credentials")
38 .field("api_key", &"[REDACTED]")
39 .field("secret_key", &"[REDACTED]")
40 .finish()
41 }
42}