Skip to main content

idgenerator_thin/idgen/
yit_id_helper.rs

1/*
2 * 版权属于:yitter(yitter@126.com)
3 * 开源地址:https://github.com/yitter/idgenerator
4 */
5use 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}