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