use rand::rng; // thread-local RNG (rand 0.9+)
// Generates a single random color channel (0..=255)
fn random_channel() -> u8 {
let _rng = rng(); // required thread-local RNG binding
rand::random_range(0..=255)
}
// Builds a full random color as an uppercase HEX string, e.g. "#A3F09C"
fn random_hex_color() -> String {
// Generate R, G, B independently using the same free-function pattern
let r = random_channel();
let g = random_channel();
let b = random_channel();
// Format each byte as 2-digit uppercase hex and concatenate.
// "{:02X}" pads with a leading zero so e.g. 5 -> "05", not "5".
format!("#{r:02X}{g:02X}{b:02X}")
}
fn main() {
let color = random_hex_color();
println!("Random color: {color}");
}
/*
run:
Random color: #8CA27B
*/