shadow-formatted-version 1.1.0

Version information in a preformatted block
Documentation
# shadow-formatted-version

Convenience crate to provide detailed version information in a preformatted block:
```
  Version:       0.1.0
  Target:        x86_64-unknown-linux-gnu
  Commit:        8f29a49b54ca3e94070d244511d8e4a64a69f083
  Commit-Date:   2023-12-31 23:59:59 +00:00
  Build-Date:    2024-12-31 23:59:59 +00:00
  Build-Clean:   No uncommitted changes in build.
  Rust-Version:  rustc 1.76.0 (07dca489a 2024-02-04)
```

This version information can be logged at the start of a long-running service or  
printed when passing `--version` to a CLI.

For example, when using [`clap`](https://crates.io/crates/clap), you can use it like so:
```rust
#[derive(Parser)]
#[command(about, version, long_version=crate::FORMATTED_VERSION)]
struct Args {
    // ...
}
```


## Setup

This crate is based on [shadow-rs](https://crates.io/crates/shadow-rs), which we will setup as well.

1. Add `shadow-rs` and `shadow-formatted-version` to your dependencies:
```toml
[dependencies]
shadow-rs = "1"
shadow-formatted-version = "1.1"

[build-dependencies]
shadow-rs = "1"
```

2. Add the following code to your `build.rs` file:
```rust
fn main() {
    shadow_rs::ShadowBuilder::builder()
        .build().unwrap();
}
```

If you don't yet have a `build.rs` file, place it next to your `Cargo.toml` file:
```
.
├── build.rs
├── Cargo.toml
└── src
    └── ...
```

3. Place these two lines in your `main.rs` or `lib.rs`, underneath your module definitions:
```rust
shadow_rs::shadow!(build)
formatted_version::from_shadow!(build);
```

Then you can retrieve the formatted version information with `crate::FORMATTED_VERSION`.  
You can also retrieve additional constants from `crate::build`, as generated by `shadow-rs`.