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