1
0
mirror of https://github.com/actix/examples synced 2025-02-09 04:15:37 +01:00

51 lines
1.3 KiB
Rust
Raw Normal View History

2019-06-22 02:08:18 -05:00
// This example is meant to show how to automatically generate a json error response when something goes wrong.
2019-12-07 23:59:24 +06:00
use std::fmt::{Display, Formatter, Result as FmtResult};
use std::io;
2019-06-22 02:08:18 -05:00
use actix_web::http::StatusCode;
2019-12-07 23:59:24 +06:00
use actix_web::{web, App, HttpServer, ResponseError};
2019-06-22 02:08:18 -05:00
use serde::Serialize;
use serde_json::{json, to_string_pretty};
#[derive(Debug, Serialize)]
struct Error {
2019-07-11 15:02:25 +06:00
msg: String,
status: u16,
2019-06-22 02:08:18 -05:00
}
impl Display for Error {
2019-07-11 15:02:25 +06:00
fn fmt(&self, f: &mut Formatter) -> FmtResult {
write!(f, "{}", to_string_pretty(self).unwrap())
}
2019-06-22 02:08:18 -05:00
}
impl ResponseError for Error {
2019-07-11 15:02:25 +06:00
// builds the actual response to send back when an error occurs
2019-12-07 23:59:24 +06:00
fn error_response(&self) -> web::HttpResponse {
2019-07-11 15:02:25 +06:00
let err_json = json!({ "error": self.msg });
2019-12-07 23:59:24 +06:00
web::HttpResponse::build(StatusCode::from_u16(self.status).unwrap())
.json(err_json)
2019-07-11 15:02:25 +06:00
}
2019-06-22 02:08:18 -05:00
}
2019-12-07 23:59:24 +06:00
async fn index() -> Result<web::HttpResponse, Error> {
Err(Error {
2019-07-11 15:02:25 +06:00
msg: "an example error message".to_string(),
status: 400,
})
2019-06-22 02:08:18 -05:00
}
2019-12-07 23:59:24 +06:00
#[actix_rt::main]
async fn main() -> io::Result<()> {
2019-07-11 15:02:25 +06:00
let ip_address = "127.0.0.1:8000";
println!("Running server on {}", ip_address);
2019-06-22 02:08:18 -05:00
2019-12-07 23:59:24 +06:00
HttpServer::new(|| {
App::new().service(web::resource("/").route(web::get().to(index)))
})
.bind(ip_address)
.expect("Can not bind to port 8000")
2019-12-25 20:48:33 +04:00
.run()
2019-12-07 23:59:24 +06:00
.await
2019-06-22 02:08:18 -05:00
}