ito_core/viewer/
registry.rs1use super::{BatViewer, GlowViewer, HtmlViewer, ViewerBackend};
2
3pub struct ViewerRegistry {
5 viewers: Vec<Box<dyn ViewerBackend>>,
6}
7
8impl ViewerRegistry {
9 pub fn new(viewers: Vec<Box<dyn ViewerBackend>>) -> Self {
11 Self { viewers }
12 }
13
14 pub fn for_proposals() -> Self {
16 Self::new(vec![
17 Box::new(BatViewer),
18 Box::new(GlowViewer),
19 Box::new(HtmlViewer),
20 ])
21 }
22
23 pub fn available_viewers(&self) -> Vec<&dyn ViewerBackend> {
25 let mut available = Vec::new();
26 for viewer in &self.viewers {
27 let viewer = viewer.as_ref();
28 if viewer.is_available() {
29 available.push(viewer);
30 }
31 }
32 available
33 }
34
35 pub fn find_by_name(&self, name: &str) -> Option<&dyn ViewerBackend> {
37 for viewer in &self.viewers {
38 let viewer = viewer.as_ref();
39 if viewer.name() == name {
40 return Some(viewer);
41 }
42 }
43 None
44 }
45}