mail_parser/parsers/fields/
mod.rs1pub mod address;
8pub mod content_type;
9pub mod date;
10pub mod id;
11pub mod list;
12pub mod raw;
13pub mod received;
14pub mod thread;
15pub mod unstructured;
16
17#[cfg(test)]
18use serde::{Deserialize, Serialize};
19
20#[cfg(test)]
21#[derive(Debug, Serialize, Deserialize)]
22pub struct Test<T> {
23 pub header: String,
24 pub expected: T,
25}
26
27#[cfg(test)]
28pub fn load_tests<T: serde::de::DeserializeOwned>(test_name: &str) -> Vec<Test<T>> {
29 serde_json::from_slice::<Vec<Test<T>>>(
30 &std::fs::read(
31 std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
32 .join("resources")
33 .join(test_name),
34 )
35 .unwrap(),
36 )
37 .unwrap()
38}
39
40#[cfg(test)]
41#[derive(Debug, Default)]
42pub struct TestBuilder<T: Serialize> {
43 test: std::path::PathBuf,
44 tests: Vec<Test<T>>,
45}
46
47#[cfg(test)]
48impl<T: Serialize> TestBuilder<T> {
49 pub fn new(test: impl AsRef<str>) -> Self {
50 Self {
51 test: std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
52 .join("resources")
53 .join(test.as_ref()),
54 tests: Vec::new(),
55 }
56 }
57
58 pub fn add(&mut self, header: impl Into<String>, expected: T) {
59 self.tests.push(Test {
60 header: header.into(),
61 expected,
62 });
63 }
64
65 pub fn write(&self) {
66 std::fs::write(
67 &self.test,
68 serde_json::to_string_pretty(&self.tests).unwrap(),
69 )
70 .unwrap();
71 }
72}