canic_core/workflow/placement/sharding/
query.rs1use crate::{
2 dto::placement::sharding::{
3 ShardingRegistryEntryView, ShardingRegistryView, ShardingTenantsView,
4 },
5 ops::storage::placement::sharding::ShardingRegistryOps,
6 workflow::{placement::sharding::mapper::ShardingMapper, prelude::*},
7};
8
9pub struct ShardingQuery;
15
16impl ShardingQuery {
17 #[must_use]
19 pub fn lookup_tenant(pool: &str, tenant: &str) -> Option<Principal> {
20 ShardingRegistryOps::tenant_shard(pool, tenant)
21 }
22
23 #[must_use]
25 pub fn registry_view() -> ShardingRegistryView {
26 let data = ShardingRegistryOps::export();
27
28 let view = data
29 .entries
30 .into_iter()
31 .map(|(pid, entry)| ShardingRegistryEntryView {
32 pid,
33 entry: ShardingMapper::shard_entry_to_view(&entry),
34 })
35 .collect();
36
37 ShardingRegistryView(view)
38 }
39
40 #[must_use]
42 pub fn tenants_view(pool: &str, shard: Principal) -> ShardingTenantsView {
43 let tenants = ShardingRegistryOps::tenants_in_shard(pool, shard);
44
45 ShardingTenantsView(tenants)
46 }
47}