1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/// Library name.
pub const CRATE_NAME: &str = env!("CARGO_PKG_NAME");

/// Library version.
pub const CRATE_VERSION: &str = env!("CARGO_PKG_VERSION");

/// File format name.
pub const FORMAT_NAME: &str = "Open Mining Format";

/// File format extension.
pub const FORMAT_EXTENSION: &str = "omf";

/// File format major version number.
pub const FORMAT_VERSION_MAJOR: u32 = 2;

/// File format minor version number.
pub const FORMAT_VERSION_MINOR: u32 = 0;

/// File format pre-release version suffix.
///
/// This will always be `None` in release versions of the crate. Pre-release formats
/// may contain experimental changes so can't be opened in by release versions.
pub const FORMAT_VERSION_PRERELEASE: Option<&str> = Some("beta.1");

/// Returns a string containing the file format version that this crate produces.
pub fn format_version() -> String {
    let mut v = format!("{FORMAT_VERSION_MAJOR}.{FORMAT_VERSION_MINOR}");
    if let Some(pre) = FORMAT_VERSION_PRERELEASE {
        v = format!("{v}-{pre}");
    }
    v
}

/// Returns a string containing the full name and version of the file format that this
/// crate produces.
pub fn format_full_name() -> String {
    format!("{} {}", FORMAT_NAME, format_version())
}

/// Returns the crate name and version.
pub fn crate_full_name() -> String {
    format!("{CRATE_NAME} {CRATE_VERSION}")
}