From e50c01c0b3345eba37966d162279072d59605d40 Mon Sep 17 00:00:00 2001 From: Jean-Gabriel Gill-Couture Date: Wed, 2 Jul 2025 15:11:03 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20Forgotten=20file=20=F0=9F=99=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- harmony/src/modules/application/feature.rs | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 harmony/src/modules/application/feature.rs diff --git a/harmony/src/modules/application/feature.rs b/harmony/src/modules/application/feature.rs new file mode 100644 index 0000000..9c12553 --- /dev/null +++ b/harmony/src/modules/application/feature.rs @@ -0,0 +1,41 @@ +use async_trait::async_trait; +use serde::Serialize; + +use crate::topology::Topology; +/// An ApplicationFeature provided by harmony, such as Backups, Monitoring, MultisiteAvailability, +/// ContinuousIntegration, ContinuousDelivery +#[async_trait] +pub trait ApplicationFeature: + std::fmt::Debug + Send + Sync + ApplicationFeatureClone +{ + async fn ensure_installed(&self, topology: &T) -> Result<(), String>; + fn name(&self) -> String; +} + +trait ApplicationFeatureClone { + fn clone_box(&self) -> Box>; +} + +impl ApplicationFeatureClone for A +where + A: ApplicationFeature + Clone + 'static, +{ + fn clone_box(&self) -> Box> { + Box::new(self.clone()) + } +} + +impl Serialize for Box> { + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + todo!() + } +} + +impl Clone for Box> { + fn clone(&self) -> Self { + self.clone_box() + } +}