allure_rust_core/
writer.rs1use 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}