Skip to content

Commit

Permalink
plugin trait sources reorganised
Browse files Browse the repository at this point in the history
  • Loading branch information
milyin committed Nov 10, 2023
1 parent 515d63e commit 85193fb
Show file tree
Hide file tree
Showing 11 changed files with 495 additions and 453 deletions.
4 changes: 2 additions & 2 deletions plugins/zenoh-backend-traits/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use serde_json::{Map, Value};
use std::convert::TryFrom;
use std::time::Duration;
use zenoh::{key_expr::keyexpr, prelude::OwnedKeyExpr, Result as ZResult};
use zenoh_plugin_trait::{CompatibilityVersion, PluginStartArgs};
use zenoh_plugin_trait::{PluginStructVersion, PluginStartArgs};
use zenoh_result::{bail, zerror, Error};

#[derive(JsonSchema, Debug, Clone, AsMut, AsRef)]
Expand Down Expand Up @@ -69,7 +69,7 @@ pub struct ReplicaConfig {
pub delta: Duration,
}

impl CompatibilityVersion for VolumeConfig {
impl PluginStructVersion for VolumeConfig {
fn version() -> u64 {
1
}
Expand Down
4 changes: 2 additions & 2 deletions plugins/zenoh-backend-traits/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ use zenoh::queryable::ReplyBuilder;
use zenoh::time::Timestamp;
use zenoh::value::Value;
pub use zenoh::Result as ZResult;
use zenoh_plugin_trait::{concat_enabled_features, CompatibilityVersion, PluginControl, PluginInstance};
use zenoh_plugin_trait::{concat_enabled_features, PluginStructVersion, PluginControl, PluginInstance};

pub mod config;
use config::{StorageConfig, VolumeConfig};
Expand Down Expand Up @@ -224,7 +224,7 @@ pub trait Volume: Send + Sync {

pub type VolumePlugin = Box<dyn Volume + 'static>;

impl CompatibilityVersion for VolumePlugin {
impl PluginStructVersion for VolumePlugin {
fn version() -> u64 {
1
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/zenoh-plugin-storage-manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ impl Plugin for StoragesPlugin {
}
}

type PluginsManager = zenoh_plugin_trait::loading::PluginsManager<VolumeConfig, VolumePlugin>;
type PluginsManager = zenoh_plugin_trait::PluginsManager<VolumeConfig, VolumePlugin>;

struct StorageRuntime(Arc<Mutex<StorageRuntimeInner>>);
struct StorageRuntimeInner {
Expand Down
47 changes: 12 additions & 35 deletions plugins/zenoh-plugin-trait/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,17 @@
//!
//! If building a plugin for [`zenohd`](https://crates.io/crates/zenoh), you should use the types exported in [`zenoh::plugins`](https://docs.rs/zenoh/latest/zenoh/plugins) to fill [`Plugin`]'s associated types.
//! To check your plugin typing for `zenohd`, have your plugin implement [`zenoh::plugins::ZenohPlugin`](https://docs.rs/zenoh/latest/zenoh/plugins/struct.ZenohPlugin)
pub mod loading;
pub mod vtable;

use std::borrow::Cow;
//!
mod loading;
mod plugin;
mod vtable;

use zenoh_result::ZResult;

pub mod prelude {
pub use crate::{concat_enabled_features, loading::*, vtable::*, CompatibilityVersion, Plugin};
}
pub use loading::{DeclaredPlugin, LoadedPlugin, PluginsManager, StartedPlugin};
pub use plugin::{
Plugin, PluginCondition, PluginConditionSetter, PluginControl, PluginInfo, PluginInstance,
PluginStartArgs, PluginState, PluginStatus, PluginStructVersion,
};
pub use vtable::{Compatibility, PluginLoaderVersion, PluginVTable, PLUGIN_LOADER_VERSION};

#[macro_export]
macro_rules! concat_enabled_features {
Expand All @@ -41,29 +42,5 @@ macro_rules! concat_enabled_features {
};
}

pub trait CompatibilityVersion {
/// The version of the structure implementing this trait. After any channge in the structure or it's dependencies
/// whcich may affect the ABI, this version should be incremented.
fn version() -> u64;
/// The features enabled during comiplation of the structure implementing this trait.
/// Different features between the plugin and the host may cuase ABI incompatibility even if the structure version is the same.
/// Use `concat_enabled_features!` to generate this string
fn features() -> &'static str;
}

pub trait PluginControl {
fn plugins(&self) -> Vec<Cow<'static,str>>;
// fn status(&self, name: &str) -> PluginStatus;
}

pub trait PluginStartArgs : CompatibilityVersion {}
pub trait PluginInstance : CompatibilityVersion + PluginControl + Send {}

pub trait Plugin: Sized + 'static {
type StartArgs: PluginStartArgs;
type Instance: PluginInstance;
/// Your plugins' default name when statically linked.
const STATIC_NAME: &'static str;
/// Starts your plugin. Use `Ok` to return your plugin's control structure
fn start(name: &str, args: &Self::StartArgs) -> ZResult<Self::Instance>;
}
pub const FEATURES: &str =
concat_enabled_features!(prefix = "zenoh-plugin-trait", features = ["default"]);
Loading

0 comments on commit 85193fb

Please sign in to comment.