catalogue/
catalogue.rs

1#![allow(dead_code, unused_variables)]
2#[cfg(feature = "serialization")]
3extern crate serde_json;
4
5use bill::*;
6
7fn c(value: i64) -> Currency {
8    Currency::from(('€', value))
9}
10
11fn print_items(items: &[BillItem<Product<'_>>]) {
12    //println!("{:?}", items);
13    for item in items {
14        println!(
15            "   * {:3}x {:15} {:6} {:6}",
16            item.amount,
17            item.product.name,
18            item.product.price.postfix(),
19            item.gross().postfix()
20        );
21    }
22}
23
24fn print(title: &str, bill: &Bill<Product<'_>>) {
25    println!("{}:", title);
26    for (tax, items) in &bill.items_by_tax {
27        println!("  {}%", tax);
28        print_items(items);
29    }
30    println!("---------------------------------------");
31    println!("       {}", bill.gross_total().postfix());
32    println!("     + {} (tax)", bill.tax_total().postfix());
33    println!("   net {}", bill.net_total().postfix());
34    println!();
35}
36
37fn main() {
38    let coffee = Product::new("Coffee", c(250), 0.19);
39    let tee = Product::new("Tea", c(175), 0.19);
40    let water = Product::new("Water", c(61), 0.19);
41    let applejuice = Product::new("AppleJuice", c(164), 0.19);
42    let orangejuice = Product::new("OrangeJuice", c(186), 0.19);
43    let bagel = Product::new("Bagel", c(219), 0.19);
44    let sandwich = Product::new("Sandwich", c(340), 0.19);
45    let pie = Product::new("pie", c(94), 0.19);
46    let soup = Product::new("Soup", c(310), 0.19);
47    let service = Product::new("Service", c(800), 0.00);
48
49    let mut offer = Bill::new();
50    offer.add_item(8., water);
51    offer.add_item(4., applejuice);
52    offer.add_item(4., orangejuice);
53    offer.add_item(40., sandwich);
54    offer.add_item(2., service);
55
56    let mut invoice = Bill::new();
57    invoice.add_item(2., water);
58    invoice.add_item(0., applejuice);
59    invoice.add_item(2., orangejuice);
60    invoice.add_item(50., sandwich);
61    invoice.add_item(2.5, service);
62
63    let mut invoice2 = Bill::new();
64    invoice2.add_item(99.0, Product::new("Red Ballons", c(99), 0.19));
65
66    #[cfg(not(feature = "serialization"))]
67    {
68        print("offer", &offer);
69        print("invoice", &invoice);
70        print("invoice2", &invoice2);
71    }
72    #[cfg(feature = "serialization")]
73    {
74        println!("{}", serde_json::to_string_pretty(&offer).unwrap());
75        println!("{}", serde_json::to_string_pretty(&invoice).unwrap());
76        println!("{}", serde_json::to_string_pretty(&invoice2).unwrap());
77    }
78}