1pub use calcite_proc_macros::*;
9pub use futures;
10pub use deno_core;
11
12pub trait FromZeroCopyBuf<'a> {
13 fn from_zero_copy_buf(buff: &'a deno_core::plugin_api::ZeroCopyBuf) -> Self;
14}
15
16pub struct ArrayBuffer<'a, T>(&'a mut [T]);
18
19impl<'a, T> ArrayBuffer<'a, T> {
20 pub fn as_mut_slice(&mut self) -> &mut [T] {
22 self.0
23 }
24 pub fn as_slice(&self) -> &[T] {
26 self.0
27 }
28}
29
30impl<'a, T> FromZeroCopyBuf<'a> for ArrayBuffer<'a, T> {
31 fn from_zero_copy_buf(buff: &deno_core::plugin_api::ZeroCopyBuf) -> Self {
32 unsafe {
33 Self(std::slice::from_raw_parts_mut(
34 buff[..].as_ptr() as *mut T,
35 buff.len() / std::mem::size_of::<T>(),
36 ))
37 }
38 }
39}
40
41impl<'a, T: serde::Deserialize<'a>> FromZeroCopyBuf<'a> for T {
42 fn from_zero_copy_buf(buff: &'a deno_core::plugin_api::ZeroCopyBuf) -> Self {
43 serde_json::from_slice(buff).expect("Wrong argument type")
44 }
45}
46
47pub fn to_argument_type<'a, T: FromZeroCopyBuf<'a>>(buff: &'a deno_core::plugin_api::ZeroCopyBuf) -> T {
48 T::from_zero_copy_buf(buff)
49}
50
51#[macro_use]
52extern crate serde_derive;
53
54#[derive(Serialize)]
55#[serde(rename_all = "camelCase")]
56pub struct AsyncResult<T, E> {
57 pub command_id: usize,
58 pub result: Result<T, E>,
59}
60
61pub struct ReturnBuffer(Box<[u8]>);
63
64impl<T: serde::Serialize> From<T> for ReturnBuffer {
65 fn from(t: T) -> Self {
66 Self(serde_json::to_vec(&t).unwrap().into_boxed_slice())
67 }
68}
69
70impl ReturnBuffer {
71 pub fn inner(self) -> Box<[u8]> {
72 self.0
73 }
74 pub fn from_bytes(bytes: Vec<u8>) -> Self {
76 Self(bytes.into_boxed_slice())
77 }
78}