Skip to main content

allwright/
lib.rs

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;