mod group_v1; use crate::{AccountId, ContentData, DeliveryService, RegistrationService}; use chat_proto::logoschat::encryption::EncryptedPayload; use libchat::IdentityProvider; use std::fmt::Debug; pub use crate::ChatError; pub use group_v1::GroupV1Convo; pub type ConversationIdRef<'a> = &'a str; pub type ConversationId = String; pub struct ServiceContext { pub identity_provider: IP, pub ds: DS, pub rs: RS, } pub trait Id: Debug { fn id(&self) -> ConversationIdRef<'_>; } pub trait BaseConvo: Id + Debug { fn init(&self, service_ctx: &mut ServiceContext) -> Result<(), ChatError>; fn send_content( &mut self, service_ctx: &mut ServiceContext, content: &[u8], ) -> Result<(), ChatError>; fn handle_frame( &mut self, service_ctx: &mut ServiceContext, enc_payload: EncryptedPayload, ) -> Result, ChatError>; } pub trait BaseGroupConvo: BaseConvo { fn add_member( &mut self, service_ctx: &mut ServiceContext, members: &[&AccountId], ) -> Result<(), ChatError>; }