
Inventory.pudu
Pudu25 lines882 B
1/** @Samples.Inventory.Module — stock levels changed by receipts, sales, and counts */2module Inventory345/** @Samples.Inventory.Item — one stock keeping unit and the quantity on hand */6export type Item = { sku: Str, quantity: Int }78/** @Samples.Inventory.Change — an event that changes the quantity of an item */9export type Change = Received(Int) | Sold(Int) | Counted(Int)1011121314export fn apply(item: Item, change: Change) -> Item {15 match change {16 case Received(count) => Item{..item, quantity: item.quantity + count}17 case Sold(count) => Item{..item, quantity: item.quantity - count}18 case Counted(count) => Item{..item, quantity: count}19 }20}21222324export fn empty(sku: Str) -> Item { Item{sku: sku, quantity: 0} }25