coil_wasm/host_api/
mod.rs1mod 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}