pub fn assert_ser_tokens_error<T>(value: &T, tokens: &[Token], error: &str)
Expand description
Asserts that value
serializes to the given tokens
, and then yields
error
.
use serde_derive::Serialize;
use serde_test::{assert_ser_tokens_error, Token};
use std::sync::{Arc, Mutex};
use std::thread;
#[derive(Serialize)]
struct Example {
lock: Arc<Mutex<u32>>,
}
fn main() {
let example = Example {
lock: Arc::new(Mutex::new(0)),
};
let lock = example.lock.clone();
let thread = thread::spawn(move || {
// This thread will acquire the mutex first, unwrapping the result
// of `lock` because the lock has not been poisoned.
let _guard = lock.lock().unwrap();
// This panic while holding the lock (`_guard` is in scope) will
// poison the mutex.
panic!()
});
thread.join();
let expected = &[
Token::Struct {
name: "Example",
len: 1,
},
Token::Str("lock"),
];
let error = "lock poison error while serializing";
assert_ser_tokens_error(&example, expected, error);
}