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;