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