rspack_core 0.101.10

rspack core
Documentation
use std::sync::Arc;

use rspack_error::Result;
use rspack_paths::Utf8PathBuf;
use rustc_hash::FxHashMap;

use super::{DatabaseFamily, DatabaseWrite};

pub type DatabaseValue = Arc<[u8]>;

#[derive(Debug, Default)]
pub struct Database {
  families: [FxHashMap<Vec<u8>, DatabaseValue>; DatabaseFamily::COUNT],
}

impl Database {
  pub fn open(_base_path: Utf8PathBuf, _path: Utf8PathBuf, _readonly: bool) -> Result<Self> {
    Ok(Self::default())
  }

  pub fn get(&self, family: DatabaseFamily, key: &[u8]) -> Result<Option<DatabaseValue>> {
    Ok(self.families[family.index()].get(key).cloned())
  }

  pub fn write_batch<'a>(
    &mut self,
    writes: impl IntoIterator<Item = DatabaseWrite<'a>>,
  ) -> Result<()> {
    for write in writes {
      self.families[write.family.index()].insert(write.key.to_vec(), Arc::from(write.value));
    }
    Ok(())
  }

  pub fn reset(&mut self) -> Result<()> {
    for family in &mut self.families {
      family.clear();
    }
    Ok(())
  }

  pub fn cleanup_stale(&self) {}

  pub fn shutdown(&mut self) -> Result<()> {
    self.reset()
  }
}