diff --git a/libparsec/crates/client/src/certif/block_validate.rs b/libparsec/crates/client/src/certif/block_validate.rs index 83a0090df7c..86762bb42dd 100644 --- a/libparsec/crates/client/src/certif/block_validate.rs +++ b/libparsec/crates/client/src/certif/block_validate.rs @@ -119,7 +119,7 @@ pub(super) async fn validate_block( let block = ops .store - .for_read_with_requirements(ops, &needed_timestamps, |store| async move { + .for_read_with_requirements(ops, &needed_timestamps, async |store| { realm_keys_bundle::decrypt_for_realm( ops, store, diff --git a/libparsec/crates/client/src/certif/list.rs b/libparsec/crates/client/src/certif/list.rs index a08094b9c17..0269604469c 100644 --- a/libparsec/crates/client/src/certif/list.rs +++ b/libparsec/crates/client/src/certif/list.rs @@ -18,7 +18,7 @@ pub(super) async fn get_current_self_profile( ops: &CertificateOps, ) -> Result { ops.store - .for_read(|store| store.get_current_self_profile()) + .for_read(async |store| store.get_current_self_profile().await) .await? .map_err(|err| err.into()) } @@ -29,7 +29,11 @@ pub(super) async fn get_current_self_realms_role( // TODO: cache ! let certifs = ops .store - .for_read(|store| store.get_user_realms_roles(UpTo::Current, ops.device.user_id)) + .for_read(async |store| { + store + .get_user_realms_roles(UpTo::Current, ops.device.user_id) + .await + }) .await??; // Replay the history of all changes @@ -58,7 +62,7 @@ pub(super) async fn get_current_self_realm_role( ) -> Result>, CertifGetCurrentSelfRealmRoleError> { let role = ops .store - .for_read(|store| async move { store.get_self_user_realm_role(realm_id).await }) + .for_read(async |store| store.get_self_user_realm_role(realm_id).await) .await??; Ok(role) } @@ -87,7 +91,7 @@ pub(super) async fn list_users( limit: Option, ) -> Result, CertifListUsersError> { ops.store - .for_read(|store| async move { + .for_read(async |store| { let certifs = { // If `skip_revoked` is enabled, we cannot limit the number of users // certificates to fetch given we will then filter out the ones corresponding @@ -163,7 +167,11 @@ pub(super) async fn list_user_devices( ) -> Result, CertifListUserDevicesError> { let certifs = ops .store - .for_read(|store| store.get_user_devices_certificates(UpTo::Current, user_id)) + .for_read(async |store| { + store + .get_user_devices_certificates(UpTo::Current, user_id) + .await + }) .await??; let items = certifs @@ -211,7 +219,7 @@ pub(super) async fn get_user_device( device_id: DeviceID, ) -> Result<(UserInfo, DeviceInfo), CertifGetUserDeviceError> { ops.store - .for_read(|store| async move { + .for_read(async |store| { let device_certif = match store.get_device_certificate(UpTo::Current, device_id).await { Ok(certif) => certif, Err(GetCertificateError::ExistButTooRecent { .. }) => { @@ -319,7 +327,7 @@ pub(super) async fn list_workspace_users( let mut infos = Vec::new(); ops.store - .for_read(|store| async move { + .for_read(async |store| { let per_user_certifs = store .get_realm_current_users_roles(UpTo::Current, realm_id) .await?; diff --git a/libparsec/crates/client/src/certif/manifest_validate.rs b/libparsec/crates/client/src/certif/manifest_validate.rs index 473d4c30e47..af751837ff1 100644 --- a/libparsec/crates/client/src/certif/manifest_validate.rs +++ b/libparsec/crates/client/src/certif/manifest_validate.rs @@ -121,7 +121,7 @@ pub(super) async fn validate_user_manifest( ); ops.store - .for_read_with_requirements(ops, &needed_timestamps, |store| async move { + .for_read_with_requirements(ops, &needed_timestamps, async |store| { // 1) Decrypt the vlob let cleartext = &ops.device.user_realm_key.decrypt(encrypted).map_err(|_| { @@ -195,7 +195,7 @@ pub(super) async fn validate_workspace_manifest( ); ops.store - .for_read_with_requirements(ops, &needed_timestamps, |store| async move { + .for_read_with_requirements(ops, &needed_timestamps, async |store| { // 1) Decrypt the vlob let cleartext = realm_keys_bundle::decrypt_for_realm( @@ -312,7 +312,7 @@ pub(super) async fn validate_child_manifest( ); ops.store - .for_read_with_requirements(ops, &needed_timestamps, |store| async move { + .for_read_with_requirements(ops, &needed_timestamps, async |store| { // 1) Decrypt the vlob let cleartext = realm_keys_bundle::decrypt_for_realm( diff --git a/libparsec/crates/client/src/certif/mod.rs b/libparsec/crates/client/src/certif/mod.rs index c488945dc54..bc1ff5be093 100644 --- a/libparsec/crates/client/src/certif/mod.rs +++ b/libparsec/crates/client/src/certif/mod.rs @@ -219,7 +219,7 @@ impl CertificateOps { realm_certificates: &std::collections::HashMap>, ) -> Result { self.store - .for_write(move |store| async move { + .for_write(async |store| { add::add_certificates_batch( self, store, @@ -261,7 +261,7 @@ impl CertificateOps { // ) -> anyhow::Result<()> { // use crate::certif::realm_keys_bundle::RealmKeys; - // self.store.for_read(|store| async move { + // self.store.for_read(async |store| { // let keys = Arc::new(RealmKeys { // realm_id, // keys @@ -280,7 +280,7 @@ impl CertificateOps { latest_known_timestamps: Option<&PerTopicLastTimestamps>, ) -> Result<(), CertifPollServerError> { self.store - .for_write(|store| async move { + .for_write(async |store| { poll::poll_server_for_new_certificates(self, store, latest_known_timestamps).await }) .await? @@ -392,7 +392,7 @@ impl CertificateOps { data: &[u8], ) -> Result<(Vec, IndexInt), CertifEncryptForRealmError> { self.store - .for_read(|store| async move { + .for_read(async |store| { realm_keys_bundle::encrypt_for_realm(self, store, usage, realm_id, data).await }) .await @@ -418,7 +418,7 @@ impl CertificateOps { ) -> Result, CertifDecryptForRealmError> { let outcome = self .store - .for_read(|store| async move { + .for_read(async |store| { realm_keys_bundle::decrypt_for_realm( self, store, usage, realm_id, key_index, encrypted, ) @@ -450,7 +450,7 @@ impl CertificateOps { })?; self.store - .for_read(|store| async move { + .for_read(async |store| { realm_keys_bundle::decrypt_for_realm( self, store, usage, realm_id, key_index, encrypted, ) @@ -470,9 +470,7 @@ impl CertificateOps { ) -> Result>, CertifEncryptForSequesterServicesError> { self.store - .for_read( - |store| async move { encrypt::encrypt_for_sequester_services(store, data).await }, - ) + .for_read(async |store| encrypt::encrypt_for_sequester_services(store, data).await) .await .map_err(|e| match e { CertifStoreError::Stopped => CertifEncryptForSequesterServicesError::Stopped, diff --git a/libparsec/crates/client/src/certif/realm_create.rs b/libparsec/crates/client/src/certif/realm_create.rs index 004c0f8aba7..dfe6f46e48c 100644 --- a/libparsec/crates/client/src/certif/realm_create.rs +++ b/libparsec/crates/client/src/certif/realm_create.rs @@ -46,7 +46,7 @@ pub(super) async fn ensure_realm_created( ) -> Result { let realm_state = ops .store - .for_read(|store| async move { store.get_realm_bootstrap_state(realm_id).await }) + .for_read(async |store| store.get_realm_bootstrap_state(realm_id).await) .await??; if matches!(realm_state, RealmBootstrapState::CreatedInServer) { return Ok(CertificateBasedActionOutcome::LocalIdempotent); diff --git a/libparsec/crates/client/src/certif/realm_decrypt_name.rs b/libparsec/crates/client/src/certif/realm_decrypt_name.rs index 7b1d3615aaa..414ff700618 100644 --- a/libparsec/crates/client/src/certif/realm_decrypt_name.rs +++ b/libparsec/crates/client/src/certif/realm_decrypt_name.rs @@ -65,7 +65,7 @@ pub(super) async fn decrypt_current_realm_name( realm_id: VlobID, ) -> Result<(EntryName, DateTime), CertifDecryptCurrentRealmNameError> { ops.store - .for_read(|store| async move { + .for_read(async |store| { // 1) Retrieve the realm name certificate let maybe_certif = store diff --git a/libparsec/crates/client/src/certif/realm_key_rotation.rs b/libparsec/crates/client/src/certif/realm_key_rotation.rs index 13136345824..56b2d7b25bc 100644 --- a/libparsec/crates/client/src/certif/realm_key_rotation.rs +++ b/libparsec/crates/client/src/certif/realm_key_rotation.rs @@ -192,7 +192,7 @@ async fn generate_realm_rotate_key_req( ) -> Result<(authenticated_cmds::latest::realm_rotate_key::Req, IndexInt), CertifRotateRealmKeyError> { ops.store - .for_read(|store| async move { + .for_read(async |store| { // 1) Generate the next keys bundle // Note that given this function is idempotent, this new keys bundle might get diff --git a/libparsec/crates/client/src/certif/realm_keys_bundle.rs b/libparsec/crates/client/src/certif/realm_keys_bundle.rs index 42fd95cb521..d91fb63a442 100644 --- a/libparsec/crates/client/src/certif/realm_keys_bundle.rs +++ b/libparsec/crates/client/src/certif/realm_keys_bundle.rs @@ -305,7 +305,7 @@ pub(super) enum AttemptRealmKeysBundleHealingError { // realm_id: VlobID, // ) -> Result { // loop { -// let outcome = ops.store.for_read(|store| async move { +// let outcome = ops.store.for_read(async |store| { // recover_realm_keys_from_previous_bundles(ops, realm_id).await // }).await??; diff --git a/libparsec/crates/client/src/certif/realm_rename.rs b/libparsec/crates/client/src/certif/realm_rename.rs index 2994ebfeb64..ee2a3940a62 100644 --- a/libparsec/crates/client/src/certif/realm_rename.rs +++ b/libparsec/crates/client/src/certif/realm_rename.rs @@ -195,7 +195,7 @@ pub(super) async fn ensure_realm_initial_rename( let has_initial_rename = ops .store - .for_read(|store| async move { + .for_read(async |store| { store .get_realm_last_name_certificate(UpTo::Current, realm_id) .await diff --git a/libparsec/crates/client/src/certif/realm_share.rs b/libparsec/crates/client/src/certif/realm_share.rs index 85f467133b8..5710b4201b0 100644 --- a/libparsec/crates/client/src/certif/realm_share.rs +++ b/libparsec/crates/client/src/certif/realm_share.rs @@ -240,7 +240,7 @@ async fn share_do_server_command( let (encrypted_keys_bundle_access, key_index) = ops .store .for_read({ - |store| async move { + async |store| { super::realm_keys_bundle::encrypt_realm_keys_bundle_access_for_user( ops, store, realm_id, recipient, ) diff --git a/libparsec/crates/client/src/certif/realms_needs.rs b/libparsec/crates/client/src/certif/realms_needs.rs index f50683ed51b..98503afb895 100644 --- a/libparsec/crates/client/src/certif/realms_needs.rs +++ b/libparsec/crates/client/src/certif/realms_needs.rs @@ -49,7 +49,7 @@ pub async fn get_realm_needs( realm_id: VlobID, ) -> Result { ops.store - .for_read(|store| async move { + .for_read(async |store| { // TODO: This implementation is not efficient, as it fetches all the roles // and users certificates. However this should be good enough for now, // and optimization requires a complex API changes in the storage. diff --git a/libparsec/crates/client/src/certif/shamir_recovery_delete.rs b/libparsec/crates/client/src/certif/shamir_recovery_delete.rs index a8227bf800b..4b9e29b70b5 100644 --- a/libparsec/crates/client/src/certif/shamir_recovery_delete.rs +++ b/libparsec/crates/client/src/certif/shamir_recovery_delete.rs @@ -47,7 +47,7 @@ pub(super) async fn delete_shamir_recovery( let last_shamir_recovery = ops .store .for_read({ - |store| async move { + async |store| { store .get_last_shamir_recovery_for_author(UpTo::Current, author_user_id) .await diff --git a/libparsec/crates/client/src/certif/shamir_recovery_list.rs b/libparsec/crates/client/src/certif/shamir_recovery_list.rs index de0a0de6692..4fff2d5c548 100644 --- a/libparsec/crates/client/src/certif/shamir_recovery_list.rs +++ b/libparsec/crates/client/src/certif/shamir_recovery_list.rs @@ -71,7 +71,7 @@ pub async fn get_self_shamir_recovery( ops: &CertificateOps, ) -> Result { ops.store - .for_read(|store| async move { + .for_read(async |store| { // 1. Retrieve the shamir recovery and it potential deletion let brief = match store @@ -205,7 +205,7 @@ pub async fn list_shamir_recoveries_for_others( ops: &CertificateOps, ) -> Result, CertifListShamirRecoveriesForOthersError> { ops.store - .for_read(|store| async move { + .for_read(async |store| { let mut per_user_last_shamir: HashMap< UserID, ( @@ -395,7 +395,7 @@ pub async fn get_shamir_recovery_share_data( ) -> Result { let needed_timestamps = PerTopicLastTimestamps::new_for_shamir(shamir_recovery_created_on); ops.store - .for_read_with_requirements(ops, &needed_timestamps, |store| async move { + .for_read_with_requirements(ops, &needed_timestamps, async |store| { // 1. Check that the corresponding shamir recovery has not been deleted diff --git a/libparsec/crates/client/src/certif/shamir_recovery_setup.rs b/libparsec/crates/client/src/certif/shamir_recovery_setup.rs index 7245ffb85d3..911b246ff8c 100644 --- a/libparsec/crates/client/src/certif/shamir_recovery_setup.rs +++ b/libparsec/crates/client/src/certif/shamir_recovery_setup.rs @@ -175,7 +175,7 @@ async fn check_against_local_certificates( let author_user_id = ops.device.user_id; ops.store .for_read({ - |store| async move { + async |store| { // 1. Shamir already exists ? match store diff --git a/libparsec/crates/client/src/certif/store.rs b/libparsec/crates/client/src/certif/store.rs index 4a52cd43804..4e200f665cd 100644 --- a/libparsec/crates/client/src/certif/store.rs +++ b/libparsec/crates/client/src/certif/store.rs @@ -15,6 +15,7 @@ use std::{ collections::HashMap, + ops::AsyncFnOnce, path::Path, sync::{Arc, Mutex}, }; @@ -199,13 +200,10 @@ impl CertificatesStore { /// Lock the store for writing purpose, this is an exclusive lock so no /// other read/write operation can occur. - pub async fn for_write( + pub async fn for_write( &self, - cb: impl FnOnce(&'static mut CertificatesStoreWriteGuard) -> Fut, - ) -> Result, CertifStoreError> - where - Fut: std::future::Future>, - { + cb: impl AsyncFnOnce(&mut CertificatesStoreWriteGuard<'_>) -> Result, + ) -> Result, CertifStoreError> { let _guard = self.lock.write().await; let mut maybe_storage = self.storage.lock().await; @@ -220,26 +218,7 @@ impl CertificatesStore { storage: updater, }; - unsafe fn pretend_static( - src: &mut CertificatesStoreWriteGuard<'_>, - ) -> &'static mut CertificatesStoreWriteGuard<'static> { - std::mem::transmute(src) - } - // SAFETY: It is not currently possible to express the fact the lifetime - // of a Future returned by a closure depends on the closure parameter if - // they are references. - // Here things are even worst because we have references coming from - // `for_write` body and from `cb` closure (so workarounds as boxed future - // don't work). - // However in practice all our references have a lifetime bound to the - // parent (i.e. `for_write`) or the grand-parent (i.e. - // `CertificateOps::add_certificates_batch`) which are going to poll this - // future directly, so the references' lifetimes *are* long enough. - // TODO: Remove this once async closure are available - let static_write_guard_mut_ref = unsafe { pretend_static(&mut write_guard) }; - - let fut = cb(static_write_guard_mut_ref); - let outcome = fut.await; + let outcome = cb(&mut write_guard).await; // The cache may have been updated during the write operations, and those new cache // entries might be for items that have been added by the current write operation. @@ -277,13 +256,10 @@ impl CertificatesStore { /// dropped when the user switch from/to OUTSIDER). /// /// Also note the lock is shared with other read operations. - pub async fn for_read( + pub async fn for_read( &self, - cb: impl FnOnce(&'static mut CertificatesStoreReadGuard) -> Fut, - ) -> Result, CertifStoreError> - where - Fut: std::future::Future>, - { + cb: impl AsyncFnOnce(&mut CertificatesStoreReadGuard) -> Result, + ) -> Result, CertifStoreError> { let _guard = self.lock.read().await; let mut maybe_storage = self.storage.lock().await; @@ -297,18 +273,7 @@ impl CertificatesStore { storage, }; - unsafe fn pretend_static( - src: &mut CertificatesStoreReadGuard<'_>, - ) -> &'static mut CertificatesStoreReadGuard<'static> { - std::mem::transmute(src) - } - // SAFETY: It is not currently possible to express the fact the lifetime - // of a Future returned by a closure depends on the closure parameter if - // they are references (see `for_write` code). - // TODO: Remove this once async closure are available - let static_read_guard_mut_ref = unsafe { pretend_static(&mut read_guard) }; - - let fut = cb(static_read_guard_mut_ref); + let fut = cb(&mut read_guard); let outcome = fut.await; Ok(outcome) @@ -319,15 +284,14 @@ impl CertificatesStore { /// /// This is typically useful when validation data received from the server (as /// the server provides us with the certificates requirements to do the validation). - pub async fn for_read_with_requirements( + pub async fn for_read_with_requirements( &self, ops: &CertificateOps, needed_timestamps: &PerTopicLastTimestamps, cb: C, ) -> Result, CertifForReadWithRequirementsError> where - C: FnOnce(&'static mut CertificatesStoreReadGuard) -> Fut, - Fut: std::future::Future>, + C: AsyncFnOnce(&mut CertificatesStoreReadGuard) -> Result, { enum ForReadOutcome { StoredTimestampOutdated(C), @@ -336,7 +300,7 @@ impl CertificatesStore { // Factorize the code in a closure to retry the operation after a server poll let try_with_requirements = |cb| { - self.for_read(|store: &mut CertificatesStoreReadGuard| async move { + self.for_read(async |store: &mut CertificatesStoreReadGuard| { // Make sure we have all the needed certificates let last_stored_timestamps = store @@ -370,7 +334,7 @@ impl CertificatesStore { }; // We were lacking some certificates, do a server poll and retry - self.for_write(|store| async move { + self.for_write(async |store| { super::poll::poll_server_for_new_certificates(ops, store, Some(needed_timestamps)) .await .map_err(|e| match e { diff --git a/libparsec/crates/client/src/certif/workspace_bootstrap.rs b/libparsec/crates/client/src/certif/workspace_bootstrap.rs index e703f3be5b9..38574beb136 100644 --- a/libparsec/crates/client/src/certif/workspace_bootstrap.rs +++ b/libparsec/crates/client/src/certif/workspace_bootstrap.rs @@ -63,7 +63,7 @@ pub(super) async fn bootstrap_workspace( let mut bootstrap_state = ops .store - .for_read(|store| async move { + .for_read(async |store| { // Only OWNER can do the bootstrap let current_role = store.get_self_user_realm_role(realm_id).await?; diff --git a/libparsec/crates/client/tests/unit/certif/store.rs b/libparsec/crates/client/tests/unit/certif/store.rs index 71937b19098..ffe491e0b50 100644 --- a/libparsec/crates/client/tests/unit/certif/store.rs +++ b/libparsec/crates/client/tests/unit/certif/store.rs @@ -20,8 +20,7 @@ async fn add_user_certificate(env: &TestbedEnv) { macro_rules! store_get_certif { ($store:ident) => {{ - let alice_user_id = alice_user_id; - $store.for_read(move |store| async move { + $store.for_read(async |store| { store .get_user_certificate(UpTo::Current, alice_user_id) .await @@ -39,7 +38,7 @@ async fn add_user_certificate(env: &TestbedEnv) { store .for_write({ let alice_certif = alice_certif.clone(); - |store| async move { + async |store| { store .add_next_common_certificate( CommonTopicArcCertificate::User(alice_certif), @@ -75,14 +74,13 @@ async fn add_device_certificate(env: &TestbedEnv) { let (alice_dev1_certif, alice_dev1_signed) = env.get_device_certificate("alice@dev1"); macro_rules! store_get_certif { - ($store:ident) => {{ - let alice_device_id = alice_device_id; - $store.for_read(move |store| async move { + ($store:ident) => { + $store.for_read(async |store| { store .get_device_certificate(UpTo::Current, alice_device_id) .await }) - }}; + }; } // Check that certificate is absent @@ -95,7 +93,7 @@ async fn add_device_certificate(env: &TestbedEnv) { store .for_write({ let alice_dev1_certif = alice_dev1_certif.clone(); - |store| async move { + async |store| { store .add_next_common_certificate( CommonTopicArcCertificate::Device(alice_dev1_certif), @@ -139,14 +137,13 @@ async fn add_user_update_certificate(env: &TestbedEnv) { let (alice_update_certif, alice_update_signed) = env.get_last_user_update_certificate("alice"); macro_rules! store_get_certif { - ($store:ident) => {{ - let alice_user_id = alice_user_id; - $store.for_read(move |store| async move { + ($store:ident) => { + $store.for_read(async |store| { store .get_last_user_update_certificate(UpTo::Current, alice_user_id) .await }) - }}; + }; } // Check that certificate is absent @@ -159,7 +156,7 @@ async fn add_user_update_certificate(env: &TestbedEnv) { store .for_write({ let alice_update_certif = alice_update_certif.clone(); - |store| async move { + async |store| { store .add_next_common_certificate( CommonTopicArcCertificate::UserUpdate(alice_update_certif), @@ -201,14 +198,13 @@ async fn add_revoked_user_certificate(env: &TestbedEnv) { let (bob_revoked_certif, bob_revoked_signed) = env.get_revoked_certificate("bob"); macro_rules! store_get_certif { - ($store:ident) => {{ - let bob_user_id = bob_user_id; - $store.for_read(move |store| async move { + ($store:ident) => { + $store.for_read(async |store| { store .get_revoked_user_certificate(UpTo::Current, bob_user_id) .await }) - }}; + }; } // Check that certificate is absent @@ -221,7 +217,7 @@ async fn add_revoked_user_certificate(env: &TestbedEnv) { store .for_write({ let bob_revoked_certif = bob_revoked_certif.clone(); - |store| async move { + async |store| { store .add_next_common_certificate( CommonTopicArcCertificate::RevokedUser(bob_revoked_certif), @@ -261,11 +257,9 @@ async fn add_realm_role_certificate(env: &TestbedEnv) { env.get_last_realm_role_certificate("alice", realm_id); macro_rules! store_get_certif { - ($store:ident) => {{ - $store.for_read( - |store| async move { store.get_realm_roles(UpTo::Current, realm_id).await }, - ) - }}; + ($store:ident) => { + $store.for_read(async |store| store.get_realm_roles(UpTo::Current, realm_id).await) + }; } // Check that certificate is absent @@ -278,7 +272,7 @@ async fn add_realm_role_certificate(env: &TestbedEnv) { store .for_write({ let alice_realm_role_certif = alice_realm_role_certif.clone(); - |store| async move { + async |store| { store .add_next_realm_x_certificate( RealmTopicArcCertificate::RealmRole(alice_realm_role_certif), @@ -329,7 +323,7 @@ async fn get_realm_current_users_roles(env: &TestbedEnv) { let store = certificates_store_factory(env, &alice).await; let last_user_roles = store - .for_read(|store| async move { + .for_read(async |store| { store .get_realm_current_users_roles(UpTo::Current, realm_id) .await @@ -370,8 +364,7 @@ async fn add_sequester_authority_certificate(env: &TestbedEnv) { macro_rules! store_get_certif { ($store:ident) => { - $store - .for_read(|store| async move { store.get_sequester_authority_certificate().await }) + $store.for_read(async |store| store.get_sequester_authority_certificate().await) }; } @@ -385,7 +378,7 @@ async fn add_sequester_authority_certificate(env: &TestbedEnv) { store .for_write({ let authority_certif = authority_certif.clone(); - |store| async move { + async |store| { store .add_next_sequester_certificate( SequesterTopicArcCertificate::SequesterAuthority(authority_certif), @@ -432,7 +425,7 @@ async fn add_sequester_service_certificate(env: &TestbedEnv) { macro_rules! store_get_service_certif { ($store:ident) => { - $store.for_read(|store| async move { + $store.for_read(async |store| { store .get_sequester_service_certificates(UpTo::Current) .await @@ -446,7 +439,7 @@ async fn add_sequester_service_certificate(env: &TestbedEnv) { macro_rules! ensure_authority_certif_in_store_hasnt_changed { ($store:ident) => { let got = $store - .for_read(|store| async move { store.get_sequester_authority_certificate().await }) + .for_read(async |store| store.get_sequester_authority_certificate().await) .await .unwrap() .unwrap(); @@ -465,7 +458,7 @@ async fn add_sequester_service_certificate(env: &TestbedEnv) { store .for_write({ let service_certif = service_certif.clone(); - |store| async move { + async |store| { store .add_next_sequester_certificate( SequesterTopicArcCertificate::SequesterService(service_certif), @@ -503,7 +496,7 @@ async fn get_last_timestamps_common(env: &TestbedEnv) { macro_rules! store_get_last_timestamps { ($store:ident) => { - $store.for_read(|store| async move { store.get_last_timestamps().await }) + $store.for_read(async |store| store.get_last_timestamps().await) }; } @@ -521,7 +514,7 @@ async fn get_last_timestamps_common(env: &TestbedEnv) { store .for_write({ let certif = certif.clone(); - |store| async move { + async |store| { store .add_next_common_certificate(CommonTopicArcCertificate::User(certif), &signed) .await @@ -577,7 +570,7 @@ async fn get_last_timestamps_sequester(env: &TestbedEnv) { macro_rules! store_get_last_timestamps { ($store:ident) => { - $store.for_read(|store| async move { store.get_last_timestamps().await }) + $store.for_read(async |store| store.get_last_timestamps().await) }; } @@ -595,7 +588,7 @@ async fn get_last_timestamps_sequester(env: &TestbedEnv) { store .for_write({ let certif = certif.clone(); - |store| async move { + async |store| { store .add_next_sequester_certificate( SequesterTopicArcCertificate::SequesterAuthority(certif), @@ -651,7 +644,7 @@ async fn get_last_timestamps_realm(env: &TestbedEnv) { macro_rules! store_get_last_timestamps { ($store:ident) => { - $store.for_read(|store| async move { store.get_last_timestamps().await }) + $store.for_read(async |store| store.get_last_timestamps().await) }; } @@ -669,7 +662,7 @@ async fn get_last_timestamps_realm(env: &TestbedEnv) { store .for_write({ let certif = certif.clone(); - |store| async move { + async |store| { store .add_next_realm_x_certificate( RealmTopicArcCertificate::RealmRole(certif), @@ -724,7 +717,7 @@ async fn get_self_user_realm_role(env: &TestbedEnv) { macro_rules! get_self_user_realm_role { ($store:ident, $realm_id:expr) => { - $store.for_read(|store| async move { store.get_self_user_realm_role($realm_id).await }) + $store.for_read(async |store| store.get_self_user_realm_role($realm_id).await) }; } @@ -752,7 +745,7 @@ async fn get_self_user_realm_role(env: &TestbedEnv) { store .for_write({ let certif = certif.clone(); - |store| async move { + async |store| { store .add_next_realm_x_certificate( RealmTopicArcCertificate::RealmRole(certif), @@ -808,7 +801,7 @@ async fn get_realm_bootstrap_state(env: &TestbedEnv) { macro_rules! get_realm_bootstrap_state { ($store:ident, $realm_id:expr) => { - $store.for_read(|store| async move { store.get_realm_bootstrap_state($realm_id).await }) + $store.for_read(async |store| store.get_realm_bootstrap_state($realm_id).await) }; } @@ -859,7 +852,7 @@ async fn get_realm_bootstrap_state(env: &TestbedEnv) { }; store .for_write({ - |store| async move { + async |store| { store .add_next_realm_x_certificate( RealmTopicArcCertificate::RealmKeyRotation(certif), @@ -926,7 +919,7 @@ async fn get_last_timestamps_shamir(env: &TestbedEnv) { macro_rules! store_get_last_timestamps { ($store:ident) => { - $store.for_read(|store| async move { store.get_last_timestamps().await }) + $store.for_read(async |store| store.get_last_timestamps().await) }; } @@ -944,7 +937,7 @@ async fn get_last_timestamps_shamir(env: &TestbedEnv) { store .for_write({ let certif = certif.clone(); - |store| async move { + async |store| { store .add_next_shamir_recovery_certificate( ShamirRecoveryTopicArcCertificate::ShamirRecoveryBrief(certif),