3 个版本

0.0.3 2023 年 6 月 2 日
0.0.2 2023 年 5 月 13 日
0.0.1 2023 年 5 月 13 日

#1089开发工具


用于 2 crates

MIT/Apache

13KB
158

README

crates.io docs.rs github

jsonerr 帮助创建 json 错误

用法

use jsonerr::*;
fn main() {
    let myjson = jsonerr!(code = "ERR001", message = "An error message");
    println!("{:#?}", myjson);
}

返回

{
    "iserr":true,
    "err":{
        "code":"ERR001",
        "message":"An error message"
    }
}

嵌入错误

use jsonerr::*;
fn main() {
    let error = "NaN".parse::<u32>().unwrap_err();
    let myjson = jsonerr!(
        code = "ERR002",
        message = "An error message",
        origin = error // <-- 'std::error::Error' only
    );
    println!("{:#?}", myjson);
}

返回

{
    "iserr":true,
    "err":{
        "code":"ERR003",
        "message":"An error message",
        "origin": "invalid digit found in string"
    }
}

如果错误消息字符串类似于 json(例如 {"deep":"caused error","test":1})

{
    "iserr":true,
    "err":{
        "code":"ERR003",
        "message":"An error message",
        "origin": {
            "deep": "caused error",
            "test": 1
        }
    }
}

嵌入负载

use jsonerr::*;
fn main() {
    let myjson = jsonerr!(
        code = "ERR002",
        message = "An error message",
        payload = serde_json::json!({ "more": "data" }) // <-- 'serde_json::Value' only
    );
    println!("{:#?}", myjson);
}

返回

{
    "iserr":true,
    "err":{
        "code":"ERR003",
        "message":"An error message",
        "payload": { "more": "data" }
    }
}

示例

  • cargo运行 --示例基本

 为什么选择 jsonerr ?

  • 当你需要一个始终包含 .meta.err.iserr 的 json 时
  • 当你需要一个始终包含 .code.message.originpayload.err
  • 当你需要一个可以快速嵌入的引发错误时

依赖

~0.7–1.4MB
~32K SLoC