Skip to main content

registry_extension/
registry_extension.rs

1use adar_registry::prelude::*;
2struct MenuItem(pub &'static str);
3struct StyleSheet(pub &'static str);
4
5fn main() {
6    // Original website setup
7    let menu = Registry::<MenuItem>::new();
8    let styles = Registry::<StyleSheet>::new();
9    let mut website_store = vec![];
10
11    website_store.push(menu.register(MenuItem("Home")).as_generic());
12    website_store.push(menu.register(MenuItem("About")).as_generic());
13    website_store.push(styles.register(StyleSheet("website.css")).as_generic());
14
15    print_state("Original website", &menu, &styles);
16
17    // Loading an extension which registers new resources
18    let mut extension_store = vec![];
19    extension_store.push(menu.register(MenuItem("Weather")).as_generic());
20    extension_store.push(menu.register(MenuItem("News")).as_generic());
21    extension_store.push(styles.register(StyleSheet("extension.css")).as_generic());
22
23    print_state("After extension is loaded", &menu, &styles);
24
25    // Unloading the extension
26    drop(extension_store);
27
28    print_state("After extension is unloaded", &menu, &styles);
29}
30
31fn print_state(step: &'static str, menu: &Registry<MenuItem>, styles: &Registry<StyleSheet>) {
32    println!("{}", step);
33    println!("\tMenu:");
34    for (e, item) in menu.read().iter() {
35        println!("\t\t{}: {}", e, item.0);
36    }
37    println!("\tStyleSheets:");
38    for (e, item) in styles.read().iter() {
39        println!("\t\t{}: {}", e, item.0);
40    }
41}