def snapshot.cursor.count.loop
mylsm-lsm-store@0.6.0.1 · src/coordinator/ByteClient.bend:532
import mylsm-lsm-store@0.6.0.1/src/coordinator/ByteClient.bend as ByteClient
import Base
import mylsm-lsm-store@0.6.0.1/src/coordinator/Client.bend as Client
import mylsm-lsm-store@0.6.0.1/src/coordinator/Protocol.bend as Protocol
import mylsm-lsm-store@0.6.0.1/src/coordinator/CursorCodec.bend as CursorCodec
import mylsm-lsm-store@0.6.0.1/src/coordinator/CursorCountPolicy.bend as CursorCountPolicy
532def snapshot.cursor.count.loop(
533 fuel: Nat,
534 state: SnapshotCountState
535) -> IO(Client.Session & Result<&1, &1, Client.Error, U32>):
536 match fuel:
537 case 0n:
538 snapshot.cursor.count.close.state(state,
539 Client.OwnerRejected{Protocol.ResponseResourceLimit{}})
540 case 1n+rest:
541 match state:
542 case SnapshotCountFrame{pair, cursor_id, count}:
543 match pair:
544 case (session, Fail{error}):
545 snapshot.cursor.count.close.resource(session, cursor_id, error)
546 case (session, Done{CursorCodec.CursorEnd{}}):
547 IO.pure(Client.Session & Result<&1, &1, Client.Error, U32>,
548 (session, Done{count}))
549 case (session, Done{CursorCodec.CursorItem{_, _}}):
550 snapshot.cursor.count.loop(rest, SnapshotCountItem{session,
551 cursor_id, CursorCountPolicy.next(count)})
552 case SnapshotCountItem{session, cursor_id, decision}:
553 match decision:
554 case CursorCountPolicy.CountLimit{}:
555 snapshot.cursor.count.close.resource(session, cursor_id,
556 Client.OwnerRejected{Protocol.ResponseResourceLimit{}})
557 case CursorCountPolicy.CountContinue{next_count}:
558 snapshot.cursor.count.loop(rest,
559 SnapshotCountNeed{session,
560 CursorCountPolicy.u32.pair(cursor_id), next_count})
561 case SnapshotCountNeed{session, cursor_ids, count}:
562 match cursor_ids:
563 case (wire_id, retained_id):
564 do IO<Client.Session &
565 Result<&1, &1, Client.Error, U32>>:
566 next : Client.Session &
567 Result<&1, &1, Client.Error, CursorCodec.Frame> <-
568 snapshot.cursor.next(session, wire_id)
569 snapshot.cursor.count.loop(rest,
570 SnapshotCountFrame{next, retained_id, count})