WIP
This commit is contained in:
@@ -1,14 +1,19 @@
|
|||||||
|
#[derive(Debug)]
|
||||||
|
enum Period {
|
||||||
|
Days(i32),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum ItemUsage {
|
enum ItemUsage {
|
||||||
Singleton,
|
Singleton,
|
||||||
Once,
|
Once,
|
||||||
Periodic(i32),
|
Periodic(Period),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct PackageItem {
|
struct PackageItem {
|
||||||
name: String,
|
name: String,
|
||||||
usage: ItemUsage
|
usage: ItemUsage,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PackageItem {
|
impl PackageItem {
|
||||||
@@ -20,30 +25,103 @@ impl PackageItem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
name: String,
|
||||||
items: &'a[PackageItem],
|
items: Vec<PackageItem>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct TripList<'a> {
|
||||||
|
items: Vec<TripItem<'a>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
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() {
|
fn main() {
|
||||||
let package_list_camping = PackageList {
|
let package_list_camping = PackageList {
|
||||||
name: String::from("camping"),
|
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("Schlafsack"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Zelt"), ItemUsage::Singleton),
|
PackageItem::new(String::from("Zelt"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Luftmatratze"), ItemUsage::Singleton),
|
PackageItem::new(String::from("Luftmatratze"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Campingstuhl"), ItemUsage::Singleton),
|
PackageItem::new(String::from("Campingstuhl"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Regenjacke"), ItemUsage::Singleton),
|
PackageItem::new(String::from("Regenjacke"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Tasse"), 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("Topf"), ItemUsage::Singleton),
|
||||||
PackageItem::new(String::from("Messer"), ItemUsage::Singleton),
|
PackageItem::new(String::from("Messer"), 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);
|
println!("Contents of package list {:?}:", package_list_camping.name);
|
||||||
for item in package_list_camping.items {
|
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);
|
println!("{:?}", item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user