6 个版本 (3 个稳定版)

1.0.2 2022年5月25日
1.0.0 2022年5月22日
0.2.1 2022年5月20日
0.2.0 2022年5月20日
0.1.0 2022年5月20日

#2599Rust 模式


2 个crate使用

MIT 许可证

8KB
63

assert_parse

断言宏解析的实用工具。

示例

use assert_parse::*;
use syn::parse::Parse;
use thiserror::Error;

#[derive(Error, Debug)]
enum InputError {
    #[error("This is not ident.")]
    NotIdent,
}

struct Input(syn::Ident);

impl Parse for Input {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        let i = match input.parse() {
            Ok(i) => i,
            Err(e) => {
                return syn::Error::new(e.span(), InputError::NotIdent.to_string());
            }
        };
        Ok(Self(i))
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use quote::quote;
    use rstest::*;

    type Assert = Assert<Input, InputError>;

    #[fixture]
    fn assert() -> Assert {
        make_assert()
    }

    #[rstest]
    fn error(assert: Assert) {
        let input = quote! {1};
        assert.error(input, InputError::NotIdent);
    }

    #[rstest]
    fn ok() {
        let input = quote! {mock};
        assert.ok(input, |i| {
            assert_eq!(i.to_string(), "mock".to_string());
        });
    }
}

或者你可以像这样使用宏。

use assert_parse::*;
use syn::parse::Parse;
use thiserror::Error;

#[derive(Error, Debug)]
enum InputError {
    #[error("This is not ident.")]
    NotIdent,
}

struct Input(syn::Ident);

impl Parse for Input {
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        let i = match input.parse() {
            Ok(i) => i,
            Err(e) => {
                return syn::Error::new(e.span(), InputError::NotIdent.to_string());
            }
        };
        Ok(Self(i))
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use quote::quote;
    use rstest::*;
    use assert_parse::register_assert;

    register_assert!(Input,InputError);

    #[rstest]
    fn error(assert: Assert) {
        let input = quote! {1};
        assert.error(input, InputError::NotIdent);
    }

    #[rstest]
    fn ok() {
        let input = quote! {mock};
        assert.ok(input, |i| {
            assert_eq!(i.to_string(), "mock".to_string());
        });
    }
}

这个做什么

这个crate非常小巧,但使一些代码基础相同。因此,它可以用作模板制作工具。

依赖关系

这个crate没有在示例中用作依赖项。你可以选择只使用这个或将其与其他库一起开发。

许可证

MIT

依赖

~6–19MB
~222K SLoC