This commit is contained in:
2021-09-06 11:40:41 +02:00
parent 3ab822ea0b
commit bc4cb13e2c

View File

@@ -1,5 +1,12 @@
use std::collections::HashMap; use std::collections::HashMap;
#[derive(Debug)]
enum Duration {
Days(i32),
Weeks(i32),
Months(i32),
}
#[derive(Debug)] #[derive(Debug)]
enum Period { enum Period {
Daily(i32), Daily(i32),
@@ -19,34 +26,62 @@ enum ItemUsage {
enum ItemSize { enum ItemSize {
None, None,
Pack(i32), Pack(i32),
Name(String),
Grams(i32), Grams(i32),
} }
#[derive(Debug)]
struct PreparationStep {
name: String,
start: Duration,
}
impl PreparationStep {
fn new(name: String, start: Duration) -> PreparationStep {
PreparationStep { name, start }
}
}
#[derive(Debug)]
enum Preparation {
None,
Steps(Vec<PreparationStep>),
}
#[derive(Debug)] #[derive(Debug)]
struct PackageItem { struct PackageItem {
name: String, name: String,
size: ItemSize, size: ItemSize,
count: i32, count: i32,
usage: ItemUsage, usage: ItemUsage,
preparation: Preparation,
} }
impl PackageItem { impl PackageItem {
fn new(name: String, size: ItemSize, count: i32, usage: ItemUsage) -> PackageItem { fn new(
name: String,
size: ItemSize,
count: i32,
usage: ItemUsage,
preparation: Preparation,
) -> PackageItem {
PackageItem { PackageItem {
name: name, name,
size: size, size,
count: count, count,
usage: usage, usage,
preparation,
} }
} }
fn new_simple(name: String) -> PackageItem { fn new_simple(name: String) -> PackageItem {
PackageItem { PackageItem::new(
name: name, name,
size: ItemSize::None, ItemSize::None,
count: 1, 1,
usage: ItemUsage::Singleton, ItemUsage::Singleton,
} Preparation::None,
)
} }
} }
@@ -66,7 +101,7 @@ struct TripItem<'a> {
impl TripItem<'_> { impl TripItem<'_> {
fn from_package_item(package_item: &PackageItem) -> TripItem { fn from_package_item(package_item: &PackageItem) -> TripItem {
TripItem { TripItem {
package_item: package_item, package_item,
status: TripItemStatus::Pending, status: TripItemStatus::Pending,
} }
} }
@@ -94,7 +129,7 @@ impl<'a> TripList<'a> {
items.push(TripItem::from_package_item(item)); items.push(TripItem::from_package_item(item));
} }
TripList { items: items } TripList { items }
} }
} }
@@ -108,8 +143,8 @@ struct Trip<'a> {
impl<'a> Trip<'a> { impl<'a> Trip<'a> {
fn from_package_list(name: String, date: String, list: &'a PackageList) -> Trip<'a> { fn from_package_list(name: String, date: String, list: &'a PackageList) -> Trip<'a> {
Trip { Trip {
name: name, name,
date: date, date,
list: TripList::from_package_list(list), list: TripList::from_package_list(list),
} }
} }
@@ -121,18 +156,64 @@ fn main() {
PackageItem::new_simple(String::from("Rucksack")), PackageItem::new_simple(String::from("Rucksack")),
PackageItem::new_simple(String::from("Regenhülle für Rucksack")), PackageItem::new_simple(String::from("Regenhülle für Rucksack")),
PackageItem::new_simple(String::from("Normale Schuhe")), PackageItem::new_simple(String::from("Normale Schuhe")),
PackageItem::new(
String::from("Taschentücher"),
ItemSize::Pack(1),
1,
ItemUsage::Infinite,
Preparation::None,
),
PackageItem::new(
String::from("Handy"),
ItemSize::None,
1,
ItemUsage::Infinite,
Preparation::Steps(vec![PreparationStep::new(
String::from("Aufladen"),
Duration::Days(1),
)]),
),
PackageItem::new(
String::from("Kopfhörer"),
ItemSize::None,
1,
ItemUsage::Infinite,
Preparation::Steps(vec![PreparationStep::new(
String::from("Aufladen"),
Duration::Days(1),
)]),
),
PackageItem::new(
String::from("Mundschutz"),
ItemSize::None,
1,
ItemUsage::Periodic(Period::Weekly(1)),
Preparation::None,
),
PackageItem::new_simple(String::from("Ladekabel")),
// //
// Geld & Karten // Geld & Karten
PackageItem::new_simple(String::from("Geld")), PackageItem::new(
String::from("Bargeld"),
ItemSize::Name(String::from("Euro")),
100,
ItemUsage::Infinite,
Preparation::Steps(vec![PreparationStep::new(
String::from("Abheben"),
Duration::Days(1),
)]),
),
PackageItem::new_simple(String::from("Kreditkarte")), PackageItem::new_simple(String::from("Kreditkarte")),
PackageItem::new_simple(String::from("Pass")), PackageItem::new_simple(String::from("Pass")),
PackageItem::new_simple(String::from("Krankenversicherungskarte")), PackageItem::new_simple(String::from("Krankenversicherungskarte")),
PackageItem::new_simple(String::from("Krankenversicherungskarte (Zusatz)")), PackageItem::new_simple(String::from("Krankenversicherungskarte (Zusatz)")),
PackageItem::new_simple(String::from("Auslandskrankenversicherungsnachweis")), PackageItem::new_simple(String::from("Auslandskrankenversicherungsnachweis")),
PackageItem::new_simple(String::from("Notfalltelefonnummernliste")),
PackageItem::new_simple(String::from("ADAC-Karte")), PackageItem::new_simple(String::from("ADAC-Karte")),
PackageItem::new_simple(String::from("Impfausweiß (EU)")), PackageItem::new_simple(String::from("Impfausweiß (EU)")),
PackageItem::new_simple(String::from("Führerschein")), PackageItem::new_simple(String::from("Führerschein")),
PackageItem::new_simple(String::from("Internationaler Führerschein")), PackageItem::new_simple(String::from("Internationaler Führerschein")),
PackageItem::new_simple(String::from("Tagebuch")),
// //
// Waschzeug // Waschzeug
PackageItem::new_simple(String::from("Waschbeutel")), PackageItem::new_simple(String::from("Waschbeutel")),
@@ -146,6 +227,7 @@ fn main() {
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new_simple(String::from("Zahnbürste")), PackageItem::new_simple(String::from("Zahnbürste")),
PackageItem::new( PackageItem::new(
@@ -153,6 +235,7 @@ fn main() {
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Periodic(Period::Daily(2)), ItemUsage::Periodic(Period::Daily(2)),
Preparation::None,
), ),
PackageItem::new_simple(String::from("Deo")), PackageItem::new_simple(String::from("Deo")),
PackageItem::new_simple(String::from("Duschgel / Shampoo")), PackageItem::new_simple(String::from("Duschgel / Shampoo")),
@@ -163,36 +246,42 @@ fn main() {
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Erste-Hilfe-Set"), String::from("Erste-Hilfe-Set"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Paracetamol"), String::from("Paracetamol"),
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Autan"), String::from("Autan"),
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Pflaster"), String::from("Pflaster"),
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Zeckenkarte"), String::from("Zeckenkarte"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
// //
// Badesachen // Badesachen
@@ -206,12 +295,17 @@ fn main() {
PackageItem::new_simple(String::from("Zelt")), PackageItem::new_simple(String::from("Zelt")),
PackageItem::new_simple(String::from("Luftmatratze")), PackageItem::new_simple(String::from("Luftmatratze")),
PackageItem::new_simple(String::from("Campingstuhl")), PackageItem::new_simple(String::from("Campingstuhl")),
PackageItem::new_simple(String::from("Panzertape")),
PackageItem::new_simple(String::from("Tarp")),
PackageItem::new_simple(String::from("Hängematte")),
PackageItem::new_simple(String::from("Topf")), PackageItem::new_simple(String::from("Topf")),
PackageItem::new_simple(String::from("Teller")), PackageItem::new_simple(String::from("Teller")),
PackageItem::new_simple(String::from("Messer")), PackageItem::new_simple(String::from("Messer")),
PackageItem::new_simple(String::from("Gabel")), PackageItem::new_simple(String::from("Gabel")),
PackageItem::new_simple(String::from("Löffel")), PackageItem::new_simple(String::from("Löffel")),
PackageItem::new_simple(String::from("Stirnlampe")), PackageItem::new_simple(String::from("Stirnlampe")),
PackageItem::new_simple(String::from("Geschirrtuch")),
PackageItem::new_simple(String::from("Spüllappen")),
PackageItem::new_simple(String::from("Taschenlampe")), PackageItem::new_simple(String::from("Taschenlampe")),
PackageItem::new_simple(String::from("Feuerzeug")), PackageItem::new_simple(String::from("Feuerzeug")),
PackageItem::new_simple(String::from("Tasse")), PackageItem::new_simple(String::from("Tasse")),
@@ -221,6 +315,7 @@ fn main() {
ItemSize::Grams(1500), ItemSize::Grams(1500),
1, 1,
ItemUsage::Periodic(Period::Days(2)), ItemUsage::Periodic(Period::Days(2)),
Preparation::None,
), ),
PackageItem::new_simple(String::from("Campingkocher")), PackageItem::new_simple(String::from("Campingkocher")),
PackageItem::new( PackageItem::new(
@@ -228,6 +323,7 @@ fn main() {
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Periodic(Period::Days(3)), ItemUsage::Periodic(Period::Days(3)),
Preparation::None,
), ),
PackageItem::new_simple(String::from("Kaffeekochaufsatz")), PackageItem::new_simple(String::from("Kaffeekochaufsatz")),
PackageItem::new( PackageItem::new(
@@ -235,12 +331,28 @@ fn main() {
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Periodic(Period::Days(5)), ItemUsage::Periodic(Period::Days(5)),
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Müllsäcke"), String::from("Müllsäcke"),
ItemSize::Pack(1), ItemSize::Pack(1),
1, 1,
ItemUsage::Infinite, ItemUsage::Infinite,
Preparation::None,
),
PackageItem::new(
String::from("Teelichter"),
ItemSize::None,
1,
ItemUsage::Periodic(Period::Daily(3)),
Preparation::None,
),
PackageItem::new(
String::from("Klopapier"),
ItemSize::Name(String::from("Rolle")),
1,
ItemUsage::Periodic(Period::Weekly(1)),
Preparation::None,
), ),
// //
// Essen // Essen
@@ -249,6 +361,7 @@ fn main() {
ItemSize::Grams(100), ItemSize::Grams(100),
1, 1,
ItemUsage::Periodic(Period::Days(3)), ItemUsage::Periodic(Period::Days(3)),
Preparation::None,
), ),
// //
// Wanderzeug // Wanderzeug
@@ -256,66 +369,105 @@ fn main() {
PackageItem::new_simple(String::from("Trinkblase")), PackageItem::new_simple(String::from("Trinkblase")),
// //
// Klamotten // Klamotten
PackageItem::new(String::from("Cap"), ItemSize::None, 1, ItemUsage::Singleton), PackageItem::new(
String::from("Cap"),
ItemSize::None,
1,
ItemUsage::Singleton,
Preparation::None,
),
PackageItem::new( PackageItem::new(
String::from("Regenjacke"), String::from("Regenjacke"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Daunenjacke"), String::from("Daunenjacke"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Pullover"), String::from("Pullover"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Lange Hose"), String::from("Lange Hose"),
ItemSize::None, ItemSize::None,
2, 2,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Kurze Hose"), String::from("Kurze Hose"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Jogginghose"), String::from("Jogginghose"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Singleton, ItemUsage::Singleton,
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Socken"), String::from("Socken"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Periodic(Period::Daily(1)), ItemUsage::Periodic(Period::Daily(1)),
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("Unterhose"), String::from("Unterhose"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Periodic(Period::Daily(1)), ItemUsage::Periodic(Period::Daily(1)),
Preparation::None,
), ),
PackageItem::new( PackageItem::new(
String::from("T-Shirt"), String::from("T-Shirt"),
ItemSize::None, ItemSize::None,
1, 1,
ItemUsage::Periodic(Period::Days(2)), ItemUsage::Periodic(Period::Days(2)),
Preparation::None,
), ),
// //
// Misc // Misc
PackageItem::new_simple(String::from("Trinkflasche")), PackageItem::new_simple(String::from("Trinkflasche")),
PackageItem::new_simple(String::from("Dyneemaschnur")),
PackageItem::new_simple(String::from("Ladegerät")), PackageItem::new_simple(String::from("Ladegerät")),
PackageItem::new_simple(String::from("Powerbank")), PackageItem::new(
String::from("Powerbank"),
ItemSize::None,
1,
ItemUsage::Infinite,
Preparation::Steps(vec![PreparationStep::new(
String::from("Aufladen"),
Duration::Days(1),
)]),
),
PackageItem::new(
String::from("Desinfektionsgel"),
ItemSize::None,
1,
ItemUsage::Periodic(Period::Weekly(1)),
Preparation::None,
),
PackageItem::new(
String::from("Karabiner"),
ItemSize::None,
3,
ItemUsage::Singleton,
Preparation::None,
),
PackageItem::new_simple(String::from("Ersatzbrille")), PackageItem::new_simple(String::from("Ersatzbrille")),
PackageItem::new_simple(String::from("Sonnenbrille")), PackageItem::new_simple(String::from("Sonnenbrille")),
PackageItem::new_simple(String::from("Ohrenstöpsel")), PackageItem::new_simple(String::from("Ohrenstöpsel")),