interstice_abi/host_calls/
mod.rs1mod audio;
2mod file;
3mod gpu;
4mod input;
5mod module;
6
7pub use audio::*;
8pub use file::*;
9pub use gpu::*;
10pub use input::*;
11pub use module::*;
12
13use crate::{IndexKey, IntersticeValue, Row};
14use serde::{Deserialize, Serialize};
15
16#[derive(Debug, Deserialize, Serialize)]
17pub enum HostCall {
18 CallReducer(CallReducerRequest),
19 Schedule(ScheduleRequest),
20 CallQuery(CallQueryRequest),
21 TableScan(TableScanRequest),
22 TableGetByPrimaryKey(TableGetByPrimaryKeyRequest),
23 TableIndexScan(TableIndexScanRequest),
24 Gpu(GpuCall),
25 Audio(AudioCall),
26 File(FileCall),
27 Module(ModuleCall),
28 CurrentNodeId,
29}
30
31#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
32pub enum NodeSelection {
33 Current,
34 Other(String),
35}
36
37#[derive(Debug, Serialize, Deserialize)]
38pub enum ModuleSelection {
39 Current,
40 Other(String),
41}
42
43#[derive(Debug, Serialize, Deserialize)]
44pub struct ScheduleRequest {
45 pub reducer_name: String,
46 pub delay_ms: u64,
47}
48
49#[derive(Debug, Serialize, Deserialize)]
50pub enum ScheduleResponse {
51 Ok,
52 Err(String),
53}
54
55#[derive(Debug, Serialize, Deserialize)]
56pub struct CallReducerRequest {
57 pub node_selection: NodeSelection,
58 pub module_selection: ModuleSelection,
59 pub reducer_name: String,
60 pub input: IntersticeValue,
61}
62
63#[derive(Debug, Serialize, Deserialize)]
64pub enum CallReducerResponse {
65 Ok,
66 Err(String),
67}
68
69#[derive(Debug, Serialize, Deserialize)]
70pub struct CallQueryRequest {
71 pub node_selection: NodeSelection,
72 pub module_selection: ModuleSelection,
73 pub query_name: String,
74 pub input: IntersticeValue,
75}
76
77#[derive(Debug, Serialize, Deserialize)]
78pub enum CallQueryResponse {
79 Ok(IntersticeValue),
80 Err(String),
81}
82
83#[derive(Debug, Serialize, Deserialize)]
84pub struct DeterministicRandomRequest {}
85
86#[derive(Debug, Serialize, Deserialize)]
87pub enum DeterministicRandomResponse {
88 Ok(u64),
89 Err(String),
90}
91
92#[derive(Debug, Serialize, Deserialize)]
93pub struct TimeRequest {}
94
95#[derive(Debug, Serialize, Deserialize)]
96pub enum TimeResponse {
97 Ok { unix_ms: u64 },
98 Err(String),
99}
100
101#[derive(Debug, Serialize, Deserialize)]
102pub struct LogRequest {
103 pub message: String,
104}
105
106#[derive(Debug, Deserialize, Serialize)]
107pub struct InsertRowRequest {
108 pub table_name: String,
109 pub row: Row,
110}
111
112#[derive(Debug, Deserialize, Serialize)]
117pub enum InsertRowResponse {
118 Ok(Option<Row>),
119 Err(String),
120}
121
122#[derive(Debug, Deserialize, Serialize)]
123pub struct UpdateRowRequest {
124 pub table_name: String,
125 pub row: Row,
126}
127
128#[derive(Debug, Deserialize, Serialize)]
129pub enum UpdateRowResponse {
130 Ok,
131 Err(String),
132}
133
134#[derive(Debug, Deserialize, Serialize)]
135pub struct DeleteRowRequest {
136 pub table_name: String,
137 pub primary_key: IndexKey,
138}
139
140#[derive(Debug, Deserialize, Serialize)]
141pub enum DeleteRowResponse {
142 Ok,
143 Err(String),
144}
145
146#[derive(Debug, Deserialize, Serialize)]
147pub struct ClearTableRequest {
148 pub module_selection: ModuleSelection,
149 pub table_name: String,
150}
151
152#[derive(Debug, Deserialize, Serialize)]
153pub enum ClearTableResponse {
154 Ok,
155 Err(String),
156}
157
158#[derive(Debug, Deserialize, Serialize)]
159pub struct TableScanRequest {
160 pub module_selection: ModuleSelection,
161 pub table_name: String,
162}
163
164#[derive(Debug, Deserialize, Serialize)]
165pub enum TableScanResponse {
166 Ok { rows: Vec<Row> },
167 Err(String),
168}
169
170#[derive(Debug, Deserialize, Serialize)]
171pub struct TableGetByPrimaryKeyRequest {
172 pub module_selection: ModuleSelection,
173 pub table_name: String,
174 pub primary_key: IndexKey,
175}
176
177#[derive(Debug, Deserialize, Serialize)]
178pub enum TableGetByPrimaryKeyResponse {
179 Ok(Option<Row>),
180 Err(String),
181}
182
183#[derive(Debug, Deserialize, Serialize)]
184pub enum IndexQuery {
185 Eq(IndexKey),
186 Lt(IndexKey),
187 Lte(IndexKey),
188 Gt(IndexKey),
189 Gte(IndexKey),
190 Range {
191 min: IndexKey,
192 max: IndexKey,
193 include_min: bool,
194 include_max: bool,
195 },
196}
197
198#[derive(Debug, Deserialize, Serialize)]
199pub struct TableIndexScanRequest {
200 pub module_selection: ModuleSelection,
201 pub table_name: String,
202 pub field_name: String,
203 pub query: IndexQuery,
204}
205
206#[derive(Debug, Deserialize, Serialize)]
207pub enum TableIndexScanResponse {
208 Ok { rows: Vec<Row> },
209 Err(String),
210}
211
212pub fn get_reducer_wrapper_name(reducer_name: &str) -> String {
213 format!("__interstice_reducer_wrapper_{}", reducer_name)
214}
215
216pub fn get_query_wrapper_name(query_name: &str) -> String {
217 format!("__interstice_query_wrapper_{}", query_name)
218}