// Copyright (c) 2022-2024 Niko Bonnieure, Par le Peuple, NextGraph.org developers // All rights reserved. // Licensed under the Apache License, Version 2.0 // // or the MIT license , // at your option. All files in the project carrying such // notice may not be copied, modified, or distributed except // according to those terms. //! RocksDb Backend for UserStorage trait use crate::types::*; use crate::user_storage::repo::RepoStorage; use crate::user_storage::*; use either::Either::{Left, Right}; use ng_repo::block_storage::BlockStorage; use ng_repo::repo::{BranchInfo, Repo}; use ng_repo::store::Store; use ng_repo::{errors::StorageError, types::*}; use ng_storage_rocksdb::kcv_storage::RocksDbKCVStorage; use std::path::PathBuf; use std::sync::{Arc, RwLock}; use std::{ cmp::{max, min}, collections::HashMap, mem::size_of_val, }; pub(crate) struct RocksDbUserStorage { user_storage: RocksDbKCVStorage, } impl RocksDbUserStorage { pub fn open(path: &PathBuf, master_key: [u8; 32]) -> Result { Ok(RocksDbUserStorage { user_storage: RocksDbKCVStorage::open(path, master_key)?, }) } } impl UserStorage for RocksDbUserStorage { // fn repo_id_to_store_overlay(&self, id: &RepoId) -> Result { // unimplemented!(); // } fn get_all_store_and_repo_ids(&self) -> Result>, StorageError> { RepoStorage::get_all_store_and_repo_ids(&self.user_storage) } fn load_store( &self, repo_store: &StoreRepo, block_storage: Arc>, ) -> Result { RepoStorage::load( repo_store.repo_id(), Right(block_storage), &self.user_storage, ) } fn load_repo(&self, repo_id: &RepoId, store: Arc) -> Result { RepoStorage::load(repo_id, Left(store), &self.user_storage) } fn save_repo(&self, repo: &Repo) -> Result<(), StorageError> { RepoStorage::create_from_repo(repo, &self.user_storage)?; Ok(()) } fn add_branch(&self, repo_id: &RepoId, branch_info: &BranchInfo) -> Result<(), StorageError> { RepoStorage::add_branch_from_info(repo_id, branch_info, &self.user_storage) } fn update_signer_cap(&self, signer_cap: &SignerCap) -> Result<(), StorageError> { RepoStorage::update_signer_cap(signer_cap, &self.user_storage) } }