deboa-extras 0.0.6

deboa extras (serialization, compression, websockets, streams, catchers (middleware) and sse support).
Documentation

Deboa Extras

Crates.io downloads crates.io Build Status Crates.io MSRV Documentation MIT licensed Codecov

This crate provides additional features for Deboa like compression and serialization.

Install

Either run from command line:

cargo add deboa-extras

Or add to your Cargo.toml:

deboa-extras = "0.0.1"

Features

  • json serialization
  • msgpack serialization
  • xml serialization
  • gzip compression
  • brotli compression
  • deflate compression
  • websocket support
  • sse support

Usage

Decompression

use deboa::{Deboa, errors::DeboaError, interceptor::DeboaCatcher, request::DeboaRequest};
use deboa_extras::{
    interceptor::encoding::EncodingCatcher,
    io::brotli::BrotliDecompressor,
    http::serde::json::JsonBody
};

let encoding_catcher = EncodingCatcher::register_decoders(vec![Box::new(BrotliDecompressor)]);

let client = Deboa::builder()
  .catch(encoding_catcher)
  .build()?

let posts = DeboaRequest::get("https://jsonplaceholder.typicode.com/posts/1")?
  .send_with(&client)
  .await?
  .body_as(JsonBody)?;

println!("{:?}", posts.raw_body());

Serialization

use deboa::{Deboa, errors::DeboaError, request::post};
use deboa_extras::http::serde::json::JsonBody;

let client = Deboa::default();

let data = Post {
    id: 1,
    title: "title".to_string(),
    body: "body".to_string(),
    user_id: 1,
};

let response = post("https://jsonplaceholder.typicode.com/posts/1")?
  .body_as(JsonBody, data)?
  .send_with(client)
  .await?;

println!("Response Status Code: {}", response.status());

SSE

use deboa::{Deboa, Result};
use deboa_extras::http::sse::response::{IntoEventStream};

let client = Deboa::default();

let response = client.execute("https://sse.dev/test").await?.into_event_stream();

// Poll events, until the connection is closed
// please note that this is a blocking call
while let Some(event) = response.next().await {
    println!("event: {}", event);
}

println!("Connection closed");

Websockets

use deboa::{Deboa, Result, request::DeboaRequestBuilder};
use deboa_extras::ws::{
    io::socket::DeboaWebSocket,
    protocol::{self},
    request::WebsocketRequestBuilder,
    response::IntoWebSocket,
};

let client = Deboa::default();

let websocket = DeboaRequestBuilder::websocket("wss://echo.websocket.org")?
    .send_with(&client)
    .await?
    .into_websocket()
    .await;

while let Ok(()) = websocket.read_message().await {
    // Just keep checking messages
}

License

MIT

Author

Rogerio Pereira Araujo rogerio.araujo@gmail.com