source.mojo (1994B)
1 from std.collections import List, Optional 2 3 4 @fieldwise_init 5 struct SourceId(Copyable, Movable): 6 var value: String 7 8 9 @fieldwise_init 10 struct ActorId(Copyable, Movable): 11 var value: String 12 13 14 @fieldwise_init 15 struct FarmId(Copyable, Movable): 16 var value: String 17 18 19 @fieldwise_init 20 struct NeedId(Copyable, Movable): 21 var value: String 22 23 24 @fieldwise_init 25 struct LotId(Copyable, Movable): 26 var value: String 27 28 29 @fieldwise_init 30 struct Revision(Copyable, Movable): 31 var value: String 32 33 34 def _require_identity(value: String, context: String) raises -> String: 35 var trimmed = String(String(value).strip()) 36 if trimmed == "": 37 raise Error(context + " must not be empty") 38 if trimmed != value: 39 raise Error(context + " must not include boundary whitespace") 40 return trimmed^ 41 42 43 def source_id(value: String) raises -> SourceId: 44 return SourceId(value=_require_identity(value, "source id")) 45 46 47 def actor_id(value: String) raises -> ActorId: 48 return ActorId(value=_require_identity(value, "actor id")) 49 50 51 def farm_id(value: String) raises -> FarmId: 52 return FarmId(value=_require_identity(value, "farm id")) 53 54 55 def need_id(value: String) raises -> NeedId: 56 return NeedId(value=_require_identity(value, "need id")) 57 58 59 def lot_id(value: String) raises -> LotId: 60 return LotId(value=_require_identity(value, "lot id")) 61 62 63 def revision(value: String) raises -> Revision: 64 return Revision(value=_require_identity(value, "revision")) 65 66 67 @fieldwise_init 68 struct TrustedSource(Copyable, Movable): 69 var source_id: SourceId 70 var revision: Revision 71 var actor_id: ActorId 72 var farm_id: FarmId 73 74 75 def trusted_source( 76 source_id_value: String, 77 revision_value: String, 78 actor_id_value: String, 79 farm_id_value: String, 80 ) raises -> TrustedSource: 81 return TrustedSource( 82 source_id=source_id(source_id_value), 83 revision=revision(revision_value), 84 actor_id=actor_id(actor_id_value), 85 farm_id=farm_id(farm_id_value), 86 )