我是新手 rust 语言用户
我很好奇是否有可能获得对代码的文档注释?
enum Foo {
#[doc = "I want this string"]
Bar,
/// or this one
Baz,
}
(已编辑)
我正在尝试enum
为响应代码定义构建一个并为其添加简短描述。
enum CodeDefinition {
/// Internal error. Please contact the administrator
Unknown,
}
impl std::fmt::Display for CodeDefinition {
#[inline]
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Unknown => write!(f, "Internal error. Please contact the administrator"),
}
}
}
简短的描述会在代码中写两次,所以我开始想办法避免这种情况。
从您的第二个代码示例中,我推断您正在尝试编写错误枚举。
为此,(在撰写本文时)事实上的首选库是thiserror:
use thiserror::Error;
#[derive(Error, Debug)]
enum CodeDefinition {
/// Internal error
#[error("Internal error. Please contact the administrator")]
Unknown,
}
fn main() {
let err = CodeDefinition::Unknown;
println!("Display: {}", err);
println!("Debug: {:?}", err);
}
Display: Internal error. Please contact the administrator
Debug: Unknown
这也std::error::Error
为您的枚举实现了 trait,这在与其他库交互时非常有用。
anyhow
例子:
use thiserror::Error;
#[derive(Error, Debug)]
enum CodeDefinition {
/// Internal error
#[error("Internal error. Please contact the administrator")]
Unknown,
}
fn failing_function() -> Result<(), CodeDefinition> {
Err(CodeDefinition::Unknown)
}
fn main() -> anyhow::Result<()> {
failing_function()?;
Ok(())
}
Error: Internal error. Please contact the administrator
miette
例子。
稍微复杂一点,但演示一下thiserror
也可以用来标记source
错误:
use miette::Diagnostic;
use thiserror::Error;
#[derive(Error, Debug, Diagnostic)]
enum DivisionError {
#[error("Cannot divide through zero")]
DivisionThroughZero,
}
#[derive(Error, Debug, Diagnostic)]
enum MyGreatAlgorithmError {
#[error("Division failed")]
DivisionFailed(#[source] DivisionError),
}
fn divide(a: i32, b: i32) -> Result<i32, DivisionError> {
if b != 0 {
Ok(a / b)
} else {
Err(DivisionError::DivisionThroughZero)
}
}
fn my_great_algorithm() -> Result<i32, MyGreatAlgorithmError> {
let value = divide(9001, 0).map_err(|e| MyGreatAlgorithmError::DivisionFailed(e))?;
Ok(value)
}
fn main() -> miette::Result<()> {
let value = my_great_algorithm()?;
println!("{}", value);
Ok(())
}
Error:
× Division failed
╰─▶ Cannot divide through zero
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句