deboa_fory/
lib.rs

1use deboa::{
2    errors::{ContentError, DeboaError},
3    request::DeboaRequestBuilder,
4    response::DeboaResponse,
5    Result,
6};
7use fory::{Fory, ForyDefault, Serializer};
8use http::header;
9
10#[cfg(test)]
11mod tests;
12
13pub trait ForyRequestBuilder {
14    fn body_as_fory<T: Serializer>(self, fory: &Fory, body: T) -> Result<DeboaRequestBuilder>;
15}
16
17impl ForyRequestBuilder for DeboaRequestBuilder {
18    fn body_as_fory<T: Serializer>(self, fory: &Fory, body: T) -> Result<DeboaRequestBuilder> {
19        let result = fory.serialize(&body);
20        if let Err(error) = result {
21            return Err(DeboaError::Content(ContentError::Serialization {
22                message: error.to_string(),
23            }));
24        }
25
26        let builder = self
27            .raw_body(&result.unwrap())
28            .header(header::CONTENT_TYPE, "application/fory");
29
30        Ok(builder)
31    }
32}
33
34#[deboa::async_trait]
35pub trait ForyResponse {
36    async fn body_as_fory<T: Serializer + ForyDefault>(&mut self, fory: &Fory) -> Result<T>;
37}
38
39#[deboa::async_trait]
40impl ForyResponse for DeboaResponse {
41    async fn body_as_fory<T: Serializer + ForyDefault>(&mut self, fory: &Fory) -> Result<T> {
42        let result = fory.deserialize(
43            &self
44                .raw_body()
45                .await,
46        );
47        if let Err(error) = result {
48            return Err(DeboaError::Content(ContentError::Deserialization {
49                message: error.to_string(),
50            }));
51        }
52
53        Ok(result.unwrap())
54    }
55}