pub struct SledMailboxStore {
pub(crate) tree: Tree,
pub(crate) encryption: Option<StorageEncryption>,
pub(crate) max_storage_per_user: usize,
}Expand description
A MailboxStore implementation using sled for storage.
Fields§
§tree: Tree§encryption: Option<StorageEncryption>§max_storage_per_user: usizeImplementations§
Source§impl SledMailboxStore
impl SledMailboxStore
Sourcepub fn new(
db: Db,
encryption: Option<StorageEncryption>,
max_storage_per_user: usize,
) -> Result<Self>
pub fn new( db: Db, encryption: Option<StorageEncryption>, max_storage_per_user: usize, ) -> Result<Self>
Creates a new SledMailboxStore.
§Arguments
db- Thesled::Dbinstance to use for storage.encryption- The optionalStorageEncryptionto use for encrypting messages.max_storage_per_user- The maximum number of messages to store per user.
§Errors
This function will return an error if the mailbox tree cannot be opened.
Sourcepub(crate) fn make_message_key(
&self,
recipient_hash: &[u8; 32],
msg_id: &Uuid,
) -> Vec<u8> ⓘ
pub(crate) fn make_message_key( &self, recipient_hash: &[u8; 32], msg_id: &Uuid, ) -> Vec<u8> ⓘ
Creates a unique key for a message in the mailbox.
Sourcepub(crate) fn serialize_message(
&self,
msg: &EncryptedMessage,
) -> Result<Vec<u8>>
pub(crate) fn serialize_message( &self, msg: &EncryptedMessage, ) -> Result<Vec<u8>>
Serializes an EncryptedMessage and encrypts it if encryption is enabled.
Sourcepub(crate) fn deserialize_message(
&self,
data: &[u8],
) -> Result<EncryptedMessage>
pub(crate) fn deserialize_message( &self, data: &[u8], ) -> Result<EncryptedMessage>
Decrypts and deserializes an EncryptedMessage.
Trait Implementations§
Source§impl MailboxStore for SledMailboxStore
impl MailboxStore for SledMailboxStore
Source§fn store_message<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
msg: EncryptedMessage,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn store_message<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
msg: EncryptedMessage,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stores an encrypted message for a recipient in the mailbox.
This function also enforces storage limits by removing the oldest messages if the maximum storage per user is exceeded.
§Arguments
recipient_hash- The hash of the recipient’s public key.msg- TheEncryptedMessageto store.
§Errors
This function will return an error if the message cannot be stored or if
there are issues with the underlying sled database.
Source§fn fetch_messages<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<EncryptedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn fetch_messages<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
limit: usize,
) -> Pin<Box<dyn Future<Output = Result<Vec<EncryptedMessage>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Fetches a limited number of messages for a recipient from the mailbox.
The messages are sorted by timestamp and nonce for deterministic ordering. Corrupt messages encountered during fetching are logged and removed.
§Arguments
recipient_hash- The hash of the recipient’s public key.limit- The maximum number of messages to fetch.
§Returns
A Vec of EncryptedMessages.
§Errors
This function will return an error if there are issues with the underlying
sled database.
Source§fn delete_messages<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
msg_ids: Vec<Uuid>,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_messages<'life0, 'async_trait>(
&'life0 self,
recipient_hash: [u8; 32],
msg_ids: Vec<Uuid>,
) -> Pin<Box<dyn Future<Output = Result<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Deletes specific messages for a recipient from the mailbox.
§Arguments
recipient_hash- The hash of the recipient’s public key.msg_ids- AVecof message IDs to delete.
§Returns
The number of messages successfully deleted.
§Errors
This function will return an error if there are issues with the underlying
sled database.
Source§fn cleanup_expired<'life0, 'async_trait>(
&'life0 self,
max_age: Duration,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cleanup_expired<'life0, 'async_trait>(
&'life0 self,
max_age: Duration,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Cleans up messages older than max_age from the mailbox.
Corrupt messages encountered during cleanup are logged and removed.
§Arguments
max_age- The maximum age for messages to be retained. Messages older than this duration will be deleted.
§Errors
This function will return an error if there are issues with the underlying
sled database.
Auto Trait Implementations§
impl Freeze for SledMailboxStore
impl !RefUnwindSafe for SledMailboxStore
impl Send for SledMailboxStore
impl Sync for SledMailboxStore
impl Unpin for SledMailboxStore
impl !UnwindSafe for SledMailboxStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more