1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//! Support for KMIP username and password authentication.

use crate::types::request::{self, Authentication, Credential, CredentialValue, Password, Username};

#[derive(Debug)]
pub enum CredentialType {
    UsernameAndPassword(UsernameAndPasswordCredential),
}

#[derive(Debug)]
pub struct UsernameAndPasswordCredential {
    pub username: String,
    pub password: Option<String>,
}

impl UsernameAndPasswordCredential {
    pub fn new(username: String, password: Option<String>) -> Self {
        Self { username, password }
    }
}

impl Authentication {
    pub fn build(credential: CredentialType) -> Authentication {
        match credential {
            CredentialType::UsernameAndPassword(inner) => {
                let username = Username(inner.username);
                let password = inner.password.map(Password);
                Authentication(Credential(
                    request::CredentialType::UsernameAndPassword,
                    CredentialValue::UsernameAndPassword(username, password),
                ))
            }
        }
    }
}