pub struct Manifest {
pub description: String,
pub version: String,
pub author: Option<String>,
pub homepage: Option<String>,
pub license: Option<String>,
pub binaries: Binaries,
pub viewer_zip: Option<String>,
pub viewer_routes: Vec<ViewerRoute>,
pub mobile_ready: bool,
}Expand description
Declarative metadata a plugin ships with itself. The wire shape is
JSON; the on-disk convention (sibling file, embedded resource,
--manifest flag, …) is deliberately out of scope of this struct
and will be settled in a follow-up.
Fields§
§description: StringOne-line description of what the plugin does. Surfaced in
listings and the plugin’s --help-equivalent UI.
version: StringVersion string. Semver convention is recommended but not enforced — the host just displays whatever’s here.
Author or authors of the plugin. Free-form string.
homepage: Option<String>Homepage or repository URL.
license: Option<String>SPDX license identifier (or any string).
binaries: BinariesRelease-asset filename per platform — what the cli should
download from the GitHub release tagged v<version> to install
the plugin’s binary on each platform. Values are filenames
(e.g. psyops-linux-x86_64, psyops-windows-x86_64.exe), NOT
URLs; the URL is composed from the repository + tag + asset
name elsewhere.
Every platform field is optional. Declare entries only for the platforms this plugin actually ships a binary for; absent platforms are simply not supported by this release. A plugin shipping only Linux x86_64 declares one entry; a plugin shipping all six declares six. All-None ↔ field omitted in the wire shape.
viewer_zip: Option<String>GitHub-release asset filename for the plugin’s viewer UI
bundle (a .zip whose root contains index.html plus
assets). When absent, the plugin has no viewer tab and the
viewer’s startup scan ignores it for UI purposes.
viewer_routes: Vec<ViewerRoute>HTTP routes the viewer exposes on behalf of this plugin.
Each entry registers a handler at
/plugin/<repository>/<path> on the viewer’s embedded axum
server; a hit emits a PluginRequest { type, value } event
to the React frontend, which dispatches to the plugin’s
iframe via the postMessage bridge.
mobile_ready: boolPlugin author opts in to mobile viewer support by setting this. Mobile viewer builds only surface plugins with this flag true — mobile has no local backend binary, so plugin UIs that require a backend will misbehave unless their authors specifically design for “no-backend” mode. Defaults to false (desktop-only).
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Manifest
impl<'de> Deserialize<'de> for Manifest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for Manifest
impl JsonSchema for Manifest
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for Manifest
impl RefUnwindSafe for Manifest
impl Send for Manifest
impl Sync for Manifest
impl Unpin for Manifest
impl UnsafeUnpin for Manifest
impl UnwindSafe for Manifest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more