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