use crate::promotion::Promotion;
pub struct PromoContext<'a> {
pub current_time: u64,
pub transaction_amount: f64,
pub promo: &'a Promotion,
}
pub fn is_promo_valid(ctx: &PromoContext) -> bool {
let promo = ctx.promo;
if promo.valid_from >= promo.valid_until {
return false;
}
if ctx.current_time < promo.valid_from || ctx.current_time > promo.valid_until {
return false;
}
if let Some(min_tx) = promo.min_transaction {
if ctx.transaction_amount < min_tx {
return false;
}
}
if let Some(limit) = promo.usage_limit {
if promo.used >= limit {
return false;
}
}
true
}