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