docs(examples): add runnable demo example

Adds examples/demo.rs so users can quickly see the crate in action via
`cargo run --example demo` without writing any glue code first.

The example exercises the three main surface areas of the crate:

- the typed primitive readers (get_u8, get_u32, get_u64, get_i32) to
  show that every integer width is covered and that signed values come
  out signed;
- gen_range_u32 in a dice-roll idiom (+ 1 to shift 0..6 into 1..6),
  which doubles as a hint that the helper returns a half-open range;
- string_from with three of the prebuilt charsets (ALPHANUMERIC for a
  generic token, HEX_LOWER for a 128-bit-style hex string, DIGITS for
  a numeric PIN), demonstrating the typical "generate me a random
  identifier" use case the crate is designed for.

No library code changes; this is purely an onboarding aid. Picked an
example over expanding the crate-level rustdoc because a runnable
binary is easier to copy-paste-modify than a doctest, and Cargo's
examples/ convention is the idiomatic place for this.

Test Plan:
- `cargo run --example demo` prints one line per demonstrated API and
  exits 0.
- `cargo clippy --all-targets` is clean.
This commit is contained in:
2026-04-28 19:17:06 +02:00
parent 5623568185
commit da9d5f96d8
+25
View File
@@ -0,0 +1,25 @@
//! Run with: `cargo run --example demo`
use ez_urandom::{OsRandom, charset};
fn main() -> std::io::Result<()> {
let mut rng = OsRandom::try_new()?;
println!("u8 : {}", rng.get_u8()?);
println!("u32 : {}", rng.get_u32()?);
println!("u64 : {}", rng.get_u64()?);
println!("i32 : {}", rng.get_i32()?);
println!("dice 1-6 : {}", rng.gen_range_u32(6)? + 1);
let token = rng.string_from(charset::ALPHANUMERIC, 24)?;
println!("token : {token}");
let hex = rng.string_from(charset::HEX_LOWER, 32)?;
println!("hex : {hex}");
let pin = rng.string_from(charset::DIGITS, 6)?;
println!("pin : {pin}");
Ok(())
}