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 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}