如何将文档注释作为字符串获取

XiaoXiao

我是新手 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,这在与其他库交互时非常有用。

例如,与anyhowmiette等错误包装库结合使用:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将字符串格式作为变量传递给f字符串

如何将整个文档HTML作为字符串?

如何将变量放入Python文档字符串

如何将字符串作为字符值访问

如何将Blade模板视图作为原始HTML字符串获取?

如何将字符串作为包含多个字符串的参数

如何将字符串作为变量插入字符串?

如何将所有RegEx捕获组作为单个字符串获取?

如何使用改型将JSON作为字符串获取

Ansible:如何将“ {{ABC}}”作为字符串传递

如何将公式作为字符串传递?

如何将列表作为字符串从API转换为字符串列表

如何将数据获取到字符串

如何将文件列表作为 utf8 编码字符串获取到 gnuplot 中?

如何将 ArrayList<HashMap> 的值作为字符串获取?

如何将 kivy 按钮的 Id 和 Text 值作为字符串获取?

如何将验证错误作为字符串数组获取?

Django 如何将 TextField 的前 10 个字符作为字符串获取?

如何将 css 属性设置为我作为字符串获取的 html 元素

如何将值模型类对象作为字符串获取到 ArrayList?

如何将字符串 var 作为函数调用?

如何将 selenium 中孩子的标记名作为字符串获取并根据标记名类型执行操作

如何将 Spark 列的别名作为字符串获取?

Rails - 如何将字符串作为查询发送?

如何将字符串基数 2 作为整数?

如何从firebase获取特定文档数据并作为字符串返回

如何将字符串作为 Type 对象?

如何将 CharField 作为字符串操作 Django

如何将每个单词或获取字符串作为单独的条目添加到数据库