Skip to main content

interstice_abi/host_calls/
mod.rs

1mod 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}