1use uni_common::{Result, UniError};
7
8use super::UniInner;
9
10pub struct Compaction<'a> {
14 pub(crate) inner: &'a UniInner,
15}
16
17impl Compaction<'_> {
18 pub async fn compact(&self, name: &str) -> Result<uni_store::compaction::CompactionStats> {
23 let schema = self.inner.schema.schema();
24 if schema.labels.contains_key(name) {
25 self.inner
26 .storage
27 .compact_label(name)
28 .await
29 .map_err(UniError::Internal)
30 } else if schema.edge_types.contains_key(name) {
31 self.inner
32 .storage
33 .compact_edge_type(name)
34 .await
35 .map_err(UniError::Internal)
36 } else {
37 Err(UniError::Internal(anyhow::anyhow!(
38 "No label or edge type named '{}'",
39 name
40 )))
41 }
42 }
43
44 pub async fn wait(&self) -> Result<()> {
46 self.inner
47 .storage
48 .wait_for_compaction()
49 .await
50 .map_err(UniError::Internal)
51 }
52}