106 lines
2.7 KiB
Rust
106 lines
2.7 KiB
Rust
use mysql_common::frunk::{hlist_pat, HList};
|
|
use struct_field_names_as_array::FieldNamesAsArray;
|
|
|
|
#[allow(non_snake_case)]
|
|
#[derive(Debug, PartialEq, FieldNamesAsArray)]
|
|
pub struct Nutrition {
|
|
id: i32,
|
|
name: String,
|
|
manufacturer: String,
|
|
barcode: String,
|
|
amount: i32,
|
|
divisor: i32,
|
|
kJ: f32,
|
|
kcal: f32,
|
|
saturated_fat: f32,
|
|
carbohydrate: f32,
|
|
sugar: f32,
|
|
fibres: f32,
|
|
protein: f32,
|
|
salt: f32,
|
|
vitamin_b2: f32,
|
|
vitamin_b12: f32,
|
|
calcium: f32,
|
|
phosphor: f32,
|
|
}
|
|
|
|
type RowType = HList!(
|
|
i32,
|
|
Option<String>,
|
|
Option<String>,
|
|
Option<String>,
|
|
Option<i32>,
|
|
Option<i32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
Option<f32>,
|
|
);
|
|
|
|
impl Nutrition {
|
|
fn get_sql_fields() -> String {
|
|
Nutrition::FIELD_NAMES_AS_ARRAY
|
|
.iter()
|
|
.cloned()
|
|
.intersperse(", ")
|
|
.collect()
|
|
}
|
|
|
|
pub fn query_map_helper() -> (String, impl Fn(RowType) -> Nutrition) {
|
|
let sql_query = format!("SELECT {} from nutrition", Self::get_sql_fields());
|
|
|
|
let construction_closure = |row: RowType| {
|
|
let hlist_pat![
|
|
id,
|
|
name,
|
|
manufacturer,
|
|
barcode,
|
|
amount,
|
|
divisor,
|
|
k_j,
|
|
kcal,
|
|
saturated_fat,
|
|
carbohydrate,
|
|
sugar,
|
|
fibres,
|
|
protein,
|
|
salt,
|
|
vitamin_b2,
|
|
vitamin_b12,
|
|
calcium,
|
|
phosphor
|
|
] = row;
|
|
Nutrition {
|
|
id,
|
|
name: name.unwrap_or("".to_string()),
|
|
manufacturer: manufacturer.unwrap_or("".to_string()),
|
|
barcode: barcode.unwrap_or("".to_string()),
|
|
amount: amount.unwrap_or(0),
|
|
divisor: divisor.unwrap_or(0),
|
|
kJ: k_j.unwrap_or(0.),
|
|
kcal: kcal.unwrap_or(0.),
|
|
saturated_fat: saturated_fat.unwrap_or(0.),
|
|
carbohydrate: carbohydrate.unwrap_or(0.),
|
|
sugar: sugar.unwrap_or(0.),
|
|
fibres: fibres.unwrap_or(0.),
|
|
protein: protein.unwrap_or(0.),
|
|
salt: salt.unwrap_or(0.),
|
|
vitamin_b2: vitamin_b2.unwrap_or(0.),
|
|
vitamin_b12: vitamin_b12.unwrap_or(0.),
|
|
calcium: calcium.unwrap_or(0.),
|
|
phosphor: phosphor.unwrap_or(0.),
|
|
}
|
|
};
|
|
|
|
(sql_query, construction_closure)
|
|
}
|
|
}
|