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}