hyf

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

field.mojo (1726B)


      1 from std.collections import Optional
      2 
      3 
      4 @fieldwise_init
      5 struct DecodedField(Copyable, Movable):
      6     var state: String
      7     var value: Optional[String]
      8     var qualifier: String
      9     var method: String
     10 
     11 
     12 def known_field(value: String, method: String) raises -> DecodedField:
     13     if method.strip() == "":
     14         raise Error("field method must not be empty")
     15     return DecodedField(
     16         state="known",
     17         value=Optional[String](String(value)),
     18         qualifier="exact",
     19         method=String(method),
     20     )
     21 
     22 
     23 def known_approximate_field(
     24     value: String, method: String
     25 ) raises -> DecodedField:
     26     var field = known_field(value, method)
     27     field.qualifier = "approximate"
     28     return field^
     29 
     30 
     31 def unresolved_field(method: String) raises -> DecodedField:
     32     if method.strip() == "":
     33         raise Error("field method must not be empty")
     34     return DecodedField(
     35         state="unresolved",
     36         value=None,
     37         qualifier="unknown",
     38         method=String(method),
     39     )
     40 
     41 
     42 def field_is_known(field: DecodedField) -> Bool:
     43     if field.state != "known":
     44         return False
     45     if not field.value:
     46         return False
     47     return True
     48 
     49 
     50 def field_known_or(field: DecodedField, fallback: String) -> String:
     51     if field_is_known(field):
     52         return field.value.value()
     53     return String(fallback)
     54 
     55 
     56 def validate_field_consistency(field: DecodedField) raises:
     57     if field.state == "known" and not field.value:
     58         raise Error("known field must carry a value")
     59     if field.state == "unresolved" and field.value:
     60         raise Error("unresolved field must not carry a value")
     61     if field.state != "known" and field.state != "unresolved":
     62         raise Error("field state must be 'known' or 'unresolved'")