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;