alibabacloud-rum 0.1.0

Alibaba Cloud RUM SDK for native Rust applications.
Documentation
use rand::RngCore;

pub(crate) fn generate_trace_id() -> String {
    generate_non_zero_hex::<16>()
}

pub(crate) fn generate_span_id() -> String {
    generate_non_zero_hex::<8>()
}

fn generate_non_zero_hex<const N: usize>() -> String {
    loop {
        let mut bytes = [0u8; N];
        rand::thread_rng().fill_bytes(&mut bytes);
        if bytes.iter().any(|byte| *byte != 0) {
            return bytes.iter().map(|byte| format!("{byte:02x}")).collect();
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn ids_have_expected_lengths() {
        assert_eq!(generate_trace_id().len(), 32);
        assert_eq!(generate_span_id().len(), 16);
    }
}