Skip to main content

canic_core/api/placement/
directory.rs

1use 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
12///
13/// DirectoryApi
14///
15
16pub 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}