Skip to main content

allure_rust_core/
writer.rs

1use crate::models::TestResult;
2use std::env;
3use std::fs;
4use std::path::PathBuf;
5use uuid::Uuid;
6
7const DEFAULT_RESULTS_DIR: &str = "allure-results";
8
9fn get_results_dir() -> PathBuf {
10    env::var("ALLURE_RESULTS_DIR")
11        .map(PathBuf::from)
12        .unwrap_or_else(|_| PathBuf::from(DEFAULT_RESULTS_DIR))
13}
14
15pub fn write_test_result(test_result: &TestResult) {
16    let dir = get_results_dir();
17    if !dir.exists() {
18        fs::create_dir_all(&dir).expect("Failed to create allure-results directory");
19    }
20    let filename = dir.join(format!("{}-result.json", test_result.uuid));
21    let json = serde_json::to_string_pretty(test_result).expect("Failed to serialize TestResult");
22    fs::write(filename, json).expect("Failed to write TestResult to file");
23}
24
25pub fn write_attachment(source: &[u8], extension: &str) -> String {
26    let dir = get_results_dir();
27    if !dir.exists() {
28        fs::create_dir_all(&dir).expect("Failed to create allure-results directory");
29    }
30    let filename = format!("{}.{}", Uuid::new_v4(), extension);
31    let filepath = dir.join(&filename);
32    fs::write(filepath, source).expect("Failed to write attachment file");
33    filename
34}