idgenerator_thin/idgen/
yit_id_helper.rs1use std::sync::Mutex;
6use std::sync::Arc;
7use crate::idgen::*;
8
9pub struct YitIdHelper;
10
11static mut ID_GEN_INSTANCE: Option<Arc<Mutex<DefaultIdGenerator>>> = None;
12
13impl YitIdHelper {
14 fn id_gen_instance() -> Arc<Mutex<DefaultIdGenerator>> {
15 unsafe {
16 ID_GEN_INSTANCE.get_or_insert_with(|| {
17 Arc::new(Mutex::new(DefaultIdGenerator::default()))
18 }).clone()
19 }
20 }
21
22 pub fn set_id_generator(options: IdGeneratorOptions) {
23 let idgen_arc = YitIdHelper::id_gen_instance();
24 let mut idgen = idgen_arc.lock().unwrap();
25 idgen.worker.set_options(options);
26 }
27
28 pub fn set_worker_id(worker_id: u32) {
29 let idgen_arc = YitIdHelper::id_gen_instance();
30 let mut idgen = idgen_arc.lock().unwrap();
31 let options = IdGeneratorOptions::new(worker_id);
32 idgen.worker.set_options(options);
33 }
34
35 pub fn next_id() -> i64 {
36 let idgen_arc = YitIdHelper::id_gen_instance();
37 let mut idgen = idgen_arc.lock().unwrap();
38 idgen.worker.next_id()
39 }
40}