1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
use snafu::prelude::*;
mod basics {
use super::*;
use std::sync::atomic::{AtomicUsize, Ordering};
static COUNTER: AtomicUsize = AtomicUsize::new(0);
#[derive(Debug)]
struct OccurrenceCount(usize);
impl snafu::GenerateImplicitData for OccurrenceCount {
fn generate() -> Self {
OccurrenceCount(COUNTER.fetch_add(1, Ordering::SeqCst))
}
}
#[derive(Debug, Snafu)]
enum ErrorOne {
Alpha {
#[snafu(implicit)]
occurrence: OccurrenceCount,
},
}
#[test]
fn implicit_fields_are_constructed() {
let ErrorOne::Alpha {
occurrence: OccurrenceCount(o1),
} = AlphaSnafu.build();
let ErrorOne::Alpha {
occurrence: OccurrenceCount(o2),
} = AlphaSnafu.build();
assert_eq!(o1, 0);
assert_eq!(o2, 1);
}
}
mod multiple_fields {
use super::*;
#[derive(Debug, PartialEq)]
struct ImplicitData;
impl snafu::GenerateImplicitData for ImplicitData {
fn generate() -> Self {
ImplicitData
}
}
#[derive(Debug, Snafu)]
struct Error {
#[snafu(implicit)]
one: ImplicitData,
#[snafu(implicit)]
two: ImplicitData,
}
#[test]
fn multiple_implicit_fields_are_constructed() {
let Error { one, two } = Snafu.build();
assert_eq!(one, two);
}
}
|