0 is out of stock and nothing is available from now on
This commit is contained in:
@@ -45,6 +45,30 @@ impl Model {
|
||||
pub fn business_on_sale(&self) -> bool {
|
||||
matches!(self.business_sale_price_cents, Some(sale) if sale < self.price_cents)
|
||||
}
|
||||
|
||||
/// Whether the variant's inventory is tracked. A `None` stock means
|
||||
/// "available, not tracked" (always purchasable, unlimited).
|
||||
#[must_use]
|
||||
pub fn tracked(&self) -> bool {
|
||||
self.stock.is_some()
|
||||
}
|
||||
|
||||
/// Whether the variant can currently be bought: untracked variants are always
|
||||
/// available; tracked ones need a positive quantity on hand.
|
||||
#[must_use]
|
||||
pub fn in_stock(&self) -> bool {
|
||||
self.stock.map_or(true, |s| s > 0)
|
||||
}
|
||||
|
||||
/// Clamp a desired quantity to what's available: capped at the tracked stock,
|
||||
/// or left as-is (only floored at 0) when untracked.
|
||||
#[must_use]
|
||||
pub fn cap(&self, qty: i32) -> i32 {
|
||||
match self.stock {
|
||||
Some(s) => qty.clamp(0, s),
|
||||
None => qty.max(0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// implement your write-oriented logic here
|
||||
|
||||
Reference in New Issue
Block a user