Skip to main content

allwright/
lib.rs

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;