canic_core/api/placement/
sharding.rs1use crate::{
2 cdk::types::Principal,
3 dto::{
4 error::Error,
5 placement::sharding::{
6 ShardingPlanStateResponse, ShardingRegistryResponse, ShardingTenantsResponse,
7 },
8 },
9 workflow::placement::sharding::{ShardingWorkflow, query::ShardingQuery},
10};
11
12pub struct ShardingApi;
28
29impl ShardingApi {
30 #[must_use]
34 pub fn lookup_tenant(pool: &str, tenant: &str) -> Option<Principal> {
35 ShardingQuery::lookup_tenant(pool, tenant)
36 }
37
38 pub fn require_tenant_shard(pool: &str, tenant: impl AsRef<str>) -> Result<Principal, Error> {
40 ShardingQuery::require_tenant_shard(pool, tenant.as_ref()).map_err(Error::from)
41 }
42
43 #[must_use]
45 pub fn registry() -> ShardingRegistryResponse {
46 ShardingQuery::registry()
47 }
48
49 #[must_use]
51 pub fn tenants(pool: &str, shard: Principal) -> ShardingTenantsResponse {
52 ShardingQuery::tenants(pool, shard)
53 }
54
55 pub async fn assign_to_pool(pool: &str, tenant: impl AsRef<str>) -> Result<Principal, Error> {
61 ShardingWorkflow::assign_to_pool(pool, tenant)
62 .await
63 .map_err(Error::from)
64 }
65
66 pub fn plan_assign_to_pool(
68 pool: &str,
69 tenant: impl AsRef<str>,
70 ) -> Result<ShardingPlanStateResponse, Error> {
71 ShardingWorkflow::plan_assign_to_pool(pool, tenant).map_err(Error::from)
72 }
73}