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