openfare_lib/api/services/
basket.rs1pub type ExtensionName = String;
2
3#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
4pub struct Item {
5 pub package: crate::package::Package,
6 pub extension_name: ExtensionName,
7 pub plans: std::collections::BTreeMap<String, crate::lock::plan::Plan>,
8 pub total_price: crate::price::Price,
9 pub payees: crate::lock::payee::Payees,
10}
11
12impl Item {
13 pub fn plan_payees(&self, plan_id: &str) -> Option<crate::lock::payee::Payees> {
14 let plan = self.plans.get(plan_id);
15 if let Some(plan) = plan {
16 if let Some(shares) = &plan.payments.shares {
17 let payee_labels = shares
18 .iter()
19 .map(|(label, _)| label)
20 .collect::<std::collections::BTreeSet<_>>();
21 let payees = self
22 .payees
23 .iter()
24 .filter(|(label, _payee)| payee_labels.contains(label))
25 .map(|(label, payee)| (label.clone(), payee.clone()))
26 .collect();
27 Some(payees)
28 } else {
29 Some(self.payees.clone())
31 }
32 } else {
33 None
34 }
35 }
36}