Skip to main content

coil_wasm/host_api/
mod.rs

1mod data_contract;
2
3pub use data_contract::*;
4
5use crate::grants::{HostCapabilityGrant, MetadataGrant, StorageClassGrant};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum HostServiceDomain {
9    Auth,
10    Data,
11    Storage,
12    Render,
13    CacheIntent,
14    Network,
15    Secrets,
16    Jobs,
17    Metadata,
18}
19
20#[derive(Debug, Clone, PartialEq, Eq)]
21pub enum AuthServiceRequest {
22    Check,
23    List,
24    Lookup,
25    TupleWrite,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq)]
29pub enum DataServiceRequest {
30    Read { contract: ModuleDataContract },
31    Write { contract: ModuleDataContract },
32}
33
34#[derive(Debug, Clone, PartialEq, Eq)]
35pub enum StorageServiceRequest {
36    Read {
37        class: StorageClassGrant,
38    },
39    Write {
40        class: StorageClassGrant,
41        bytes: u64,
42    },
43}
44
45#[derive(Debug, Clone, PartialEq, Eq)]
46pub enum RenderServiceRequest {
47    Fragment { slot: String },
48}
49
50#[derive(Debug, Clone, PartialEq, Eq)]
51pub enum CacheIntentServiceRequest {
52    HintWrite,
53}
54
55#[derive(Debug, Clone, PartialEq, Eq)]
56pub enum HostServiceRequest {
57    Auth(AuthServiceRequest),
58    Data(DataServiceRequest),
59    Storage(StorageServiceRequest),
60    Render(RenderServiceRequest),
61    CacheIntent(CacheIntentServiceRequest),
62    OutboundHttp {
63        integration: String,
64        response_bytes: u64,
65    },
66    SecretRead {
67        secret: String,
68    },
69    EnqueueJob {
70        queue: String,
71    },
72    MetadataWrite {
73        kind: MetadataGrant,
74    },
75}
76
77impl HostServiceRequest {
78    pub fn domain(&self) -> HostServiceDomain {
79        match self {
80            Self::Auth(_) => HostServiceDomain::Auth,
81            Self::Data(_) => HostServiceDomain::Data,
82            Self::Storage(_) => HostServiceDomain::Storage,
83            Self::Render(_) => HostServiceDomain::Render,
84            Self::CacheIntent(_) => HostServiceDomain::CacheIntent,
85            Self::OutboundHttp { .. } => HostServiceDomain::Network,
86            Self::SecretRead { .. } => HostServiceDomain::Secrets,
87            Self::EnqueueJob { .. } => HostServiceDomain::Jobs,
88            Self::MetadataWrite { .. } => HostServiceDomain::Metadata,
89        }
90    }
91}
92
93#[derive(Debug, Clone, PartialEq, Eq)]
94pub struct HostServiceCall {
95    pub grant: HostCapabilityGrant,
96    pub request: HostServiceRequest,
97}
98
99impl HostServiceCall {
100    pub fn new(grant: HostCapabilityGrant, request: HostServiceRequest) -> Self {
101        Self { grant, request }
102    }
103
104    pub fn domain(&self) -> HostServiceDomain {
105        self.request.domain()
106    }
107}