Skip to main content

allwright/
lib.rs

1#[cfg(feature = "client")]
2mod client;
3#[cfg(feature = "server")]
4#[path = "engine.rs"]
5mod engine_lib;
6#[cfg(feature = "server")]
7mod plugin_loader;
8
9pub mod proto {
10    include!("proto_generated.rs");
11}
12
13pub mod plugins {
14    pub use allwright_plugin_sdk::{SurfaceFamily, SurfacePluginDescriptor};
15
16    #[derive(Debug, Clone, Copy, PartialEq, Eq)]
17    pub struct PluginPackage {
18        pub id: &'static str,
19        pub family: SurfaceFamily,
20        pub package_name: &'static str,
21        pub version: &'static str,
22        pub description: &'static str,
23    }
24
25    const PLUGINS: [PluginPackage; 6] = [
26        PluginPackage {
27            id: "web",
28            family: SurfaceFamily::Web,
29            package_name: "allwright-surface-web",
30            version: env!("CARGO_PKG_VERSION"),
31            description: "Web surface plugin for the allwright engine.",
32        },
33        PluginPackage {
34            id: "mobile-android",
35            family: SurfaceFamily::Mobile,
36            package_name: "allwright-surface-mobile-android",
37            version: env!("CARGO_PKG_VERSION"),
38            description: "Android mobile surface plugin for the allwright engine.",
39        },
40        PluginPackage {
41            id: "mobile-ios",
42            family: SurfaceFamily::Mobile,
43            package_name: "allwright-surface-mobile-ios",
44            version: env!("CARGO_PKG_VERSION"),
45            description: "iOS mobile surface plugin for the allwright engine.",
46        },
47        PluginPackage {
48            id: "desktop-mac",
49            family: SurfaceFamily::Desktop,
50            package_name: "allwright-surface-desktop-mac",
51            version: env!("CARGO_PKG_VERSION"),
52            description: "macOS desktop surface plugin for the allwright engine.",
53        },
54        PluginPackage {
55            id: "desktop-windows",
56            family: SurfaceFamily::Desktop,
57            package_name: "allwright-surface-desktop-windows",
58            version: env!("CARGO_PKG_VERSION"),
59            description: "Windows desktop surface plugin for the allwright engine.",
60        },
61        PluginPackage {
62            id: "desktop-linux",
63            family: SurfaceFamily::Desktop,
64            package_name: "allwright-surface-desktop-linux",
65            version: env!("CARGO_PKG_VERSION"),
66            description: "Linux desktop surface plugin for the allwright engine.",
67        },
68    ];
69
70    pub fn catalog() -> &'static [PluginPackage] {
71        &PLUGINS
72    }
73
74    pub fn package(plugin_id: &str) -> Option<&'static PluginPackage> {
75        catalog().iter().find(|plugin| plugin.id == plugin_id)
76    }
77
78    pub fn descriptors() -> Vec<SurfacePluginDescriptor> {
79        catalog()
80            .iter()
81            .map(|plugin| SurfacePluginDescriptor {
82                id: plugin.id,
83                family: plugin.family,
84                version: plugin.version,
85                description: plugin.description,
86            })
87            .collect()
88    }
89}
90
91#[cfg(feature = "client")]
92pub use client::*;
93#[cfg(feature = "server")]
94pub use engine_lib::serve;