acorn-lib 0.3.2

ACORN library
#![allow(
    clippy::unwrap_used,
    clippy::expect_used,
    clippy::panic,
    clippy::indexing_slicing,
    clippy::arithmetic_side_effects
)]
define_required_fn!(1, required1_test, A, a);
define_required_fn!(3, required3_test, A, a, B, b, C, c);
define_required_fn!(4, required4_test, A, a, B, b, C, c, D, d);

#[test]
fn required1_returns_error() {
    let result = required1_test::<i32>(None);
    let message = result.err().map(|why| why.to_string());
    assert_eq!(message.as_deref(), Some("Failed to insert: a is required"));
}
#[test]
fn required1_returns_value_tuple() {
    let result = required1_test::<i32>(Some(7));
    assert_eq!(result.ok(), Some((7,)));
}
#[test]
fn required3_returns_first_error() {
    let result = required3_test::<i32, i32, i32>(None, None, None);
    let message = result.err().map(|why| why.to_string());
    assert_eq!(message.as_deref(), Some("Failed to insert: a is required"));
}
#[test]
fn required3_returns_value_tuple() {
    let result = required3_test::<i32, i32, i32>(Some(1), Some(2), Some(3));
    assert_eq!(result.ok(), Some((1, 2, 3)));
}
#[test]
fn required4_returns_first_error() {
    let result = required4_test::<i32, i32, i32, i32>(Some(1), None, None, None);
    let message = result.err().map(|why| why.to_string());
    assert_eq!(message.as_deref(), Some("Failed to insert: b is required"));
}
#[test]
fn required4_returns_value_tuple() {
    let result = required4_test::<i32, i32, i32, i32>(Some(1), Some(2), Some(3), Some(4));
    assert_eq!(result.ok(), Some((1, 2, 3, 4)));
}