diff options
author | Matthias Beyer <matthias.beyer@ifm.com> | 2022-05-17 14:11:21 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@ifm.com> | 2022-05-17 14:29:49 +0200 |
commit | 2b34ffac50d860d3a4907d15964393a50a98e621 (patch) | |
tree | 199587521a42f9cc83fa94591738387138a1f923 | |
parent | 7b5089ce59809b6ca690d57d5fffea41fc74cc60 (diff) |
plugin_c8y: Implement SM-handling functionality
This patch brings the configuration interface as well as fetching the
address of the plugin that handles SM requests to the c8y plugin
implementation.
Signed-off-by: Matthias Beyer <matthias.beyer@ifm.com>
-rw-r--r-- | plugins/plugin_c8y/src/builder.rs | 11 | ||||
-rw-r--r-- | plugins/plugin_c8y/src/config.rs | 3 | ||||
-rw-r--r-- | plugins/plugin_c8y/src/plugin.rs | 9 |
3 files changed, 19 insertions, 4 deletions
diff --git a/plugins/plugin_c8y/src/builder.rs b/plugins/plugin_c8y/src/builder.rs index 68d683f1..34d89583 100644 --- a/plugins/plugin_c8y/src/builder.rs +++ b/plugins/plugin_c8y/src/builder.rs @@ -7,10 +7,16 @@ use tedge_api::PluginError; use tedge_api::plugin::BuiltPlugin; use tedge_api::plugin::HandleTypes; use tedge_api::plugin::PluginExt; +use tedge_lib::sm::request::Install; +use tedge_lib::sm::request::List; +use tedge_lib::sm::request::Uninstall; +use tedge_lib::sm::request::Update; use crate::config::C8yConfig; use crate::plugin::C8yPlugin; +tedge_api::make_receiver_bundle!(pub struct SmReceiver(List, Install, Update, Uninstall)); + pub struct C8yPluginBuilder; #[async_trait] @@ -49,13 +55,14 @@ where &self, config: PluginConfiguration, _cancellation_token: CancellationToken, - _plugin_dir: &PD, + plugin_dir: &PD, ) -> Result<BuiltPlugin, PluginError> { let config = config .try_into::<C8yConfig>() .map_err(crate::error::Error::ConfigParseFailed)?; - Ok(C8yPlugin::new(config).finish()) + let sm_addr = plugin_dir.get_address_for::<SmReceiver>(&config.sm_plugin_name)?; + Ok(C8yPlugin::new(config, sm_addr).finish()) } } diff --git a/plugins/plugin_c8y/src/config.rs b/plugins/plugin_c8y/src/config.rs index 7c9d2330..461bc91a 100644 --- a/plugins/plugin_c8y/src/config.rs +++ b/plugins/plugin_c8y/src/config.rs @@ -1,5 +1,6 @@ #[derive(serde::Deserialize, Debug, tedge_api::Config)] pub struct C8yConfig { - // currently empty + /// Name of the plugin that handles software-management operations + pub(crate) sm_plugin_name: String, } diff --git a/plugins/plugin_c8y/src/plugin.rs b/plugins/plugin_c8y/src/plugin.rs index 31d104ca..239cccd7 100644 --- a/plugins/plugin_c8y/src/plugin.rs +++ b/plugins/plugin_c8y/src/plugin.rs @@ -1,5 +1,6 @@ use async_trait::async_trait; +use tedge_api::Address; use tedge_api::address::ReplySenderFor; use tedge_api::plugin::Handle; use tedge_api::Plugin; @@ -12,12 +13,16 @@ use crate::config::C8yConfig; #[derive(Debug)] pub struct C8yPlugin { config: C8yConfig, + + #[allow(unused)] + sm_plugin_name: Address<crate::builder::SmReceiver>, } impl C8yPlugin { - pub(crate) fn new(config: C8yConfig) -> Self { + pub(crate) fn new(config: C8yConfig, sm_plugin_name: Address<crate::builder::SmReceiver>) -> Self { Self { config, + sm_plugin_name, } } } @@ -30,6 +35,8 @@ impl tedge_api::plugin::PluginDeclaration for C8yPlugin { impl Plugin for C8yPlugin { #[tracing::instrument(name = "plugin.c8y.start", skip(self))] async fn start(&mut self) -> Result<(), PluginError> { + // TODO: start some mainloop that handles incoming requests from c8y and passes SM requests + // via self.sm_plugin_name.send_and_wait() to the SM plugin. Ok(()) } |