Skip to main content

bitwarden_pm/
migrations.rs

1//! Manages repository migrations for the Bitwarden SDK.
2
3use bitwarden_core::key_management::UserKeyState;
4use bitwarden_state::{
5    SettingItem,
6    repository::{RepositoryItem, RepositoryMigrationStep, RepositoryMigrations},
7};
8use bitwarden_vault::{Cipher, Folder};
9
10/// Returns a list of all SDK-managed repository migrations.
11pub fn get_sdk_managed_migrations() -> RepositoryMigrations {
12    use RepositoryMigrationStep::*;
13    RepositoryMigrations::new(vec![
14        // Add any new migrations here. Note that order matters, and that removing a repository
15        // requires a separate migration step using `Remove(...)`.
16        Add(Cipher::data()),
17        Add(Folder::data()),
18        Add(UserKeyState::data()),
19        Add(SettingItem::data()),
20    ])
21}
22
23/// Macro to create the client managed repositories for the SDK.
24/// To add a new repository, add it to the list in the macro invocation.
25/// This is meant to be used by the final application crates (e.g., bitwarden-uniffi,
26/// bitwarden-wasm-internal, bw).
27#[macro_export]
28macro_rules! create_client_managed_repositories {
29    ($container_name:ident, $macro:ident) => {
30        $macro! {
31            $container_name;
32            // List any SDK-managed repositories here. The format is:
33            // <fully qualified path to the item>, <item type idenfier>, <field name>, <name of the repository implementation>
34            ::bitwarden_vault::Cipher, Cipher, cipher, CipherRepository;
35            ::bitwarden_vault::Folder, Folder, folder, FolderRepository;
36            ::bitwarden_core::key_management::UserKeyState, UserKeyState, user_key_state, UserKeyStateRepository;
37            ::bitwarden_core::key_management::LocalUserDataKeyState, LocalUserDataKeyState, local_user_data_key_state, LocalUserDataKeyStateRepository;
38            ::bitwarden_core::key_management::EphemeralPinEnvelopeState, EphemeralPinEnvelopeState, ephemeral_pin_envelope_state, EphemeralPinEnvelopeStateRepository;
39        }
40    };
41}