9 releases

0.1.4 Aug 29, 2024
0.1.3 Aug 25, 2024
0.1.2 Jun 23, 2024
0.1.1 Dec 24, 2023
0.0.4 Sep 16, 2023

#350 in HTTP server

Download history 20/week @ 2024-09-25 8/week @ 2024-10-02 5/week @ 2024-10-09 1/week @ 2024-10-23 16/week @ 2024-10-30 17/week @ 2024-11-06 14/week @ 2024-11-13 47/week @ 2024-11-20 1/week @ 2024-11-27 20/week @ 2024-12-04 25/week @ 2024-12-11 1/week @ 2024-12-18 35/week @ 2025-01-01 15/week @ 2025-01-08

53 downloads per month

MIT license

25KB
576 lines

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 settings:

use actix_msgpack::MsgPackConfig;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        let mut config = MsgPackConfig::default();
        // set max limit in bytes (default is 256kb)
        config.limit(1024); // 1kb
        // set error handler
        config.error_handler(|err, _req| {
            InternalError::from_response(err, HttpResponse::BadRequest().finish()).into()
        });
        // set allowed content-type (default is application/msgpack)
        config.content_type(|mime_type| mime_type == mime::APPLICATION_JSON)

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

You can use responder:

use actix_msgpack::MsgPackResponseBuilder;

#[derive(Serialize)]
struct Data {
    payload: bool,
}

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

License

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

Dependencies

~15–26MB
~444K SLoC