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{})