iterable.rs

Overview

This file defines a generic trait and its implementation to provide an iterable interface over a durable storage system containing messages indexed by keys. The main functionality is to enable traversing a range of messages stored durably, yielding them as an iterator that produces either successfully retrieved (Message, MessageKey) pairs or an error encapsulating possible loading issues.

The file focuses on the abstraction DurableStorageIterable which exposes an iter method to obtain an iterator over a specified range of messages. It leverages the MessagesRangeIterator for the actual iteration mechanism and integrates with the DurableStorageRead trait representing the underlying durable storage read operations.


Traits and Implementations

Trait: DurableStorageIterable<MessageKey, Message>

This trait describes an iterable interface on a storage system that can yield messages within a specified range.

Associated Types

Methods


Implementation: DurableStorageIterable for any Storage implementing DurableStorageRead

This implementation is generic over MessageKey, Message, and Storage. It requires:

Associated Type

Method: iter


Important Implementation Details


Interaction with Other Components

This module acts as an adapter layer that connects the durable storage read interface to an iterator interface for convenient and idiomatic iteration over stored messages.


Mermaid Diagram

classDiagram
class DurableStorageIterable~MessageKey, Message~ {
<<trait>>
+iter(range: MessagesRange) Iterator<Result<(Message, MessageKey), IterError>>
+IterError
}
class Storage {
+iter(range: MessagesRange) Iterator<Result<(Message, MessageKey), IterError>>
+LoadError
}
class MessagesRangeIterator~'a, MessageKey, Message, Storage~ {
+new(storage: &Storage, range: MessagesRange) MessagesRangeIterator
+next() Option<Result<(Message, MessageKey), IterError>>
}
class IteratorError~LoadError, MessageKey~ {
}
class MessagesRange~MessageKey, Message~ {
}
DurableStorageIterable <|.. Storage
Storage --> DurableStorageRead
Storage --> IteratorError
Storage --> MessagesRangeIterator
MessagesRangeIterator --> MessagesRange
MessagesRangeIterator --> IteratorError