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