use std::fs;
use std::path::Path;
use std::time::{SystemTime, UNIX_EPOCH};
use chrono::{DateTime, SecondsFormat};
use serde::Serialize;
use crate::pipeline::error::PipelineError;
pub fn write_json<T: Serialize>(path: &Path, value: &T) -> Result<(), PipelineError> {
let mut text = serde_json::to_string_pretty(value)?;
text.push('\n');
fs::write(path, text)?;
Ok(())
}
pub fn now_iso8601() -> String {
let ms = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as i64;
DateTime::from_timestamp_millis(ms)
.unwrap_or_default()
.to_rfc3339_opts(SecondsFormat::Millis, true)
}