tackler_core/kernel/
report_settings.rs1use crate::config::{BalanceType, Scale};
6use crate::kernel::Settings;
7use crate::kernel::price_lookup::PriceLookup;
8use crate::model::Commodity;
9use crate::tackler;
10use jiff::tz::TimeZone;
11use std::sync::Arc;
12use tackler_api::txn_ts::{GroupBy, TimestampStyle};
13
14#[derive(Debug, Clone)]
15pub struct BalanceSettings {
16 pub(crate) title: String,
17 pub(crate) bal_type: BalanceType,
18 pub(crate) ras: Vec<String>,
19 pub(crate) scale: Scale,
20 pub(crate) report_commodity: Option<Arc<Commodity>>,
21 pub(crate) price_lookup: PriceLookup,
22}
23
24impl TryFrom<&Settings> for BalanceSettings {
25 type Error = tackler::Error;
26
27 fn try_from(settings: &Settings) -> Result<Self, Self::Error> {
28 Ok(BalanceSettings {
29 title: settings.report.balance.title.clone(),
30 bal_type: settings.report.balance.bal_type.clone(),
31 ras: settings.get_balance_ras(),
32 scale: settings.report.scale.clone(),
33 report_commodity: settings.get_report_commodity(),
34 price_lookup: settings.get_price_lookup(),
35 })
36 }
37}
38
39#[derive(Debug, Clone)]
40pub struct BalanceGroupSettings {
41 pub title: String,
42 pub bal_type: BalanceType,
43 pub ras: Vec<String>,
44 pub group_by: GroupBy,
45 pub report_tz: TimeZone,
46 pub report_commodity: Option<Arc<Commodity>>,
47 pub price_lookup: PriceLookup,
48 pub scale: Scale,
49}
50
51impl TryFrom<&Settings> for BalanceGroupSettings {
52 type Error = tackler::Error;
53
54 fn try_from(settings: &Settings) -> Result<Self, Self::Error> {
55 let bgs = BalanceGroupSettings {
56 title: settings.report.balance_group.title.clone(),
57 bal_type: settings.report.balance_group.bal_type.clone(),
58 ras: settings.get_balance_group_ras(),
59 group_by: settings.report.balance_group.group_by,
60 report_tz: settings.report.report_tz.clone(),
61 report_commodity: settings.get_report_commodity(),
62 price_lookup: settings.get_price_lookup(),
63 scale: settings.report.scale.clone(),
64 };
65 Ok(bgs)
66 }
67}
68
69#[derive(Debug, Clone)]
70pub struct RegisterSettings {
71 pub title: String,
72 pub ras: Vec<String>,
73 pub report_tz: TimeZone,
74 pub report_commodity: Option<Arc<Commodity>>,
75 pub price_lookup: PriceLookup,
76 pub timestamp_style: TimestampStyle,
77 pub(crate) scale: Scale,
78}
79
80impl TryFrom<&Settings> for RegisterSettings {
81 type Error = tackler::Error;
82
83 fn try_from(settings: &Settings) -> Result<RegisterSettings, tackler::Error> {
84 let rs = RegisterSettings {
85 title: settings.report.register.title.clone(),
86 ras: settings.get_register_ras(),
87 report_tz: settings.report.report_tz.clone(),
88 report_commodity: settings.get_report_commodity(),
89 price_lookup: settings.get_price_lookup(),
90 timestamp_style: settings.report.register.timestamp_style,
91 scale: settings.report.scale.clone(),
92 };
93 Ok(rs)
94 }
95}