Skip to main content

xmtp_mls/
features.rs

1//! The features a client puts in its context.
2
3use crate::attachments::{AttachmentFeatures, AttachmentRuntime};
4use crate::context::LocalContext;
5use crate::groups::context::EngineFeatures;
6use crate::identity_updates::{IdentityFeatures, IdentityResolutionRegistry};
7use crate::subscriptions::incoming::IncomingRuntime;
8use std::sync::Arc;
9
10/// Every feature of a client: attachments, the incoming runtime and identity
11/// resolution.
12#[derive(Clone, Default)]
13pub struct MlsFeatures {
14    pub(crate) attachments: Arc<AttachmentRuntime>,
15    pub(crate) incoming: Arc<IncomingRuntime>,
16    pub(crate) identity_resolutions: Arc<IdentityResolutionRegistry>,
17}
18
19/// The context of a client, with every feature the client has.
20pub type XmtpMlsLocalContext<ApiClient, Db, S> = LocalContext<ApiClient, Db, S, MlsFeatures>;
21
22impl AttachmentFeatures for MlsFeatures {
23    fn attachments(&self) -> &Arc<AttachmentRuntime> {
24        &self.attachments
25    }
26}
27
28impl EngineFeatures for MlsFeatures {
29    fn incoming(&self) -> &IncomingRuntime {
30        &self.incoming
31    }
32}
33
34impl IdentityFeatures for MlsFeatures {
35    fn identity_resolutions(&self) -> &IdentityResolutionRegistry {
36        &self.identity_resolutions
37    }
38}