1
0
mirror of https://github.com/actix/examples synced 2024-11-23 22:41:07 +01:00

remove jsoncrate

This commit is contained in:
Rob Ede 2023-07-18 17:34:26 +01:00
parent 01cb601f67
commit 1a634a983f
No known key found for this signature in database
GPG Key ID: 97C636207D3EF933
3 changed files with 2 additions and 40 deletions

7
Cargo.lock generated
View File

@ -4116,12 +4116,6 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "json"
version = "0.12.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
[[package]] [[package]]
name = "json-example" name = "json-example"
version = "1.0.0" version = "1.0.0"
@ -4129,7 +4123,6 @@ dependencies = [
"actix-web", "actix-web",
"env_logger", "env_logger",
"futures-util", "futures-util",
"json",
"log", "log",
"serde", "serde",
"serde_json", "serde_json",

View File

@ -5,10 +5,8 @@ edition = "2021"
[dependencies] [dependencies]
actix-web.workspace = true actix-web.workspace = true
env_logger.workspace = true env_logger.workspace = true
futures-util.workspace = true futures-util.workspace = true
json = "0.12"
log.workspace = true log.workspace = true
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json.workspace = true serde_json.workspace = true

View File

@ -1,6 +1,4 @@
use actix_web::{error, middleware, web, App, Error, HttpRequest, HttpResponse, HttpServer}; use actix_web::{middleware, web, App, Error, HttpRequest, HttpResponse, HttpServer};
use futures_util::StreamExt as _;
use json::JsonValue;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
@ -23,39 +21,13 @@ async fn extract_item(item: web::Json<MyObj>, req: HttpRequest) -> HttpResponse
HttpResponse::Ok().json(item.0) // <- send json response HttpResponse::Ok().json(item.0) // <- send json response
} }
const MAX_SIZE: usize = 262_144; // max payload size is 256k
/// This handler manually load request payload and parse json object /// This handler manually load request payload and parse json object
async fn index_manual(mut payload: web::Payload) -> Result<HttpResponse, Error> { async fn index_manual(body: web::Bytes) -> Result<HttpResponse, Error> {
// payload is a stream of Bytes objects
let mut body = web::BytesMut::new();
while let Some(chunk) = payload.next().await {
let chunk = chunk?;
// limit max size of in-memory payload
if (body.len() + chunk.len()) > MAX_SIZE {
return Err(error::ErrorBadRequest("overflow"));
}
body.extend_from_slice(&chunk);
}
// body is loaded, now we can deserialize serde-json // body is loaded, now we can deserialize serde-json
let obj = serde_json::from_slice::<MyObj>(&body)?; let obj = serde_json::from_slice::<MyObj>(&body)?;
Ok(HttpResponse::Ok().json(obj)) // <- send response Ok(HttpResponse::Ok().json(obj)) // <- send response
} }
/// This handler manually load request payload and parse json-rust
async fn index_mjsonrust(body: web::Bytes) -> Result<HttpResponse, Error> {
// body is loaded, now we can deserialize json-rust
let result = json::parse(std::str::from_utf8(&body).unwrap()); // return Result
let injson: JsonValue = match result {
Ok(v) => v,
Err(e) => json::object! {"err" => e.to_string() },
};
Ok(HttpResponse::Ok()
.content_type("application/json")
.body(injson.dump()))
}
#[actix_web::main] #[actix_web::main]
async fn main() -> std::io::Result<()> { async fn main() -> std::io::Result<()> {
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
@ -74,7 +46,6 @@ async fn main() -> std::io::Result<()> {
.route(web::post().to(extract_item)), .route(web::post().to(extract_item)),
) )
.service(web::resource("/manual").route(web::post().to(index_manual))) .service(web::resource("/manual").route(web::post().to(index_manual)))
.service(web::resource("/mjsonrust").route(web::post().to(index_mjsonrust)))
.service(web::resource("/").route(web::post().to(index))) .service(web::resource("/").route(web::post().to(index)))
}) })
.bind(("127.0.0.1", 8080))? .bind(("127.0.0.1", 8080))?