review.mojo (1299B)
1 from std.collections import List 2 3 4 @fieldwise_init 5 struct Clarification(Copyable, Movable): 6 var field: String 7 var reason: String 8 9 10 @fieldwise_init 11 struct ReviewState(Copyable, Movable): 12 var required: Bool 13 var clarifications: List[Clarification] 14 15 16 def review_clear() -> ReviewState: 17 return ReviewState(required=False, clarifications=List[Clarification]()) 18 19 20 def review_required(field: String, reason: String) raises -> ReviewState: 21 if field.strip() == "" or reason.strip() == "": 22 raise Error("clarification requires field and reason") 23 var clarifications = List[Clarification]() 24 clarifications.append( 25 Clarification(field=String(field), reason=String(reason)) 26 ) 27 return ReviewState(required=True, clarifications=clarifications^) 28 29 30 def review_add( 31 state: ReviewState, field: String, reason: String 32 ) raises -> ReviewState: 33 if field.strip() == "" or reason.strip() == "": 34 raise Error("clarification requires field and reason") 35 var clarifications = List[Clarification]() 36 for existing in state.clarifications: 37 clarifications.append(existing.copy()) 38 clarifications.append( 39 Clarification(field=String(field), reason=String(reason)) 40 ) 41 return ReviewState(required=True, clarifications=clarifications^)