diff --git a/mls-rs-uniffi/src/config.rs b/mls-rs-uniffi/src/config.rs index bd9f6001..a7716672 100644 --- a/mls-rs-uniffi/src/config.rs +++ b/mls-rs-uniffi/src/config.rs @@ -42,7 +42,8 @@ impl mls_rs_core::group::GroupStateStorage for ClientGroupStorage { updates: Vec, ) -> Result<(), Self::Error> { self.0.write( - state.into(), + state.id, + state.data, inserts.into_iter().map(Into::into).collect(), updates.into_iter().map(Into::into).collect(), ) diff --git a/mls-rs-uniffi/src/config/group_state.rs b/mls-rs-uniffi/src/config/group_state.rs index 69f760eb..e4fc54a0 100644 --- a/mls-rs-uniffi/src/config/group_state.rs +++ b/mls-rs-uniffi/src/config/group_state.rs @@ -4,17 +4,11 @@ use std::sync::Mutex; use crate::Error; -// TODO(mulmarta): we'd like to use GroupState and EpochRecord from mls-rs-core -// but this breaks python tests because using 2 crates makes uniffi generate -// a python module which must be in a subdirectory of the directory with test scripts -// which is not supported by the script we use. -#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, uniffi::Record)] -pub struct GroupState { - /// A unique group identifier. - pub id: Vec, - pub data: Vec, -} - +// TODO(mulmarta): we'd like to use EpochRecord from mls-rs-core but +// this breaks the Python tests because using two crates makes UniFFI +// generate a Python module which must be in a subdirectory of the +// directory with test scripts which is not supported by the script we +// use. #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, uniffi::Record)] pub struct EpochRecord { /// A unique epoch identifier within a particular group. @@ -22,18 +16,6 @@ pub struct EpochRecord { pub data: Vec, } -impl From for GroupState { - fn from(mls_rs_core::group::GroupState { id, data }: mls_rs_core::group::GroupState) -> Self { - Self { id, data } - } -} - -impl From for mls_rs_core::group::GroupState { - fn from(GroupState { id, data }: GroupState) -> Self { - Self { id, data } - } -} - impl From for EpochRecord { fn from(mls_rs_core::group::EpochRecord { id, data }: mls_rs_core::group::EpochRecord) -> Self { Self { id, data } @@ -55,7 +37,8 @@ pub trait GroupStateStorage: Send + Sync + Debug { async fn write( &self, - state: GroupState, + group_id: Vec, + group_state: Vec, epoch_inserts: Vec, epoch_updates: Vec, ) -> Result<(), Error>; @@ -102,13 +85,14 @@ where async fn write( &self, - state: GroupState, + id: Vec, + data: Vec, epoch_inserts: Vec, epoch_updates: Vec, ) -> Result<(), Error> { self.inner() .write( - state.into(), + mls_rs_core::group::GroupState { id, data }, epoch_inserts.into_iter().map(Into::into).collect(), epoch_updates.into_iter().map(Into::into).collect(), ) diff --git a/mls-rs-uniffi/src/lib.rs b/mls-rs-uniffi/src/lib.rs index 77947d01..a7a027a1 100644 --- a/mls-rs-uniffi/src/lib.rs +++ b/mls-rs-uniffi/src/lib.rs @@ -704,7 +704,7 @@ impl Group { #[cfg(test)] mod tests { use super::*; - use crate::config::group_state::{EpochRecord, GroupState, GroupStateStorage}; + use crate::config::group_state::{EpochRecord, GroupStateStorage}; use std::collections::HashMap; #[test] @@ -754,14 +754,15 @@ mod tests { fn write( &self, - state: GroupState, + group_id: Vec, + group_state: Vec, epoch_inserts: Vec, epoch_updates: Vec, ) -> Result<(), Error> { let mut groups = self.lock(); - let group = groups.entry(state.id).or_default(); - group.state = state.data; + let group = groups.entry(group_id).or_default(); + group.state = group_state; for insert in epoch_inserts { group.epoch_data.push(insert); } diff --git a/mls-rs-uniffi/tests/simple_scenario_sync.py b/mls-rs-uniffi/tests/simple_scenario_sync.py index 1b6bb332..27a98fa8 100644 --- a/mls-rs-uniffi/tests/simple_scenario_sync.py +++ b/mls-rs-uniffi/tests/simple_scenario_sync.py @@ -1,7 +1,7 @@ from dataclasses import dataclass, field from mls_rs_uniffi import CipherSuite, generate_signature_keypair, Client, \ - GroupStateStorage, GroupState, EpochRecord, ClientConfig, ProtocolVersion + GroupStateStorage, EpochRecord, ClientConfig, ProtocolVersion @dataclass class GroupStateData: @@ -32,11 +32,11 @@ def epoch(self, group_id: bytes, epoch_id: int): return None - def write(self, state: GroupState, epoch_inserts: list[EpochRecord], epoch_updates: list[EpochRecord]): - if self.groups.get(state.id.hex()) == None: - self.groups[state.id.hex()] = GroupStateData(state.data) + def write(self, group_id: bytes, group_state: bytes, epoch_inserts: list[EpochRecord], epoch_updates: list[EpochRecord]): + if self.groups.get(group_id.hex()) == None: + self.groups[group_id.hex()] = GroupStateData(group_state) - group = self.groups[state.id.hex()] + group = self.groups[group_id.hex()] for insert in epoch_inserts: group.epoch_data.append(insert)