4 个版本
0.2.0 | 2019年7月22日 |
---|---|
0.1.2 | 2019年2月26日 |
0.1.1 | 2018年12月9日 |
0.1.0 | 2018年12月9日 |
7 在 #errors
16KB
289 行(不含注释)
rocket_failure
为 rocket 应用程序提供语义错误处理。
要在服务器中启用此软件包,请在您的 Cargo.toml
文件中添加此行
rocket_failure = { version="0.1", features = ["with-rocket"] }
#![feature(proc_macro_hygiene, decl_macro)]
#[macro_use] extern crate rocket;
#[macro_use] extern crate rocket_failure;
use rocket_failure::errors::*;
use std::fs;
#[get("/<file>")]
fn index(file: String) -> ApiResult<Vec<u8>> {
if !file.chars().all(|c| char::is_alphanumeric(c) || c == '-' || c == '.') {
bad_request!("file contains forbidden characters")
}
// if this returns an Err(_), return a standard 404
let content = fs::read(&file)
.not_found()?;
// detailed errors are hidden by default
// we can publish the actual error if we want to
/*
let content = fs::read(&file)
.not_found()
.publish_error()?;
*/
// or we can set a public error while preserving the actual error
/*
let content = fs::read(&file)
.not_found()
.public_context("That didn't work")?;
*/
Ok(content)
}
fn main() {
rocket::ignite().mount("/", routes![index]).launch();
}
您可以使用以下命令运行此示例
cargo +nightly run --example fileserver --features=with-rocket
如果您想在 API 客户端使用 ApiResult<T>
类型来消费 API,则省略 with-rocket
特性
rocket_failure = "0.1"
许可证
rocket_failure 可根据您的选择使用以下任一许可证
- Apache 许可证 2.0 版(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖项
~9.5MB
~195K SLoC