#[derive(Debug, Clone, Copy)]
pub struct EditableUsers;
#[derive(Debug, Clone, PartialEq)]
pub struct EditableUser {
pub id: i64,
pub name: Option<String>,
pub email: Option<String>,
pub rel: Rel,
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Rel {}
impl keelson_exec::FromRow for EditableUser {
fn from_row(row: &mut keelson_exec::Row) -> Result<Self, keelson_exec::ExecError> {
Ok(EditableUser {
id: row.take("id")?,
name: row.take("name")?,
email: row.take("email")?,
rel: Rel::default(),
})
}
}
#[derive(Debug, Clone, Default)]
pub struct Setter {
pub id: keelson_models::Set<i64>,
pub name: keelson_models::Set<String>,
pub email: keelson_models::Set<String>,
}
pub fn table() -> keelson_models::ModelTable<EditableUsers> {
keelson_models::ModelTable::new()
}
pub fn id() -> keelson_models::Column<i64> {
keelson_models::Column::new("editable_users", "id")
}
pub fn name() -> keelson_models::Column<String> {
keelson_models::Column::new("editable_users", "name")
}
pub fn email() -> keelson_models::Column<String> {
keelson_models::Column::new("editable_users", "email")
}
#[allow(clippy::type_complexity)]
fn all_columns() -> (
keelson_models::Column<i64>,
keelson_models::Column<String>,
keelson_models::Column<String>,
) {
(id(), name(), email())
}
impl keelson_models::View for EditableUsers {
type Row = EditableUser;
type Select = keelson_sqlite::SelectQuery;
fn base_select() -> Self::Select {
keelson_sqlite::select((
keelson_sqlite::select::columns(all_columns()),
keelson_sqlite::select::from(keelson_sqlite::quote("editable_users")),
))
}
}
impl keelson_models::Table for EditableUsers {
type Pk = i64;
type Setter = Setter;
type Insert = keelson_sqlite::InsertQuery;
type Update = keelson_sqlite::UpdateQuery;
type Delete = keelson_sqlite::DeleteQuery;
fn insert_query(s: Setter) -> Self::Insert {
let mut cols: Vec<&'static str> = Vec::new();
let mut vals: Vec<keelson_core::expr::Expr> = Vec::new();
s.id.push_into("id", &mut cols, &mut vals);
s.name.push_into("name", &mut cols, &mut vals);
s.email.push_into("email", &mut cols, &mut vals);
let mut q = keelson_sqlite::insert((
keelson_sqlite::insert::into(keelson_sqlite::quote("editable_users"))
.columns(cols),
keelson_sqlite::insert::returning(all_columns()),
));
if !vals.is_empty() {
q.apply(keelson_sqlite::insert::values(vals));
}
q
}
fn update_query() -> Self::Update {
keelson_sqlite::update(
keelson_sqlite::update::table(keelson_sqlite::quote("editable_users")),
)
}
fn apply_setter(s: Setter, q: &mut Self::Update) {
if let Some(v) = s.id.into_expr() {
q.apply(keelson_sqlite::update::set_col("id").to(v));
}
if let Some(v) = s.name.into_expr() {
q.apply(keelson_sqlite::update::set_col("name").to(v));
}
if let Some(v) = s.email.into_expr() {
q.apply(keelson_sqlite::update::set_col("email").to(v));
}
}
fn delete_query() -> Self::Delete {
keelson_sqlite::delete(
keelson_sqlite::delete::from(keelson_sqlite::quote("editable_users")),
)
}
fn pk(row: &EditableUser) -> Self::Pk {
row.id
}
}