#![allow(clippy::transmute_ptr_to_ptr)]
#![allow(clippy::derive_partial_eq_without_eq)]
use interchange::{Channel, Requester, Responder};
use trussed_core::{
api::{Reply, Request},
Error,
};
use crate::backend::BackendId;
use crate::types::{Context, CoreContext};
pub type TrussedChannel = Channel<Request, Result<Reply, Error>>;
pub type TrussedResponder<'a> = Responder<'a, Request, Result<Reply, Error>>;
pub type TrussedRequester<'a> = Requester<'a, Request, Result<Reply, Error>>;
pub struct ServiceEndpoint<'a, I: 'static, C> {
pub(crate) interchange: TrussedResponder<'a>,
pub(crate) ctx: Context<C>,
pub(crate) backends: &'static [BackendId<I>],
}
impl<'a, I: 'static, C: Default> ServiceEndpoint<'a, I, C> {
pub fn new(
interchange: TrussedResponder<'a>,
context: CoreContext,
backends: &'static [BackendId<I>],
) -> Self {
Self {
interchange,
ctx: context.into(),
backends,
}
}
}
#[cfg(test)]
mod tests {
use super::TrussedChannel;
use core::mem;
use trussed_core::api::{Reply, Request};
const MAX_SIZE: usize = 2416
+ if cfg!(feature = "test-increased-interchange-size") {
1024 + 1408
} else {
0
};
#[test]
fn test_sizes() {
let request_size = mem::size_of::<Request>();
let reply_size = mem::size_of::<Reply>();
let channel_size = mem::size_of::<TrussedChannel>();
assert!(request_size <= MAX_SIZE, "request_size = {request_size}");
assert!(reply_size <= MAX_SIZE, "reply_size = {request_size}");
assert!(
channel_size <= MAX_SIZE + 64,
"channel_size = {channel_size}"
);
}
}