use serde::Serialize;
use strum_macros::{AsRefStr, Display, EnumString, IntoStaticStr};
#[derive(Debug, Clone, Hash, PartialEq, Eq, Serialize)]
pub struct PassportElementErrorFiles {
#[serde(rename = "type")]
pub element_type: ElementType,
pub file_hashes: Vec<String>,
pub message: String,
}
impl PassportElementErrorFiles {
#[must_use]
pub fn new<T, I>(element_type: ElementType, file_hashes: I, message: impl Into<String>) -> Self
where
T: Into<String>,
I: IntoIterator<Item = T>,
{
Self {
element_type,
file_hashes: file_hashes.into_iter().map(Into::into).collect(),
message: message.into(),
}
}
#[must_use]
pub fn file_hash(self, val: impl Into<String>) -> Self {
Self {
file_hashes: self
.file_hashes
.into_iter()
.chain(Some(val.into()))
.collect(),
..self
}
}
#[must_use]
pub fn file_hashes<T, I>(self, val: I) -> Self
where
T: Into<String>,
I: IntoIterator<Item = T>,
{
Self {
file_hashes: self
.file_hashes
.into_iter()
.chain(val.into_iter().map(Into::into))
.collect(),
..self
}
}
#[must_use]
pub fn message(self, val: impl Into<String>) -> Self {
Self {
message: val.into(),
..self
}
}
}
#[derive(
Debug, Display, Clone, Copy, PartialEq, Eq, Hash, Serialize, EnumString, AsRefStr, IntoStaticStr,
)]
#[serde(rename_all = "snake_case")]
pub enum ElementType {
#[strum(serialize = "utility_bill")]
UtilityBill,
#[strum(serialize = "bank_statement")]
BankStatement,
#[strum(serialize = "rental_agreement")]
RentalAgreement,
#[strum(serialize = "passport_registration")]
PassportRegistration,
#[strum(serialize = "temporary_registration")]
TemporaryRegistration,
}