diff --git a/api/src/main.rs b/api/src/main.rs index a818d14..3600bf6 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -1,49 +1,127 @@ +#[derive(Debug)] +enum Period { + Days(i32), +} + #[derive(Debug)] enum ItemUsage { Singleton, Once, - Periodic(i32), + Periodic(Period), } #[derive(Debug)] struct PackageItem { name: String, - usage: ItemUsage + usage: ItemUsage, } impl PackageItem { fn new(name: String, usage: ItemUsage) -> PackageItem { - PackageItem{ + PackageItem { name: name, usage: usage, } } } -struct PackageList<'a> { +#[derive(Debug)] +enum TripItemStatus { + Pending, + Ready, + Packed, +} + +#[derive(Debug)] +struct TripItem<'a> { + package_item: &'a PackageItem, + status: TripItemStatus, +} + +impl TripItem<'_> { + fn from_package_item(package_item: &PackageItem) -> TripItem { + TripItem { + package_item: package_item, + status: TripItemStatus::Pending, + } + } +} + +#[derive(Debug)] +struct PackageList { name: String, - items: &'a[PackageItem], + items: Vec, +} + +#[derive(Debug)] +struct TripList<'a> { + items: Vec>, +} + +impl<'a> TripList<'a> { + fn from_package_list(list: &'a PackageList) -> TripList<'a> { + TripList { + items: vec![TripItem::from_package_item(&list.items[0])], + } + + } +} + +#[derive(Debug)] +struct Trip<'a> { + name: String, + date: String, + list: TripList<'a>, +} + +impl<'a> Trip<'a> { + fn from_package_list(name: String, date: String, list: &'a PackageList) -> Trip<'a> { + Trip { + name: name, + date: date, + list: TripList::from_package_list(list), + } + } } fn main() { let package_list_camping = PackageList { name: String::from("camping"), - items: &[ + items: vec![ + PackageItem::new(String::from("Rucksack"), ItemUsage::Singleton), PackageItem::new(String::from("Schlafsack"), ItemUsage::Singleton), PackageItem::new(String::from("Zelt"), ItemUsage::Singleton), PackageItem::new(String::from("Luftmatratze"), ItemUsage::Singleton), PackageItem::new(String::from("Campingstuhl"), ItemUsage::Singleton), PackageItem::new(String::from("Regenjacke"), ItemUsage::Singleton), PackageItem::new(String::from("Tasse"), ItemUsage::Singleton), + PackageItem::new(String::from("Trinkblase"), ItemUsage::Singleton), + PackageItem::new(String::from("Trinkflasche"), ItemUsage::Singleton), PackageItem::new(String::from("Topf"), ItemUsage::Singleton), PackageItem::new(String::from("Messer"), ItemUsage::Singleton), PackageItem::new(String::from("Messer"), ItemUsage::Singleton), - PackageItem::new(String::from("Unterhose"), ItemUsage::Periodic(1)), + PackageItem::new( + String::from("Unterhose"), + ItemUsage::Periodic(Period::Days(1)), + ), ], }; - println!("Contents for package list {:?}:", package_list_camping.name); - for item in package_list_camping.items { + println!("Contents of package list {:?}:", package_list_camping.name); + for item in &package_list_camping.items { + println!("{:?}", item); + } + + println!("Now we're starting an actual trip!"); + + let trip = Trip::from_package_list( + String::from("Campingtrip"), + String::from("2021-09-06"), + &package_list_camping, + ); + + println!("Package list for trip {:?} at {:?}:", trip.name, trip.date); + for item in &trip.list.items { println!("{:?}", item); } }