1
2#[macro_use]
3extern crate cluStaticData;
4
5use std::fmt::Debug;
6use cluStaticData::err::StaticErr;
7
8
9static_data! {
10 static ref TEST: &'static (dyn MyTrait + 'static) = &();
11}
12
13pub trait MyTrait: Debug + Sync {
14 fn data(&self) -> usize;
15}
16
17impl MyTrait for () {
18 #[inline]
19 fn data(&self) -> usize {
20 0
21 }
22}
23
24impl MyTrait for usize {
25 #[inline]
26 fn data(&self) -> usize {
27 *self
28 }
29}
30
31fn main() -> Result<(), StaticErr<&'static (dyn MyTrait + 'static)>> {
32 let _result = TEST.set(&10)?;
33 println!("OK {:?}, data: {:?}", TEST, TEST.data());
34
35 let err = TEST.set(&20);
36 assert_eq!(err.err().unwrap().into_inner().data(), 20);
37 println!("OK {:?}, data: {:?}", TEST, TEST.data());
38
39 Ok( () )
40}