@@ -12,6 +12,9 @@ use tokio::sync::{oneshot, oneshot::Sender};
12
12
use xmtp_api_grpc:: grpc_api_helper:: Client as TonicApiClient ;
13
13
use xmtp_mls:: builder:: IdentityStrategy ;
14
14
use xmtp_mls:: builder:: LegacyIdentity ;
15
+ use xmtp_mls:: groups:: group_metadata:: ConversationType ;
16
+ use xmtp_mls:: groups:: group_metadata:: GroupMetadata ;
17
+ use xmtp_mls:: groups:: PreconfiguredPolicies ;
15
18
use xmtp_mls:: {
16
19
builder:: ClientBuilder ,
17
20
client:: Client as MlsClient ,
@@ -173,6 +176,15 @@ pub enum GroupPermissions {
173
176
GroupCreatorIsAdmin ,
174
177
}
175
178
179
+ impl From < PreconfiguredPolicies > for GroupPermissions {
180
+ fn from ( policy : PreconfiguredPolicies ) -> Self {
181
+ match policy {
182
+ PreconfiguredPolicies :: EveryoneIsAdmin => GroupPermissions :: EveryoneIsAdmin ,
183
+ PreconfiguredPolicies :: GroupCreatorIsAdmin => GroupPermissions :: GroupCreatorIsAdmin ,
184
+ }
185
+ }
186
+ }
187
+
176
188
#[ uniffi:: export( async_runtime = "tokio" ) ]
177
189
impl FfiConversations {
178
190
pub async fn create_group (
@@ -443,6 +455,19 @@ impl FfiGroup {
443
455
444
456
Ok ( group. is_active ( ) ?)
445
457
}
458
+
459
+ pub fn group_metadata ( & self ) -> Result < Arc < FfiGroupMetadata > , GenericError > {
460
+ let group = MlsGroup :: new (
461
+ self . inner_client . as_ref ( ) ,
462
+ self . group_id . clone ( ) ,
463
+ self . created_at_ns ,
464
+ ) ;
465
+
466
+ let metadata = group. metadata ( ) ?;
467
+ Ok ( Arc :: new ( FfiGroupMetadata {
468
+ inner : Arc :: new ( metadata) ,
469
+ } ) )
470
+ }
446
471
}
447
472
448
473
#[ uniffi:: export]
@@ -507,6 +532,29 @@ pub trait FfiConversationCallback: Send + Sync {
507
532
fn on_conversation ( & self , conversation : Arc < FfiGroup > ) ;
508
533
}
509
534
535
+ #[ derive( uniffi:: Object ) ]
536
+ pub struct FfiGroupMetadata {
537
+ inner : Arc < GroupMetadata > ,
538
+ }
539
+
540
+ #[ uniffi:: export]
541
+ impl FfiGroupMetadata {
542
+ pub fn creator_account_address ( & self ) -> String {
543
+ self . inner . creator_account_address . clone ( )
544
+ }
545
+
546
+ pub fn conversation_type ( & self ) -> String {
547
+ match self . inner . conversation_type {
548
+ ConversationType :: Group => "group" . to_string ( ) ,
549
+ ConversationType :: Dm => "dm" . to_string ( ) ,
550
+ }
551
+ }
552
+
553
+ pub fn policy_type ( & self ) -> Result < GroupPermissions , GenericError > {
554
+ Ok ( self . inner . preconfigured_policy ( ) ?. into ( ) )
555
+ }
556
+ }
557
+
510
558
#[ cfg( test) ]
511
559
mod tests {
512
560
use crate :: {
0 commit comments