actix-msgpack 0.0.4

Msgpack payload extractor for Actix Web
Documentation

actix-msgpack

Msgpack payload extractor for Actix Web.

Installation

cargo add actix-msgpack

Documentation

Example

use actix_msgpack::{MsgPack};
use actix_web::{post, App, HttpResponse, HttpServer, Responder};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct Data {
    payload: String,
}
#[post("/")]
async fn index(data: MsgPack<Data>) -> impl Responder {
    println!("payload: {}", data.payload);
    HttpResponse::Ok().finish()
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new().service(index)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

You can set custom limit (default is 256kb):

use actix_msgpack::{MsgPackConfig};

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        let mut msgpack_config = MsgPackConfig::default();
        msgpack_config.limit(1024); // 1kb

        App::new().app_data(msgpack_config).service(index)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

You can use responders:

There are 2 responders:

  • msgpack_named - responder with field names (most likely you are looking for this option)
  • msgpack - responder with compact representation
#[derive(Serialize)]
struct Data {
    payload: bool,
}

#[post("/")]
async fn index(data: MsgPack<Data>) -> HttpResponse {
    let payload = Data { payload: true };
    HttpResponse::Ok().msgpack_named(payload)
}

License

This project is licensed under of MIT license (LICENSE or https://opensource.org/licenses/MIT)