tktax_analysis/
donations_analysis_hooks.rs1crate::ix!();
3
4pub type CreateDonationBuilderFn = fn(
5 amazon_item_map: Option<AmazonItemMap>,
6 donation_date: &NaiveDate,
7 donation_location: &DonationLocation,
8 max_item_age: &NaiveDate) -> DonationBuilder;
9
10pub type CreateAmazonItemMapFn = fn(config: &AmazonConfig) -> Option<AmazonItemMap>;
11pub type CreateDonationsFn = fn(builder: &DonationBuilder) -> Vec<Donation>;
12
13#[derive(Clone,Builder,Getters)]
14#[getset(get="pub")]
15pub struct DonationsHooks {
16 create_donation_builder_fn: CreateDonationBuilderFn,
17 create_amazon_item_map_fn: CreateAmazonItemMapFn,
18 create_donations_fn: CreateDonationsFn,
19}
20
21impl DonationsHooks {
22
23 pub fn create_donations(&self, program_config: &ProgramConfig, donation_config: &DonationConfig)
24 -> Vec<Donation>
25 {
26 let amazon_item_map = match program_config.amazon() {
27 Some(amazon_config) => (self.create_amazon_item_map_fn)(&amazon_config),
28 None => None,
29 };
30
31 let donation_builder = (self.create_donation_builder_fn)(
32 amazon_item_map,
33 &donation_config.donation_date(),
34 &donation_config.donation_location(),
35 &donation_config.max_item_age()
36 );
37
38 (self.create_donations_fn)(&donation_builder)
39 }
40}