#failure #rocket #error #api

rocket_failure

为 rocket 实现的故障处理

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


用于 sn0int-registry

MIT/Apache 协议

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 可根据您的选择使用以下任一许可证

依赖项

~9.5MB
~195K SLoC