alpaca-core 0.23.8

Shared primitives for the alpaca-rust workspace
Documentation
use std::fmt;

use crate::{Error, validate};

#[derive(Clone, PartialEq, Eq)]
pub struct Credentials {
    api_key: String,
    secret_key: String,
}

impl Credentials {
    pub fn new(api_key: impl Into<String>, secret_key: impl Into<String>) -> Result<Self, Error> {
        let api_key = validate::non_empty_string("api_key", api_key)?;
        let secret_key = validate::non_empty_string("secret_key", secret_key)?;
        validate::valid_header_value("api_key", &api_key)?;
        validate::valid_header_value("secret_key", &secret_key)?;

        Ok(Self {
            api_key,
            secret_key,
        })
    }

    #[must_use]
    pub fn api_key(&self) -> &str {
        &self.api_key
    }

    #[must_use]
    pub fn secret_key(&self) -> &str {
        &self.secret_key
    }
}

impl fmt::Debug for Credentials {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("Credentials")
            .field("api_key", &"[REDACTED]")
            .field("secret_key", &"[REDACTED]")
            .finish()
    }
}