1use std::sync::Arc;
2
3use futures_util::future::BoxFuture;
4use serde_json::Value;
5
6use crate::{
7 channels::{ChannelReader, ChannelWriter, StreamChannelRef},
8 error::Error,
9 protocol::{RegisterFunctionMessage, RegisterTriggerTypeMessage},
10 triggers::TriggerHandler,
11};
12
13pub type RemoteFunctionHandler =
19 Arc<dyn Fn(Value) -> BoxFuture<'static, Result<Value, Error>> + Send + Sync>;
20
21pub type RemoteFunctionHandlerWithMetadata =
28 Arc<dyn Fn(Value, Option<Value>) -> BoxFuture<'static, Result<Value, Error>> + Send + Sync>;
29
30#[derive(Clone)]
31pub struct RemoteFunctionData {
32 pub message: RegisterFunctionMessage,
33 pub handler: Option<RemoteFunctionHandlerWithMetadata>,
34}
35
36#[derive(Clone)]
37pub struct RemoteTriggerTypeData {
38 pub message: RegisterTriggerTypeMessage,
39 pub handler: Arc<dyn TriggerHandler>,
40}
41
42pub type StreamRequest<T = Value> = iii_helpers::http::HttpRequest<T>;
46
47pub type StreamResponse<T = Value> = iii_helpers::http::HttpResponse<T>;
51
52pub struct Channel {
54 pub writer: ChannelWriter,
55 pub reader: ChannelReader,
56 pub writer_ref: StreamChannelRef,
57 pub reader_ref: StreamChannelRef,
58}
59
60#[cfg(test)]
61mod tests {
62 #[test]
63 fn http_request_defaults_when_missing_fields() {
64 let request: iii_helpers::http::HttpRequest = serde_json::from_str("{}").unwrap();
65
66 assert!(request.query_params.is_empty());
67 assert!(request.path_params.is_empty());
68 assert!(request.headers.is_empty());
69 assert_eq!(request.path, "");
70 assert_eq!(request.method, "");
71 assert!(request.body.is_null());
72 }
73}