aboutsummaryrefslogtreecommitdiff
path: root/src/model/bucket_helper.rs
blob: e0720b4eaef9ea73ae41d2a74d9a9f3c8b87d31d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use garage_util::data::*;
use garage_util::error::*;

use garage_table::util::EmptyKey;

use crate::bucket_table::Bucket;
use crate::garage::Garage;

pub struct BucketHelper<'a>(pub(crate) &'a Garage);

#[allow(clippy::ptr_arg)]
impl<'a> BucketHelper<'a> {
	pub async fn resolve_global_bucket_name(
		&self,
		bucket_name: &String,
	) -> Result<Option<Uuid>, Error> {
		Ok(self
			.0
			.bucket_alias_table
			.get(&EmptyKey, bucket_name)
			.await?
			.map(|x| x.state.get().as_option().map(|x| x.bucket_id))
			.flatten())
	}

	#[allow(clippy::ptr_arg)]
	pub async fn get_existing_bucket(&self, bucket_id: Uuid) -> Result<Bucket, Error> {
		self.0
			.bucket_table
			.get(&bucket_id, &EmptyKey)
			.await?
			.filter(|b| !b.is_deleted())
			.map(Ok)
			.unwrap_or_else(|| {
				Err(Error::BadRpc(format!(
					"Bucket {:?} does not exist",
					bucket_id
				)))
			})
	}
}