use crate::{
cdk::types::Principal,
dto::{
error::Error,
placement::sharding::{
ShardingPartitionKeysResponse, ShardingPlanStateResponse, ShardingRegistryResponse,
},
},
workflow::placement::sharding::{ShardingWorkflow, query::ShardingQuery},
};
pub struct ShardingApi;
impl ShardingApi {
#[must_use]
pub fn lookup_partition_key(pool: &str, partition_key: &str) -> Option<Principal> {
ShardingQuery::lookup_partition_key(pool, partition_key)
}
pub fn resolve_shard_for_key(
pool: &str,
partition_key: impl AsRef<str>,
) -> Result<Principal, Error> {
ShardingQuery::resolve_shard_for_key(pool, partition_key.as_ref()).map_err(Error::from)
}
#[must_use]
pub fn registry() -> ShardingRegistryResponse {
ShardingQuery::registry()
}
#[must_use]
pub fn partition_keys(pool: &str, shard: Principal) -> ShardingPartitionKeysResponse {
ShardingQuery::partition_keys(pool, shard)
}
pub async fn assign_to_pool(
pool: &str,
partition_key: impl AsRef<str>,
) -> Result<Principal, Error> {
ShardingWorkflow::assign_to_pool(pool, partition_key)
.await
.map_err(Error::from)
}
pub fn plan_assign_to_pool(
pool: &str,
partition_key: impl AsRef<str>,
) -> Result<ShardingPlanStateResponse, Error> {
ShardingWorkflow::plan_assign_to_pool(pool, partition_key).map_err(Error::from)
}
}