From a52db1c8ca878aa00cb131bd64375bd2ff205aee Mon Sep 17 00:00:00 2001 From: Jazz Turner-Baggs <473256+jazzz@users.noreply.github.com> Date: Mon, 22 Jun 2026 16:10:13 -0700 Subject: [PATCH] Allow Storage config in builder --- bin/chat-cli/src/main.rs | 4 +- crates/client/src/builder.rs | 96 ++++++++++++++++++++++++++++++------ 2 files changed, 84 insertions(+), 16 deletions(-) diff --git a/bin/chat-cli/src/main.rs b/bin/chat-cli/src/main.rs index 03acd52..ed3f7ea 100644 --- a/bin/chat-cli/src/main.rs +++ b/bin/chat-cli/src/main.rs @@ -118,7 +118,7 @@ fn run(transport: T, cli: &Cli) -> Result<()> { let registry = HttpRegistry::new(url); let (client, events) = ChatClientBuilder::new() .transport(transport) - // .storage(storage) // Groups Do not support persistence at this time. + .storage_config(storage) .registration(registry) .build() .map_err(|e| anyhow::anyhow!("{e:?}")) @@ -128,7 +128,7 @@ fn run(transport: T, cli: &Cli) -> Result<()> { None => { let (client, events) = ChatClientBuilder::new() .transport(transport) - // .storage(storage) // Groups Do not support persistence at this time. + .storage_config(storage) .build() .map_err(|e| anyhow::anyhow!("{e:?}")) .context("failed to open chat client")?; diff --git a/crates/client/src/builder.rs b/crates/client/src/builder.rs index 2a5faa3..e093dfe 100644 --- a/crates/client/src/builder.rs +++ b/crates/client/src/builder.rs @@ -1,13 +1,13 @@ -use crossbeam_channel::Receiver; use components::EphemeralRegistry; -use libchat::{ChatStorage, IdentityProvider, RegistrationService}; +use crossbeam_channel::Receiver; +use libchat::{ChatError, ChatStorage, IdentityProvider, RegistrationService, StorageConfig}; use storage::ChatStore; +use crate::Transport; use crate::client::ChatClient; use crate::delegate::DelegateSigner; use crate::errors::ClientError; use crate::event::Event; -use crate::Transport; /// Marker for a builder field that has not been configured; the corresponding /// component will be filled in with a sensible default when `build()` is called. @@ -39,19 +39,52 @@ impl ChatClientBuilder { impl ChatClientBuilder { pub fn ident(self, ident: NI) -> ChatClientBuilder { - ChatClientBuilder { ident, transport: self.transport, registration: self.registration, storage: self.storage } + ChatClientBuilder { + ident, + transport: self.transport, + registration: self.registration, + storage: self.storage, + } } pub fn transport(self, transport: NT) -> ChatClientBuilder { - ChatClientBuilder { ident: self.ident, transport, registration: self.registration, storage: self.storage } + ChatClientBuilder { + ident: self.ident, + transport, + registration: self.registration, + storage: self.storage, + } } pub fn registration(self, registration: NR) -> ChatClientBuilder { - ChatClientBuilder { ident: self.ident, transport: self.transport, registration, storage: self.storage } + ChatClientBuilder { + ident: self.ident, + transport: self.transport, + registration, + storage: self.storage, + } } pub fn storage(self, storage: NS) -> ChatClientBuilder { - ChatClientBuilder { ident: self.ident, transport: self.transport, registration: self.registration, storage } + ChatClientBuilder { + ident: self.ident, + transport: self.transport, + registration: self.registration, + storage, + } + } + + pub fn storage_config(self, config: StorageConfig) -> ChatClientBuilder { + let storage = ChatStorage::new(config) + .map_err(ChatError::from) + .expect("Storage config file should be valid"); + + ChatClientBuilder { + ident: self.ident, + transport: self.transport, + registration: self.registration, + storage, + } } } @@ -73,7 +106,12 @@ where // Transport only; I, R, S all default. impl ChatClientBuilder { pub fn build(self) -> Built { - ChatClient::new(DelegateSigner::random(), self.transport, EphemeralRegistry::new(), ChatStorage::in_memory()) + ChatClient::new( + DelegateSigner::random(), + self.transport, + EphemeralRegistry::new(), + ChatStorage::in_memory(), + ) } } @@ -84,7 +122,12 @@ where T: Transport + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(self.ident, self.transport, EphemeralRegistry::new(), ChatStorage::in_memory()) + ChatClient::new( + self.ident, + self.transport, + EphemeralRegistry::new(), + ChatStorage::in_memory(), + ) } } @@ -95,7 +138,12 @@ where R: RegistrationService + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(DelegateSigner::random(), self.transport, self.registration, ChatStorage::in_memory()) + ChatClient::new( + DelegateSigner::random(), + self.transport, + self.registration, + ChatStorage::in_memory(), + ) } } @@ -106,7 +154,12 @@ where S: ChatStore + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(DelegateSigner::random(), self.transport, EphemeralRegistry::new(), self.storage) + ChatClient::new( + DelegateSigner::random(), + self.transport, + EphemeralRegistry::new(), + self.storage, + ) } } @@ -118,7 +171,12 @@ where R: RegistrationService + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(self.ident, self.transport, self.registration, ChatStorage::in_memory()) + ChatClient::new( + self.ident, + self.transport, + self.registration, + ChatStorage::in_memory(), + ) } } @@ -130,7 +188,12 @@ where S: ChatStore + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(DelegateSigner::random(), self.transport, self.registration, self.storage) + ChatClient::new( + DelegateSigner::random(), + self.transport, + self.registration, + self.storage, + ) } } @@ -142,6 +205,11 @@ where S: ChatStore + Send + 'static, { pub fn build(self) -> Built { - ChatClient::new(self.ident, self.transport, EphemeralRegistry::new(), self.storage) + ChatClient::new( + self.ident, + self.transport, + EphemeralRegistry::new(), + self.storage, + ) } }