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