doctrine 0.4.1

Project tooling CLI
// SPDX-License-Identifier: GPL-3.0-only
//! The shell time seam — the *only* home of wall-clock reads.
//!
//! Pure/imperative split (slices-spec § Architecture): the pure layers take the
//! date / timestamp as inputs; the CLI shell reads the clock here and passes the
//! value in. Shared by every scaffold verb so there is no parallel date formatter.

use anyhow::Context;

/// Today as `YYYY-MM-DD` (UTC) — the scaffold date stamp.
pub(crate) fn today() -> String {
    let d = time::OffsetDateTime::now_utc().date();
    format!("{:04}-{:02}-{:02}", d.year(), u8::from(d.month()), d.day())
}

/// An RFC3339 UTC timestamp for the runtime progress log.
pub(crate) fn now_timestamp() -> anyhow::Result<String> {
    use time::format_description::well_known::Rfc3339;
    time::OffsetDateTime::now_utc()
        .format(&Rfc3339)
        .context("Failed to format timestamp")
}