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
use cerk::runtime::{InternalServerFnRef, ScheduleFnRefStatic}; use std::collections::HashMap; pub struct ComponentStartLinks<'a> { pub schedulers: HashMap<String, ScheduleFnRefStatic>, pub routers: HashMap<String, InternalServerFnRef<'a>>, pub config_loaders: HashMap<String, InternalServerFnRef<'a>>, pub ports: HashMap<String, InternalServerFnRef<'a>>, } pub mod helpers { #[macro_export] macro_rules! fn_to_link { ($f:ident) => {{ (stringify!($f).to_string(), $f) }}; } #[macro_export] macro_rules! fn_to_links { ( $($f:ident), *) => ({ [ $( fn_to_link![$f], )* ].iter().cloned().collect() }) } #[cfg(test)] mod tests { use super::super::*; use cerk::kernel::{KernelFn, StartOptions}; use cerk::runtime::ScheduleFn; #[test] fn fn_to_link_test() { fn dummy_scheduler(_: StartOptions, _: KernelFn) {} const DUMMY: ScheduleFnRefStatic = &(dummy_scheduler as ScheduleFn); let schedulers: HashMap<String, ScheduleFnRefStatic> = [("DUMMY".to_string(), DUMMY)].iter().cloned().collect(); let schedulers_macro: HashMap<String, ScheduleFnRefStatic> = [fn_to_link!(DUMMY)].iter().cloned().collect(); assert_eq!(schedulers, schedulers_macro) } #[test] fn fn_to_links_test() { fn dummy_scheduler(_: StartOptions, _: KernelFn) {} const DUMMY: ScheduleFnRefStatic = &(dummy_scheduler as ScheduleFn); let schedulers: HashMap<String, ScheduleFnRefStatic> = [("DUMMY".to_string(), DUMMY)].iter().cloned().collect(); let schedulers_macro: HashMap<String, ScheduleFnRefStatic> = fn_to_links![DUMMY]; assert_eq!(schedulers, schedulers_macro) } #[test] fn fn_to_links_multiple_test() { fn dummy_scheduler(_: StartOptions, _: KernelFn) {} const DUMMY: ScheduleFnRefStatic = &(dummy_scheduler as ScheduleFn); const DUMMY2: ScheduleFnRefStatic = &(dummy_scheduler as ScheduleFn); let schedulers: HashMap<String, ScheduleFnRefStatic> = [("DUMMY".to_string(), DUMMY), ("DUMMY2".to_string(), DUMMY2)] .iter() .cloned() .collect(); let schedulers_macro: HashMap<String, ScheduleFnRefStatic> = fn_to_links![DUMMY, DUMMY2]; assert_eq!(schedulers, schedulers_macro) } } }