errors.mojo (1951B)
1 from std.collections import Optional 2 3 from json import Value 4 5 from hyf_core.provenance import CoreResponseMeta 6 7 8 @fieldwise_init 9 struct CoreError(Copyable, Movable): 10 var code: String 11 var message: String 12 var retryable: Bool 13 14 15 @fieldwise_init 16 struct CapabilitySuccess(Copyable, Movable): 17 var output: Value 18 var meta: Optional[CoreResponseMeta] 19 20 21 @fieldwise_init 22 struct CapabilityFailure(Copyable, Movable): 23 var error: CoreError 24 25 26 @fieldwise_init 27 struct CapabilityResult(Copyable, Movable): 28 var success: Optional[CapabilitySuccess] 29 var failure: Optional[CapabilityFailure] 30 31 32 def _copy_core_error(error: CoreError) -> CoreError: 33 return CoreError( 34 code=String(error.code), 35 message=String(error.message), 36 retryable=error.retryable, 37 ) 38 39 40 def successful_capability( 41 output: Value, meta: Optional[CoreResponseMeta] = None 42 ) -> CapabilityResult: 43 return CapabilityResult( 44 success=CapabilitySuccess(output=output.copy(), meta=meta.copy()), 45 failure=None, 46 ) 47 48 49 def failed_capability(error: CoreError) -> CapabilityResult: 50 return CapabilityResult( 51 success=None, 52 failure=CapabilityFailure(error=_copy_core_error(error)), 53 ) 54 55 56 def invalid_context_error(message: String) -> CoreError: 57 return CoreError(code="invalid_context", message=message, retryable=False) 58 59 60 def invalid_input_error(message: String) -> CoreError: 61 return CoreError(code="invalid_input", message=message, retryable=False) 62 63 64 def capability_not_implemented_error(capability: String) -> CoreError: 65 return CoreError( 66 code="capability_not_implemented", 67 message="core capability '" + capability + "' is not implemented yet", 68 retryable=False, 69 ) 70 71 72 def backend_unavailable_error(backend: String) -> CoreError: 73 return CoreError( 74 code="backend_unavailable", 75 message="backend '" + backend + "' is unavailable", 76 retryable=True, 77 )