mirror of
https://github.com/actix/examples
synced 2024-11-23 22:41:07 +01:00
Added json_error example. (#146)
This commit is contained in:
parent
748d4516eb
commit
733eb93a97
@ -16,6 +16,7 @@ members = [
|
|||||||
"http-proxy",
|
"http-proxy",
|
||||||
"http-full-proxy",
|
"http-full-proxy",
|
||||||
"json",
|
"json",
|
||||||
|
"json_error",
|
||||||
"jsonrpc",
|
"jsonrpc",
|
||||||
"juniper",
|
"juniper",
|
||||||
"middleware",
|
"middleware",
|
||||||
|
13
json_error/Cargo.toml
Normal file
13
json_error/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "json_error"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Kai Yao <kai.b.yao@gmail.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
actix = "0.8"
|
||||||
|
actix-web = "1.0"
|
||||||
|
failure = "0.1"
|
||||||
|
futures = "0.1"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
53
json_error/src/main.rs
Normal file
53
json_error/src/main.rs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
// This example is meant to show how to automatically generate a json error response when something goes wrong.
|
||||||
|
|
||||||
|
use actix::System;
|
||||||
|
use actix_web::http::StatusCode;
|
||||||
|
use actix_web::web::{get, resource, HttpRequest, HttpResponse};
|
||||||
|
use actix_web::{App, HttpServer, ResponseError};
|
||||||
|
use futures::future::err;
|
||||||
|
use futures::Future;
|
||||||
|
use serde::Serialize;
|
||||||
|
use serde_json::{json, to_string_pretty};
|
||||||
|
use std::fmt::{Display, Formatter, Result as FmtResult};
|
||||||
|
use std::io;
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
struct Error {
|
||||||
|
msg: String,
|
||||||
|
status: u16,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for Error {
|
||||||
|
fn fmt(&self, f: &mut Formatter) -> FmtResult {
|
||||||
|
write!(f, "{}", to_string_pretty(self).unwrap())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ResponseError for Error {
|
||||||
|
// builds the actual response to send back when an error occurs
|
||||||
|
fn render_response(&self) -> HttpResponse {
|
||||||
|
let err_json = json!({ "error": self.msg });
|
||||||
|
HttpResponse::build(StatusCode::from_u16(self.status).unwrap()).json(err_json)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn index(_: HttpRequest) -> impl Future<Item = HttpResponse, Error = Error> {
|
||||||
|
err(Error {
|
||||||
|
msg: "an example error message".to_string(),
|
||||||
|
status: 400,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> io::Result<()> {
|
||||||
|
let sys = System::new("json_error_example");
|
||||||
|
let ip_address = "127.0.0.1:8000";
|
||||||
|
|
||||||
|
HttpServer::new(|| App::new().service(resource("/").route(get().to_async(index))))
|
||||||
|
.bind(ip_address)
|
||||||
|
.expect("Can not bind to port 8000")
|
||||||
|
.start();
|
||||||
|
|
||||||
|
println!("Running server on {}", ip_address);
|
||||||
|
|
||||||
|
sys.run()
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user