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日 |
#2599 在 Rust 模式
被 2 个crate使用
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