use serde::{Deserialize, Serialize};
use super::{EditableFieldBoolean, EditableFieldWifiNetworkSecurityType};
use crate::{
b64url::B32, B64Url, EditableField, EditableFieldConcealedString, EditableFieldDate,
EditableFieldString,
};
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", bound(deserialize = "E: Deserialize<'de>"))]
pub struct ApiKeyCredential<E = ()> {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key: Option<EditableField<EditableFieldConcealedString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub username: Option<EditableField<EditableFieldString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key_type: Option<EditableField<EditableFieldString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<EditableField<EditableFieldString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub valid_from: Option<EditableField<EditableFieldDate, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expiry_date: Option<EditableField<EditableFieldDate, E>>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", bound(deserialize = "E: Deserialize<'de>"))]
pub struct BasicAuthCredential<E = ()> {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub username: Option<EditableField<EditableFieldString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub password: Option<EditableField<EditableFieldConcealedString, E>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GeneratedPasswordCredential {
pub password: String,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", bound(deserialize = "E: Deserialize<'de>"))]
pub struct SshKeyCredential<E = ()> {
pub key_type: String,
pub private_key: B64Url,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key_comment: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub creation_date: Option<EditableField<EditableFieldDate, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expiry_date: Option<EditableField<EditableFieldDate, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub key_generation_source: Option<EditableField<EditableFieldString, E>>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TotpCredential {
pub secret: B32,
pub period: u8,
pub digits: u8,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub username: Option<String>,
pub algorithm: OTPHashAlgorithm,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub issuer: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum OTPHashAlgorithm {
Sha1,
Sha256,
Sha512,
#[serde(untagged)]
Unknown(String),
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", bound(deserialize = "E: Deserialize<'de>"))]
pub struct WifiCredential<E = ()> {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ssid: Option<EditableField<EditableFieldString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub network_security_type: Option<EditableField<EditableFieldWifiNetworkSecurityType, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub passphrase: Option<EditableField<EditableFieldConcealedString, E>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hidden: Option<EditableField<EditableFieldBoolean, E>>,
}