git.delta.rocks / fleet / refs/commits / 48d120aa4aef

difftreelog

source

remowt/crates/remowt-link-shared/src/plugin.rs1.1 KiBsourcehistory
1use std::future::Future;23use bifrostlink::declarative::endpoints;4use bifrostlink::Config;5use serde::{Deserialize, Serialize};67#[derive(Serialize, Deserialize, Debug, thiserror::Error)]8pub enum Error {9	#[error("plugin name must be a bare file name")]10	BadName,11	#[error("spawning plugin failed: {0}")]12	Spawn(String),13	#[error("failed to wait for connection, plugin process has died?")]14	ConnectionWaitError,15	#[error("agent is shutting down")]16	Gone,17}1819pub trait PluginHost: Send + Sync {20	fn load_plugin(&self, id: u16, name: String) -> impl Future<Output = Result<(), Error>> + Send;2122	fn load_plugin_path(23		&self,24		id: u16,25		path: String,26	) -> impl Future<Output = Result<(), Error>> + Send;27}2829pub struct PluginEndpoints<H>(pub H);3031#[endpoints(ns = 9)]32impl<H: PluginHost + 'static> PluginEndpoints<H> {33	#[endpoints(id = 1)]34	async fn load_plugin(&self, id: u16, name: String) -> Result<(), Error> {35		self.0.load_plugin(id, name).await36	}37	#[endpoints(id = 2)]38	async fn load_plugin_path(&self, id: u16, path: String) -> Result<(), Error> {39		self.0.load_plugin_path(id, path).await40	}41}