mail_parser/parsers/fields/
mod.rs

1/*
2 * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <hello@stalw.art>
3 *
4 * SPDX-License-Identifier: Apache-2.0 OR MIT
5 */
6
7pub 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}