OWNERSHIP FIX: structs with Arc<str> (instead of &'_ str)

feature/configv2
prplV 2025-05-04 08:59:25 -04:00
parent 6d56d1e39c
commit 052448a7b9
1 changed files with 24 additions and 23 deletions

View File

@ -3,6 +3,7 @@
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use async_trait::async_trait; use async_trait::async_trait;
use std::sync::Arc;
pub enum DependencyType { pub enum DependencyType {
File, File,
@ -37,44 +38,44 @@ impl std::fmt::Display for FileTriggerType {
} }
impl<'a> FileTriggerType { impl<'a> FileTriggerType {
pub fn event(&self, file_name: &'a str, trigger: &'a str) -> Events<'a> { pub fn event(&self, file_name: Arc<str>, trigger: Arc<str>) -> Events {
return match self { return match self {
FileTriggerType::OnChange => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger)), FileTriggerType::OnChange => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger)),
FileTriggerType::OnDelete => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger)), FileTriggerType::OnDelete => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger)),
} }
} }
pub fn event_from_file_trigger_controller(&self, file_name: &'a str, trigger: &FileTriggersForController<'a>) -> Events<'a> { pub fn event_from_file_trigger_controller(&self, file_name: Arc<str>, trigger: &FileTriggersForController) -> Events {
return match self { return match self {
FileTriggerType::OnChange => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger.on_change)), FileTriggerType::OnChange => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger.on_change.clone())),
FileTriggerType::OnDelete => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger.on_delete)), FileTriggerType::OnDelete => Events::Negative(NegativeOutcomes::FileWasChanged(file_name, DependencyType::File, trigger.on_delete.clone())),
} }
} }
} }
#[derive(Debug)] #[derive(Debug)]
pub enum Triggers<'a> { pub enum Triggers {
File{ on_change: &'a str, on_delete: &'a str }, File { on_change: Arc<str>, on_delete: Arc<str> },
Service{on_lost: &'a str, wait: u32}, Service {on_lost: Arc<str>, wait: u32},
} }
impl<'a> Triggers<'a> { impl Triggers {
pub fn new_file(on_change: &'a str, on_delete: &'a str) -> Triggers<'a> { pub fn new_file(on_change: Arc<str>, on_delete: Arc<str>) -> Triggers {
Triggers::File { on_change, on_delete } Triggers::File { on_change, on_delete }
} }
pub fn new_service(on_lost: &'a str, wait_time: u32) -> Triggers<'a> { pub fn new_service(on_lost: Arc<str>, wait_time: u32) -> Triggers {
Triggers::Service{on_lost, wait: wait_time} Triggers::Service{on_lost, wait: wait_time}
} }
pub fn to_service_negative_event(&'a self, service_name: &'a str) -> Option<Events<'a>> { pub fn to_service_negative_event(&self, service_name: Arc<str>) -> Option<Events> {
if let Triggers::Service { on_lost, .. } = self { if let Triggers::Service { on_lost, .. } = self {
return Some(Events::Negative(NegativeOutcomes::ServiceIsUnreachable(service_name, DependencyType::Service, &on_lost))) return Some(Events::Negative(NegativeOutcomes::ServiceIsUnreachable(service_name, DependencyType::Service, on_lost.clone())))
} }
None None
} }
} }
#[derive(Debug)] #[derive(Debug)]
pub struct FileTriggersForController<'a> { pub on_change: &'a str, pub on_delete: &'a str } pub struct FileTriggersForController{ pub on_change: Arc<str>, pub on_delete: Arc<str> }
pub struct ServiceTriggersForController<'a>(&'a str); pub struct ServiceTriggersForController(Arc<str>);
impl std::fmt::Display for DependencyType { impl std::fmt::Display for DependencyType {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
@ -92,19 +93,19 @@ pub enum ProcessState {
Stopped, Stopped,
StoppedByCli, StoppedByCli,
} }
pub enum Events<'a> { pub enum Events {
Positive(&'a str), Positive(Arc<str>),
Negative(NegativeOutcomes<'a>) Negative(NegativeOutcomes)
} }
pub enum NegativeOutcomes<'a> { pub enum NegativeOutcomes {
FileWasChanged(&'a str, DependencyType, &'a str), FileWasChanged(Arc<str>, DependencyType, Arc<str>),
FileWasMovedOrDeleted(&'a str, DependencyType, &'a str), FileWasMovedOrDeleted(Arc<str>, DependencyType, Arc<str>),
ServiceIsUnreachable(&'a str, DependencyType, &'a str), ServiceIsUnreachable(Arc<str>, DependencyType, Arc<str>),
} }
#[async_trait] #[async_trait]
pub trait ProcessUnit<'a> { pub trait ProcessUnit {
async fn process(&'a mut self); async fn process(&mut self);
} }
/// # an Error enum (next will be deleted and replaced) /// # an Error enum (next will be deleted and replaced)
pub enum CustomError { pub enum CustomError {