calimero_context_primitives/client/
external.rs1use core::ops::Deref;
2
3use calimero_context_config::client::AnyTransport;
4use calimero_primitives::context::{ContextConfigParams, ContextId};
5use calimero_store::key;
6
7use super::ContextClient;
8
9mod config;
10mod proxy;
11
12impl ContextClient {
13 pub fn context_config(
14 &self,
15 context_id: &ContextId,
16 ) -> eyre::Result<Option<ContextConfigParams<'static>>> {
17 let handle = self.datastore.handle();
18
19 let key = key::ContextConfig::new(*context_id);
20
21 let Some(config) = handle.get(&key)? else {
22 return Ok(None);
23 };
24
25 let context_config = ContextConfigParams {
26 protocol: config.protocol.into_string().into(),
27 network_id: config.network.into_string().into(),
28 contract_id: config.contract.into_string().into(),
29 proxy_contract: config.proxy_contract.into_string().into(),
30 application_revision: config.application_revision,
31 members_revision: config.members_revision,
32 };
33
34 Ok(Some(context_config))
35 }
36}
37
38#[derive(Debug)]
39pub struct ExternalClient<'a> {
40 context_id: ContextId,
41 client: &'a ContextClient,
42 config: &'a ContextConfigParams<'a>,
43}
44
45impl Deref for ExternalClient<'_> {
46 type Target = calimero_context_config::client::Client<AnyTransport>;
47
48 fn deref(&self) -> &Self::Target {
49 &self.client.external_client
50 }
51}
52
53impl ExternalClient<'_> {
54 const fn context_client(&self) -> &ContextClient {
55 self.client
56 }
57}
58
59impl ContextClient {
60 pub const fn external_client<'a>(
61 &'a self,
62 context_id: &ContextId,
63 config: &'a ContextConfigParams<'a>,
64 ) -> eyre::Result<ExternalClient<'a>> {
65 Ok(ExternalClient {
66 context_id: *context_id,
67 client: self,
68 config,
69 })
70 }
71}