pub mod promote;
pub mod snapshot;
pub mod teardown;
pub use promote::{NotesStatus, PromoteOptions, PromoteResult, promote_baseline};
pub use snapshot::snapshot;
pub use teardown::{
KeptIteration, PROMOTED_MARKER, SNAPSHOT_META, WorkspaceCleanupSummary, cleanup_workspace,
};
use std::fs;
use std::path::Path;
use std::time::{SystemTime, UNIX_EPOCH};
use chrono::{DateTime, SecondsFormat};
use serde::Serialize;
#[derive(Debug, thiserror::Error)]
pub enum WorkspaceError {
#[error("{0}")]
Message(String),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Json(#[from] serde_json::Error),
}
pub(crate) 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)
}
pub(crate) fn write_json<T: Serialize>(path: &Path, value: &T) -> Result<(), WorkspaceError> {
let mut text = serde_json::to_string_pretty(value)?;
text.push('\n');
fs::write(path, text)?;
Ok(())
}