supply_change.mojo (1655B)
1 from std.collections import Optional 2 3 4 @fieldwise_init 5 struct ProposedSupplyChange(Copyable, Movable): 6 var target_kind: String 7 var target_id: Optional[String] 8 var operation: String 9 var expected_revision: Optional[String] 10 var unresolved: Bool 11 12 13 def proposed_change( 14 target_kind: String, 15 target_id: Optional[String], 16 operation: String, 17 expected_revision: Optional[String], 18 ) raises -> ProposedSupplyChange: 19 var kinds = ["listing", "product", "farm"] 20 var kind_known = False 21 for candidate in kinds: 22 if candidate == target_kind: 23 kind_known = True 24 if not kind_known: 25 raise Error("target kind must be listing, product or farm") 26 var operations = [ 27 "addition", 28 "remaining", 29 "replacement", 30 "withdrawal", 31 "correction", 32 "unresolved", 33 ] 34 var operation_known = False 35 for candidate in operations: 36 if candidate == operation: 37 operation_known = True 38 if not operation_known: 39 raise Error("unknown supply change operation: " + operation) 40 41 var resolved_operation = String(operation) 42 var unresolved = False 43 if ( 44 operation == "withdrawal" or operation == "correction" 45 ) and not target_id: 46 resolved_operation = "unresolved" 47 unresolved = True 48 49 return ProposedSupplyChange( 50 target_kind=String(target_kind), 51 target_id=target_id.copy(), 52 operation=resolved_operation, 53 expected_revision=expected_revision.copy(), 54 unresolved=unresolved, 55 ) 56 57 58 def change_expands_to_farm(change: ProposedSupplyChange) -> Bool: 59 return False