coc_rs/
credentials.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Default)]
4pub struct CredentialsBuilder {
5    pub credentials: Credentials,
6}
7
8#[derive(Clone, Debug, Default)]
9pub struct Credentials(pub Vec<Credential>);
10
11#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq, Hash)]
12pub struct Credential {
13    email: String,
14    password: String,
15}
16
17impl CredentialsBuilder {
18    const fn new() -> Self {
19        Self { credentials: Credentials(Vec::new()) }
20    }
21
22    #[must_use]
23    pub fn add_credential(mut self, email: String, password: String) -> Self {
24        self.credentials.0.push(Credential { email, password });
25        self
26    }
27
28    #[must_use]
29    pub fn build(self) -> Credentials {
30        self.credentials
31    }
32}
33
34impl Credential {
35    #[must_use]
36    pub fn email(&self) -> &str {
37        &self.email
38    }
39
40    #[must_use]
41    pub fn password(&self) -> &str {
42        &self.password
43    }
44}
45
46impl Credentials {
47    #[must_use]
48    pub const fn builder() -> CredentialsBuilder {
49        CredentialsBuilder::new()
50    }
51
52    #[must_use]
53    pub const fn empty() -> Self {
54        Self(Vec::new())
55    }
56}