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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
#![warn(missing_docs)] //! This crate provides an auto-increment generator that is guaranteed to //! produce unique values. //! //! This is a simple implementation of a simple concept. This crate is //! appropriately tiny. //! //! # Panics //! //! There are no possible scenarios for panicking in this type or in any of the //! [Serial] implementations provide by this library. //! //! # Examples //! //! ```rust //! # use serial_int::SerialGenerator; //! let mut gen = SerialGenerator::<u32>::new(); //! //! assert_eq!(0, gen.generate()); //! assert_eq!(1, gen.generate()); //! ``` //! //! ```rust //! # use serial_int::SerialGenerator; //! # use lazy_static::lazy_static; //! # use std::{sync::{Arc, Mutex}, thread}; //! # //! fn main() { //! let users_mutex = Arc::new(Mutex::new(Vec::new())); //! let users_clone = Arc::clone(&users_mutex); //! //! let handle = thread::spawn(move || { //! let alice = User::new("alice@domain.xyz"); //! let mary = User::new("mary@domain.xyz"); //! let mut users = users_clone.lock().unwrap(); //! //! users.push(alice); //! users.push(mary); //! }); //! //! handle.join().unwrap(); //! //! let bob = User::new("bob@domain.xyz"); //! let fred = User::new("fred@domain.xyz"); //! let mut users = users_mutex.lock().unwrap(); //! //! users.push(bob); //! users.push(fred); //! //! assert_eq!(4, users.len()); //! } //! //! lazy_static! { //! static ref user_id_gen: Arc<Mutex<SerialGenerator>> //! = Arc::new(Mutex::new(SerialGenerator::new())); //! } //! //! struct User { //! id: u32, //! email: String, //! } //! //! impl User { //! pub fn new(email: &str) -> Self { //! User { //! id: user_id_gen.lock().unwrap().generate(), //! email: email.to_string(), //! } //! } //! } //! ``` //! //! ``` //! # use serial_int::SerialGenerator; //! let generator_size = std::mem::size_of::<SerialGenerator<u8>>(); //! //! assert_eq!(1, generator_size); //! ``` mod serial; mod serial_generator; mod tests; pub use serial::Serial; pub use serial_generator::SerialGenerator;