micro_tower/
api.rs

1//! Utilities to translate request and replies.
2
3use serde::{Deserialize, Serialize};
4
5pub mod codec;
6pub mod layer;
7pub mod service;
8
9use crate::util::BoxError;
10pub use layer::Layer;
11pub use service::Service;
12
13/// TODO
14#[derive(Deserialize, Serialize)]
15#[serde(tag = "type")]
16pub enum Message<T> {
17    #[serde(rename = "ok")]
18    Ok { data: T },
19    #[serde(rename = "400")]
20    BadRequest,
21    #[serde(rename = "500")]
22    InternalServerError,
23}
24
25/// TODO
26#[derive(Debug)]
27pub struct Error {
28    pub buf: bytes::BytesMut,
29    pub err: BoxError,
30}
31
32impl std::fmt::Display for Error {
33    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34        f.write_str("service failed")
35    }
36}
37
38impl std::error::Error for Error {
39    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
40        Some(self.err.as_ref())
41    }
42}