hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

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