#[cfg(feature = "diesel_support")]
use crate::schema::*;
use crate::*;
#[cfg_attr(
feature = "diesel_support",
derive(Queryable, Identifiable, Insertable, AsChangeset),
primary_key(pid),
table_name = "contacts_contact_information"
)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
pub struct SqlContactInformation {
pub pid: String,
pub pref: i16,
pub value: String,
pub platform: ContactPlatform,
pub typ: Option<Type>,
pub uid: String,
}
impl SqlContactInformation {
#[must_use]
pub fn extract_contact_information(contact: &mut Contact) -> Vec<Self> {
let uid = contact.uid.clone();
let ci =
contact.contact_information.drain(..);
ci
.map(|x| Self::convert_from(x, uid.clone()))
.collect()
}
#[must_use]
pub fn convert_from(ci: ContactInformation, uid: String) -> Self {
Self {
pid: ci.pid,
pref: ci.pref.into(),
value: ci.value,
platform: ci.platform,
typ: ci.typ,
uid,
}
}
pub fn insert_contact_information(ci: Vec<Self>, contact: &mut Contact) {
contact
.contact_information
.append(&mut ci.into_iter().map(Into::into).collect());
}
}
impl From<SqlContactInformation> for ContactInformation {
fn from(ci: SqlContactInformation) -> Self {
Self {
pid: ci.pid,
pref: ci.pref.try_into().unwrap_or(1),
value: ci.value,
platform: ci.platform,
typ: ci.typ,
}
}
}