1 import Base 2 import ./Backup.bend as Backup 3 4 # Identifies a remote owner failure without importing socket effects. 5 type OwnerError is Data: 6 ConnectHost{code: U32, message: String} 7 ConnectUnsupported{} 8 ReadHost{code: U32, message: String} 9 ReadUnsupported{} 10 ReadFailure{} 11 CommitHost{code: U32, message: String} 12 CommitFailure{} 13 FrameTooLarge{} 14 StaleOwner{} 15 CorrelationMismatch{} 16 MalformedResponse{} 17 RequestIdsExhausted{} 18 OwnerRejected{} 19 UnsupportedPlatform{} 20 21 # Maps every remote cursor failure into the backup source error domain. 22 def source.error(error: OwnerError) -> Backup.Error: 23 match error: 24 case ConnectHost{code, message}: 25 Backup.SourceFailure{code, message} 26 case ConnectUnsupported{}: 27 Backup.UnsupportedPlatform{} 28 case ReadHost{code, message}: 29 Backup.SourceFailure{code, message} 30 case ReadUnsupported{}: 31 Backup.UnsupportedPlatform{} 32 case ReadFailure{}: 33 Backup.SourceFailure{5, "owner snapshot cursor read failed"} 34 case CommitHost{code, message}: 35 Backup.SourceFailure{code, message} 36 case CommitFailure{}: 37 Backup.SourceFailure{5, "owner snapshot cursor state is uncertain"} 38 case FrameTooLarge{}: 39 Backup.SourceFailure{75, "owner cursor frame exceeded limit"} 40 case StaleOwner{}: 41 Backup.SourceFailure{116, "owner cursor generation is stale"} 42 case CorrelationMismatch{}: 43 Backup.SourceFailure{71, "owner cursor correlation mismatch"} 44 case MalformedResponse{}: 45 Backup.SourceFailure{71, "owner cursor response is malformed"} 46 case RequestIdsExhausted{}: 47 Backup.SourceFailure{75, "owner cursor request ids exhausted"} 48 case OwnerRejected{}: 49 Backup.SourceFailure{5, "owner rejected snapshot cursor read"} 50 case UnsupportedPlatform{}: Backup.UnsupportedPlatform{}