canic_core/api/placement/
directory.rs1use crate::{
2 cdk::types::Principal,
3 dto::{
4 error::Error,
5 placement::directory::{
6 DirectoryEntryStatusResponse, DirectoryRecoveryResponse, DirectoryRegistryResponse,
7 },
8 },
9 workflow::placement::directory::{DirectoryWorkflow, query::DirectoryQuery},
10};
11
12pub struct DirectoryApi;
17
18impl DirectoryApi {
19 #[must_use]
20 pub fn lookup_key(pool: &str, key_value: &str) -> Option<Principal> {
21 DirectoryQuery::lookup_key(pool, key_value)
22 }
23
24 #[must_use]
25 pub fn lookup_entry(pool: &str, key_value: &str) -> Option<DirectoryEntryStatusResponse> {
26 DirectoryQuery::lookup_entry(pool, key_value)
27 }
28
29 pub async fn recover_entry(
30 pool: &str,
31 key_value: impl AsRef<str>,
32 ) -> Result<DirectoryRecoveryResponse, Error> {
33 DirectoryWorkflow::recover_entry(pool, key_value.as_ref())
34 .await
35 .map_err(Error::from)
36 }
37
38 pub async fn resolve_or_create(
39 pool: &str,
40 key_value: impl AsRef<str>,
41 ) -> Result<DirectoryEntryStatusResponse, Error> {
42 DirectoryWorkflow::resolve_or_create(pool, key_value.as_ref())
43 .await
44 .map_err(Error::from)
45 }
46
47 pub fn bind_instance(
48 pool: &str,
49 key_value: impl AsRef<str>,
50 pid: Principal,
51 ) -> Result<(), Error> {
52 DirectoryWorkflow::bind_instance(pool, key_value.as_ref(), pid).map_err(Error::from)
53 }
54
55 #[must_use]
56 pub fn registry() -> DirectoryRegistryResponse {
57 DirectoryQuery::registry()
58 }
59}