crate::ix!();
pub type CreateDonationBuilderFn = fn(
amazon_item_map: Option<AmazonItemMap>,
donation_date: &NaiveDate,
donation_location: &DonationLocation,
max_item_age: &NaiveDate) -> DonationBuilder;
pub type CreateAmazonItemMapFn = fn(config: &AmazonConfig) -> Option<AmazonItemMap>;
pub type CreateDonationsFn = fn(builder: &DonationBuilder) -> Vec<Donation>;
#[derive(Clone,Builder,Getters)]
#[getset(get="pub")]
pub struct DonationsHooks {
create_donation_builder_fn: CreateDonationBuilderFn,
create_amazon_item_map_fn: CreateAmazonItemMapFn,
create_donations_fn: CreateDonationsFn,
}
impl DonationsHooks {
pub fn create_donations(&self, program_config: &ProgramConfig, donation_config: &DonationConfig)
-> Vec<Donation>
{
let amazon_item_map = match program_config.amazon() {
Some(amazon_config) => (self.create_amazon_item_map_fn)(&amazon_config),
None => None,
};
let donation_builder = (self.create_donation_builder_fn)(
amazon_item_map,
&donation_config.donation_date(),
&donation_config.donation_location(),
&donation_config.max_item_age()
);
(self.create_donations_fn)(&donation_builder)
}
}