Skip to main content

wire_weaver/
lib.rs

1#![cfg_attr(not(feature = "std"), no_std)]
2
3mod test;
4
5pub use shrink_wrap;
6use shrink_wrap::prelude::ShrinkWrapError;
7pub use wire_weaver_derive::{full_version, ww_api, ww_trait};
8pub use ww_version;
9use ww_version::FullVersion;
10
11pub mod prelude {
12    pub use shrink_wrap;
13    pub use shrink_wrap::prelude::*;
14    pub use wire_weaver_derive::{full_version, ww_api, ww_trait};
15    pub use ww_version;
16    pub use ww_version::FullVersion;
17}
18
19pub trait WireWeaverAsyncApiBackend {
20    /// Deserialize request and process it.
21    fn process_bytes<'a>(
22        &mut self,
23        data: &[u8],
24        scratch_args: &'a mut [u8],
25        scratch_event: &'a mut [u8],
26        scratch_err: &'a mut [u8],
27    ) -> impl Future<Output = Result<&'a [u8], ShrinkWrapError>>;
28
29    fn send_updates(
30        &mut self,
31        sink: &mut impl MessageSink,
32        scratch_value: &mut [u8],
33        scratch_event: &mut [u8],
34    ) -> impl Future<Output = ()> {
35        let _ = sink;
36        let (_, _) = (scratch_value, scratch_event);
37        core::future::ready(())
38    }
39
40    /// Implemented version of an API. Return `<your_ww_api_crate>::DEVICE_API_ROOT_FULL_GID` from this method.
41    fn version(&self) -> FullVersion<'_>;
42}
43
44pub trait MessageSink {
45    fn send(&mut self, message: &[u8]) -> impl Future<Output = Result<(), ()>>;
46}