From 7b0575da1b4d2914120d15b2b623be0b9cdce444 Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Wed, 10 May 2017 10:54:15 +0200 Subject: [PATCH] Simpler Resource --- src/resources/mod.rs | 46 +++++++-------------- src/symbols/acme/cert.rs | 6 +-- src/symbols/file.rs | 7 ++-- src/symbols/hook.rs | 2 +- src/symbols/list.rs | 1 + src/symbols/mod.rs | 2 +- src/symbols/nginx/server.rs | 2 +- src/symbols/systemd/node_js_user_service.rs | 6 +-- src/symbols/tls/csr.rs | 6 +-- src/symbols/tls/self_signed_cert.rs | 6 +-- 10 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/resources/mod.rs b/src/resources/mod.rs index 420dd72..5a9e048 100644 --- a/src/resources/mod.rs +++ b/src/resources/mod.rs @@ -1,33 +1,15 @@ -use std::borrow::Cow; - -pub trait Resource { - fn get_type(&self) -> &str; - fn get_value(&self) -> &str; -} - -pub struct UserResource<'a> { - pub name: &'a str -} - -impl<'a> Resource for UserResource<'a> { - fn get_type(&self) -> &str { "user" } - fn get_value(&self) -> &str { self.name } -} - -pub struct DirResource<'a> { - pub path: Cow<'a, str> -} - -impl<'a> Resource for DirResource<'a> { - fn get_type(&self) -> &str { "dir" } - fn get_value(&self) -> &str { &*self.path } -} - -pub struct FileResource<'a> { - pub path: Cow<'a, str> -} - -impl<'a> Resource for FileResource<'a> { - fn get_type(&self) -> &str { "file" } - fn get_value(&self) -> &str { &*self.path } +#[derive(PartialEq, Eq, Hash, Clone)] +pub struct Resource(pub String, pub String); + +impl<'a> Resource { + pub fn new, B: Into>(rtype: A, value: B) -> Self { + Resource(rtype.into(), value.into()) + } + + pub fn get_type(&self) -> &str { + &self.0 + } + pub fn get_value(&self) -> &str { + &self.1 + } } diff --git a/src/symbols/acme/cert.rs b/src/symbols/acme/cert.rs index 49257b2..8e603f6 100644 --- a/src/symbols/acme/cert.rs +++ b/src/symbols/acme/cert.rs @@ -6,7 +6,7 @@ use std::io::{self, Write}; use command_runner::CommandRunner; use symbols::Symbol; -use resources::{FileResource, Resource}; +use resources::Resource; pub struct AcmeCert<'a> { domain: Cow<'a, str>, @@ -72,8 +72,8 @@ impl<'a> Symbol for AcmeCert<'a> { Ok(()) } - fn get_prerequisites(&self) -> Vec> { - vec![Box::new(FileResource { path: self.get_csr_path().into() })] + fn get_prerequisites(&self) -> Vec { + vec![ Resource::new("file", self.get_csr_path()) ] } } diff --git a/src/symbols/file.rs b/src/symbols/file.rs index 3be43a9..68e971c 100644 --- a/src/symbols/file.rs +++ b/src/symbols/file.rs @@ -7,7 +7,7 @@ use std::ops::Deref; use std::path::Path; use symbols::Symbol; -use resources::{DirResource, Resource}; +use resources::Resource; pub struct File where C: Deref, D: AsRef + fmt::Display { path: D, @@ -53,9 +53,8 @@ impl Symbol for File where C: Deref, D: AsRef + fmt Ok(()) } - fn get_prerequisites(&self) -> Vec> { - vec![ - Box::new(DirResource { path: String::from(Path::new(self.path.as_ref()).parent().unwrap().to_string_lossy()).into() }) ] + fn get_prerequisites(&self) -> Vec { + vec![ Resource::new("dir", Path::new(self.path.as_ref()).parent().unwrap().to_string_lossy() ) ] } } diff --git a/src/symbols/hook.rs b/src/symbols/hook.rs index e1ad0df..61b5618 100644 --- a/src/symbols/hook.rs +++ b/src/symbols/hook.rs @@ -25,7 +25,7 @@ impl Symbol for Hook where A: Symbol, B: Symbol { self.b.execute() } - fn get_prerequisites(&self) -> Vec> { + fn get_prerequisites(&self) -> Vec { let mut r = vec![]; r.extend(self.a.get_prerequisites().into_iter()); r.extend(self.b.get_prerequisites().into_iter()); diff --git a/src/symbols/list.rs b/src/symbols/list.rs index 1a2f471..056a418 100644 --- a/src/symbols/list.rs +++ b/src/symbols/list.rs @@ -1,6 +1,7 @@ use std::error::Error; use std::fmt; +use resources::Resource; use symbols::Symbol; pub struct List<'a> { diff --git a/src/symbols/mod.rs b/src/symbols/mod.rs index d70b095..b697443 100644 --- a/src/symbols/mod.rs +++ b/src/symbols/mod.rs @@ -5,7 +5,7 @@ use resources::Resource; pub trait Symbol: Display { fn target_reached(&self) -> Result>; fn execute(&self) -> Result<(), Box>; - fn get_prerequisites(&self) -> Vec> { + fn get_prerequisites(&self) -> Vec { vec![] } } diff --git a/src/symbols/nginx/server.rs b/src/symbols/nginx/server.rs index 8b80f3c..6406ed2 100644 --- a/src/symbols/nginx/server.rs +++ b/src/symbols/nginx/server.rs @@ -144,7 +144,7 @@ impl<'a, C> Symbol for NginxServer<'a, C> where C: Deref { Ok(()) } - fn get_prerequisites(&self) -> Vec> { + fn get_prerequisites(&self) -> Vec { self.file.get_prerequisites() } } diff --git a/src/symbols/systemd/node_js_user_service.rs b/src/symbols/systemd/node_js_user_service.rs index b5dc221..284009d 100644 --- a/src/symbols/systemd/node_js_user_service.rs +++ b/src/symbols/systemd/node_js_user_service.rs @@ -9,7 +9,7 @@ use std::time::Duration; use std::ops::Deref; use command_runner::CommandRunner; -use resources::{ FileResource, Resource }; +use resources::Resource; use symbols::Symbol; use symbols::file::File as FileSymbol; @@ -156,8 +156,8 @@ impl<'a, C> Symbol for NodeJsSystemdUserService<'a, C> where C: Deref Vec> { - let mut r: Vec> = vec![ Box::new(FileResource { path: ("/var/lib/systemd/linger/".to_string() + self.user_name).into() }) ]; + fn get_prerequisites(&self) -> Vec { + let mut r = vec![ Resource::new("file", format!("/var/lib/systemd/linger/{}", self.user_name)) ]; r.extend(self.file.get_prerequisites().into_iter()); r } diff --git a/src/symbols/tls/csr.rs b/src/symbols/tls/csr.rs index 9cc24b1..a9a692b 100644 --- a/src/symbols/tls/csr.rs +++ b/src/symbols/tls/csr.rs @@ -3,7 +3,7 @@ use std::error::Error; use std::fmt; use command_runner::CommandRunner; -use resources::{Resource, FileResource}; +use resources::Resource; use symbols::Symbol; pub struct TlsCsr<'a> { @@ -52,8 +52,8 @@ impl<'a> Symbol for TlsCsr<'a> { Ok(()) } - fn get_prerequisites(&self) -> Vec> { - vec![Box::new(FileResource { path: self.get_key_path().into() })] + fn get_prerequisites(&self) -> Vec { + vec![Resource::new("file", self.get_key_path())] } } diff --git a/src/symbols/tls/self_signed_cert.rs b/src/symbols/tls/self_signed_cert.rs index 9987dbd..a385335 100644 --- a/src/symbols/tls/self_signed_cert.rs +++ b/src/symbols/tls/self_signed_cert.rs @@ -3,7 +3,7 @@ use std::error::Error; use std::fmt; use command_runner::CommandRunner; -use resources::{Resource, FileResource}; +use resources::Resource; use symbols::Symbol; pub struct SelfSignedTlsCert<'a> { @@ -57,8 +57,8 @@ impl<'a> Symbol for SelfSignedTlsCert<'a> { } } - fn get_prerequisites(&self) -> Vec> { - vec![Box::new(FileResource { path: self.get_key_path().into() })] + fn get_prerequisites(&self) -> Vec { + vec![Resource::new("file", self.get_key_path())] } }