src/scan/Utf8CursorPolicy.bend

mylsm-lsm-store@0.6.0.0 · 31 lines · 0 definitions

1import Base
2
3# Keeps the terminal cursor failure independent from owned error details.
4type Failure is Data:
5  TextDecodeFailure{}
6  ReaderFailure{}
7  ResourceFailure{}
8  ArgumentFailure{}
9
10# Classifies each failure without losing its public category.
11type FailureClass is Data:
12  TextFailure{}
13  StorageFailure{}
14  ResourceLimitFailure{}
15  InvalidArgumentFailure{}
16
17# Retains the terminal failure category across repeated cursor reads.
18def classify(failure: Failure) -> FailureClass:
19  match failure:
20    case TextDecodeFailure{}: TextFailure{}
21    case ReaderFailure{}: StorageFailure{}
22    case ResourceFailure{}: ResourceLimitFailure{}
23    case ArgumentFailure{}: InvalidArgumentFailure{}
24
25# Produces a stored cursor state and an output classification.
26def duplicate(failure: Failure) -> Failure & Failure:
27  match failure:
28    case TextDecodeFailure{}: (TextDecodeFailure{}, TextDecodeFailure{})
29    case ReaderFailure{}: (ReaderFailure{}, ReaderFailure{})
30    case ResourceFailure{}: (ResourceFailure{}, ResourceFailure{})
31    case ArgumentFailure{}: (ArgumentFailure{}, ArgumentFailure{})