tktax_analysis/
donations_analysis_hooks.rs

1// ---------------- [ File: tktax-analysis/src/donations_analysis_hooks.rs ]
2crate::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}