use std::str::FromStr;
use rusqlite::{
types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef},
ToSql,
};
use crate::{
CredentialType, Gender, MediaType, PluginType, RsAudio, RsResolution, RsVideoCodec,
RsVideoFormat,
};
impl FromSql for PluginType {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = PluginType::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for PluginType {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for CredentialType {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = CredentialType::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for CredentialType {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for RsVideoFormat {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = RsVideoFormat::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for RsVideoFormat {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for RsResolution {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = RsResolution::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for RsResolution {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for RsAudio {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = RsAudio::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for RsAudio {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for RsVideoCodec {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = RsVideoCodec::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for RsVideoCodec {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for MediaType {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = MediaType::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for MediaType {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}
impl FromSql for Gender {
fn column_result(value: ValueRef) -> FromSqlResult<Self> {
String::column_result(value).and_then(|as_string| {
let r = Gender::from_str(&as_string).map_err(|_| FromSqlError::InvalidType);
r
})
}
}
impl ToSql for Gender {
fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
let l = &self.clone();
let r = l.to_string();
Ok(ToSqlOutput::from(r))
}
}