#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(feature = "std")]
mod matrix;
mod requirement;
mod trace;
pub use linkme;
#[cfg(feature = "std")]
pub use matrix::{Format, Matrix};
pub use qa_macros::traces;
pub use requirement::{REQUIREMENTS, Requirement, RequirementType};
pub use trace::{TRACES, TestTrace};
#[macro_export]
macro_rules! requirement {
(
$vis:vis $name:ident : $kind:path {
description: $desc:expr,
$($key:ident : $value:expr),* $(,)?
}
) => {
#[$crate::linkme::distributed_slice($crate::REQUIREMENTS)]
$vis static $name: $crate::Requirement = $crate::Requirement {
id: stringify!($name),
kind: $kind,
description: $desc,
module: module_path!(),
file: file!(),
line: line!(),
metadata: &[$(( stringify!($key), $value )),*],
};
};
(
$vis:vis $name:ident : $kind:path {
description: $desc:expr $(,)?
}
) => {
$crate::requirement! {
$vis $name : $kind {
description: $desc,
}
}
};
}
#[macro_export]
macro_rules! requirements {
(
$(
$vis:vis $name:ident : $kind:path {
description: $desc:expr
$(, $key:ident : $value:expr)* $(,)?
}
)*
) => {
$(
$crate::requirement! {
$vis $name : $kind {
description: $desc,
$($key : $value),*
}
}
)*
};
}