pub mod brush;
pub mod clipboard;
pub mod config;
pub mod coord;
pub mod document;
pub mod engine;
pub mod format;
pub mod gpu;
pub mod layer;
pub mod mask;
pub mod nodegraph;
pub mod sdf;
pub mod tile;
pub mod tool;
pub mod tools;
pub mod transform;
pub mod undo;
pub const VERSION: &str = env!("DARKLY_VERSION");
#[cfg(test)]
mod version_tests {
use super::VERSION;
use std::process::Command;
fn is_describe_shape(s: &str) -> bool {
let parts: Vec<&str> = s.rsplitn(3, '-').collect();
parts.len() == 3
&& parts[0].starts_with('g')
&& parts[0].len() > 1
&& parts[1].parse::<u32>().is_ok()
&& !parts[2].is_empty()
}
#[test]
fn version_matches_live_git_describe() {
let live = Command::new("git")
.args(["describe", "--tags", "--long"])
.output()
.ok()
.filter(|o| o.status.success())
.and_then(|o| String::from_utf8(o.stdout).ok())
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty());
match live {
Some(desc) => assert_eq!(VERSION, desc, "baked version should equal live describe"),
None => assert_eq!(
VERSION, "0.0.0-0-gunknown",
"no git/tags → fallback expected"
),
}
}
#[test]
fn version_is_not_cargo_pkg_version() {
assert_ne!(VERSION, env!("CARGO_PKG_VERSION"));
assert!(
is_describe_shape(VERSION),
"unexpected version shape: {VERSION}"
);
}
}