dyn/
dyn.rs

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}