db: add build script
This commit is contained in:
parent
e692bd4b90
commit
bd8855fde6
|
@ -0,0 +1 @@
|
||||||
|
target
|
|
@ -0,0 +1,75 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "db"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"toml",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.137"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.137"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "0.5.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
|
|
@ -0,0 +1,4 @@
|
||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"db"
|
||||||
|
]
|
|
@ -1,20 +0,0 @@
|
||||||
[[ingredients]]
|
|
||||||
key = "apple"
|
|
||||||
measure = "kg"
|
|
||||||
|
|
||||||
ru = "яблоко"
|
|
||||||
en = "apple"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "banana"
|
|
||||||
measure = "kg"
|
|
||||||
|
|
||||||
ru = "банан"
|
|
||||||
en = "banana"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "orange"
|
|
||||||
measure = "kg"
|
|
||||||
|
|
||||||
ru = "апельсин"
|
|
||||||
en = "orange"
|
|
|
@ -1,8 +0,0 @@
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "water"
|
|
||||||
measure = "ml"
|
|
||||||
|
|
||||||
ru = "вода"
|
|
||||||
en = "water"
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
[[ingredients]]
|
|
||||||
key = "wheat_flour"
|
|
||||||
measure = "g"
|
|
||||||
|
|
||||||
ru = "пшеничная мука"
|
|
||||||
en = "wheat flour"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "olive_oil"
|
|
||||||
measure = "ml"
|
|
||||||
|
|
||||||
ru = "оливковое масло"
|
|
||||||
en = "olive oil"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "dry_yeast"
|
|
||||||
measure = "g"
|
|
||||||
|
|
||||||
ru = "сухие дрожжи"
|
|
||||||
en = "dry yeast"
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "salt"
|
|
||||||
measure = "g"
|
|
||||||
|
|
||||||
ru = "соль"
|
|
||||||
en = "salt"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "sugar"
|
|
||||||
measure = "g"
|
|
||||||
|
|
||||||
ru = "сахар"
|
|
||||||
en = "sugar"
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
[[ingredients]]
|
|
||||||
key = "carrot"
|
|
||||||
measure = "kg"
|
|
||||||
|
|
||||||
ru = "морковь"
|
|
||||||
en = "carrot"
|
|
||||||
|
|
||||||
[[ingredients]]
|
|
||||||
key = "potato"
|
|
||||||
measure = "kg"
|
|
||||||
|
|
||||||
ru = "картофель"
|
|
||||||
en = "potato"
|
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "db"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"toml",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.38"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.137"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.137"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.92"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-xid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "0.5.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-xid"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
|
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "db"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
serde = { version = "1.0.137", features = ["derive"] }
|
||||||
|
toml = "0.5.9"
|
|
@ -0,0 +1,181 @@
|
||||||
|
use std::fs;
|
||||||
|
use std::io::{BufWriter, Write};
|
||||||
|
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct Main {
|
||||||
|
ingredients: Option<Vec<Ingredient>>,
|
||||||
|
recipes: Option<Vec<Recipe>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct Ingredient {
|
||||||
|
key: String,
|
||||||
|
translates: IngredientTranslate,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct IngredientTranslate {
|
||||||
|
ru: String,
|
||||||
|
en: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct Recipe {
|
||||||
|
key: String,
|
||||||
|
ingredients: Vec<RecipeIngredient>,
|
||||||
|
steps: u8,
|
||||||
|
translates: RecipeTranslates,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct RecipeIngredient {
|
||||||
|
key: String,
|
||||||
|
#[serde(flatten)]
|
||||||
|
measure: RecipeIngredientMeasure,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub enum RecipeIngredientMeasure {
|
||||||
|
#[serde(rename = "g")]
|
||||||
|
Gram(u32),
|
||||||
|
#[serde(rename = "kg")]
|
||||||
|
KiloGram(u32),
|
||||||
|
#[serde(rename = "ml")]
|
||||||
|
MilliLiter(u32),
|
||||||
|
#[serde(rename = "l")]
|
||||||
|
Liter(u32),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct RecipeTranslates {
|
||||||
|
ru: RecipeTranslate,
|
||||||
|
en: Option<RecipeTranslate>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize, Debug)]
|
||||||
|
pub struct RecipeTranslate {
|
||||||
|
name: String,
|
||||||
|
instructions: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_structs(file: &mut BufWriter<fs::File>) -> Result<(), std::io::Error> {
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct Ingredient {{")?;
|
||||||
|
writeln!(file, " pub key: &'static str,")?;
|
||||||
|
writeln!(file, " translates: IngredientTranslate,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct IngredientTranslate {{")?;
|
||||||
|
writeln!(file, " ru: &'static str,")?;
|
||||||
|
writeln!(file, " en: Option<&'static str>,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct Recipe {{")?;
|
||||||
|
writeln!(file, " key: &'static str,")?;
|
||||||
|
writeln!(file, " ingredients: Vec<RecipeIngredient>,")?;
|
||||||
|
writeln!(file, " steps: u8,")?;
|
||||||
|
writeln!(file, " translates: RecipeTranslates,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct RecipeIngredient {{")?;
|
||||||
|
writeln!(file, " key: &'static str,")?;
|
||||||
|
writeln!(file, " measure: RecipeIngredientMeasure,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub enum RecipeIngredientMeasure {{")?;
|
||||||
|
writeln!(file, " Gram(u32),")?;
|
||||||
|
writeln!(file, " KiloGram(u32),")?;
|
||||||
|
writeln!(file, " MilliLiter(u32),")?;
|
||||||
|
writeln!(file, " Liter(u32),")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct RecipeTranslates {{")?;
|
||||||
|
writeln!(file, " ru: RecipeTranslate,")?;
|
||||||
|
writeln!(file, " en: Option<RecipeTranslate>,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
|
||||||
|
writeln!(file, "#[derive(Debug)]")?;
|
||||||
|
writeln!(file, "pub struct RecipeTranslate {{")?;
|
||||||
|
writeln!(file, " name: &'static str,")?;
|
||||||
|
writeln!(file, " instructions: Vec<&'static str>,")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn write_ingredients(file: &mut BufWriter<fs::File>) -> Result<(), std::io::Error> {
|
||||||
|
// fs::read_dir("data/ingredients")
|
||||||
|
let fruit = fs::read_to_string("data/ingredients/fruit.toml")?;
|
||||||
|
let cfg: Main = toml::from_str(&fruit).unwrap();
|
||||||
|
|
||||||
|
let mut ins: usize = 0;
|
||||||
|
|
||||||
|
writeln!(
|
||||||
|
file,
|
||||||
|
"pub const INGREDIENTS: [Ingredient; {}] = [",
|
||||||
|
cfg.ingredients
|
||||||
|
.as_ref()
|
||||||
|
.map(|i| i.len())
|
||||||
|
.unwrap_or_default()
|
||||||
|
)?;
|
||||||
|
ins += 1;
|
||||||
|
if let Some(ingredients) = cfg.ingredients {
|
||||||
|
for ingredient in ingredients {
|
||||||
|
writeln!(file, "{}Ingredient {{", indent(ins))?;
|
||||||
|
ins += 1;
|
||||||
|
writeln!(file, "{}key: {:?},", indent(ins), to_str(ingredient.key))?;
|
||||||
|
writeln!(file, "{}translates: IngredientTranslate {{", indent(ins))?;
|
||||||
|
ins += 1;
|
||||||
|
writeln!(
|
||||||
|
file,
|
||||||
|
"{}ru: {:?},",
|
||||||
|
indent(ins),
|
||||||
|
to_str(ingredient.translates.ru)
|
||||||
|
)?;
|
||||||
|
writeln!(
|
||||||
|
file,
|
||||||
|
"{}en: {:?},",
|
||||||
|
indent(ins),
|
||||||
|
ingredient.translates.en.map(to_str)
|
||||||
|
)?;
|
||||||
|
ins -= 1;
|
||||||
|
writeln!(file, "{}}}", indent(ins))?;
|
||||||
|
ins -= 1;
|
||||||
|
writeln!(file, "{}}},", indent(ins))?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ins -= 1;
|
||||||
|
writeln!(file, "{}];", indent(ins))?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gen_data_mod() -> Result<(), std::io::Error> {
|
||||||
|
let file = fs::File::create("src/data.rs")?;
|
||||||
|
let mut buf = BufWriter::new(file);
|
||||||
|
write_structs(&mut buf)?;
|
||||||
|
println!("cargo:rerun-if-changed=data");
|
||||||
|
write_ingredients(&mut buf)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn indent(indent_size: usize) -> String {
|
||||||
|
std::iter::repeat(" ").take(indent_size * 4).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_str(string: String) -> &'static str {
|
||||||
|
Box::leak(string.into_boxed_str())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
if let Err(e) = gen_data_mod() {
|
||||||
|
eprintln!("Error: {}", e);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
[[ingredients]]
|
||||||
|
key = "apple"
|
||||||
|
measure = "kg"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "яблоко"
|
||||||
|
en = "apple"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "banana"
|
||||||
|
measure = "kg"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "банан"
|
||||||
|
en = "banana"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "orange"
|
||||||
|
measure = "kg"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "апельсин"
|
||||||
|
en = "orange"
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "water"
|
||||||
|
measure = "ml"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "вода"
|
||||||
|
en = "water"
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
[[ingredients]]
|
||||||
|
key = "wheat_flour"
|
||||||
|
measure = "g"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "пшеничная мука"
|
||||||
|
en = "wheat flour"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "olive_oil"
|
||||||
|
measure = "ml"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "оливковое масло"
|
||||||
|
en = "olive oil"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "dry_yeast"
|
||||||
|
measure = "g"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "сухие дрожжи"
|
||||||
|
en = "dry yeast"
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "salt"
|
||||||
|
measure = "g"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "соль"
|
||||||
|
en = "salt"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "sugar"
|
||||||
|
measure = "g"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "сахар"
|
||||||
|
en = "sugar"
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
[[ingredients]]
|
||||||
|
key = "carrot"
|
||||||
|
measure = "kg"
|
||||||
|
[ingredients.translates]
|
||||||
|
ru = "морковь"
|
||||||
|
en = "carrot"
|
||||||
|
|
||||||
|
[[ingredients]]
|
||||||
|
key = "potato"
|
||||||
|
measure = "kg"
|
||||||
|
[ingredienst.translates]
|
||||||
|
ru = "картофель"
|
||||||
|
en = "potato"
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
key = "thin_crispy_pizza_base"
|
key = "thin_crispy_pizza_base"
|
||||||
|
|
||||||
ingredients = [
|
ingredients = [
|
||||||
{ key: "seasoning:salt", g: 5 },
|
{ key = "salt", g = 5 },
|
||||||
{ key: "seasoning:sugar", g: 4 },
|
{ key = "sugar", g = 4 },
|
||||||
{ key: "product:wheat_flour", g: 500 },
|
{ key = "wheat_flour", g = 500 },
|
||||||
{ key: "product:dry_yeast", g: 7 },
|
{ key = "dry_yeast", g = 7 },
|
||||||
{ key: "product:olive_oil", ml: 25 },
|
{ key = "olive_oil", ml = 25 },
|
||||||
{ key: "liquid:water", ml: 250 },
|
{ key = "water", ml = 250 },
|
||||||
]
|
]
|
||||||
|
|
||||||
steps = 7
|
steps = 7
|
|
@ -0,0 +1,62 @@
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Ingredient {
|
||||||
|
pub key: &'static str,
|
||||||
|
translates: IngredientTranslate,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct IngredientTranslate {
|
||||||
|
ru: &'static str,
|
||||||
|
en: Option<&'static str>,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Recipe {
|
||||||
|
key: &'static str,
|
||||||
|
ingredients: Vec<RecipeIngredient>,
|
||||||
|
steps: u8,
|
||||||
|
translates: RecipeTranslates,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct RecipeIngredient {
|
||||||
|
key: &'static str,
|
||||||
|
measure: RecipeIngredientMeasure,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum RecipeIngredientMeasure {
|
||||||
|
Gram(u32),
|
||||||
|
KiloGram(u32),
|
||||||
|
MilliLiter(u32),
|
||||||
|
Liter(u32),
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct RecipeTranslates {
|
||||||
|
ru: RecipeTranslate,
|
||||||
|
en: Option<RecipeTranslate>,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct RecipeTranslate {
|
||||||
|
name: &'static str,
|
||||||
|
instructions: Vec<&'static str>,
|
||||||
|
}
|
||||||
|
pub const INGREDIENTS: [Ingredient; 3] = [
|
||||||
|
Ingredient {
|
||||||
|
key: "apple",
|
||||||
|
translates: IngredientTranslate {
|
||||||
|
ru: "яблоко",
|
||||||
|
en: Some("apple"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Ingredient {
|
||||||
|
key: "banana",
|
||||||
|
translates: IngredientTranslate {
|
||||||
|
ru: "банан",
|
||||||
|
en: Some("banana"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Ingredient {
|
||||||
|
key: "orange",
|
||||||
|
translates: IngredientTranslate {
|
||||||
|
ru: "апельсин",
|
||||||
|
en: Some("orange"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
];
|
|
@ -0,0 +1,17 @@
|
||||||
|
use crate::data::Ingredient;
|
||||||
|
|
||||||
|
mod data;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
|
||||||
|
dbg!(data::INGREDIENTS
|
||||||
|
.into_iter()
|
||||||
|
.filter(|i| i.key == "banana")
|
||||||
|
.collect::<Vec<data::Ingredient>>());
|
||||||
|
|
||||||
|
// let cfg: config::Main = toml::from_str(include_str!("../data/ingredients/fruit.toml")).unwrap();
|
||||||
|
// let cfg: config::Main = toml::from_str(include_str!("../data/recipes/pizza.toml")).unwrap();
|
||||||
|
|
||||||
|
// dbg!(cfg);
|
||||||
|
}
|
Loading…
Reference in New Issue