A library for writing host-specific, single-binary configuration management and deployment tools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.7 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
7 years ago
7 years ago
8 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. use std::error::Error;
  2. use std::fmt::Display;
  3. use resources::Resource;
  4. pub trait Action {
  5. fn run(&self) -> Result<(), Box<Error>>;
  6. }
  7. pub trait SymbolRunner {
  8. fn run_symbol(&self, symbol: &Symbol) -> Result<(), Box<Error>>;
  9. }
  10. // Symbol
  11. pub trait Symbol: Display {
  12. fn target_reached(&self) -> Result<bool, Box<Error>>;
  13. fn execute(&self) -> Result<(), Box<Error>>;
  14. fn get_prerequisites(&self) -> Vec<Resource> {
  15. vec![]
  16. }
  17. fn provides(&self) -> Option<Vec<Resource>> {
  18. None
  19. }
  20. fn as_action<'a>(&'a self, runner: &'a SymbolRunner) -> Box<Action + 'a>;
  21. fn into_action<'a>(self: Box<Self>, runner: &'a SymbolRunner) -> Box<Action + 'a> where Self: 'a;
  22. }
  23. // SymbolAction
  24. struct SymbolAction<'a, S: Symbol + 'a> {
  25. runner: &'a SymbolRunner,
  26. symbol: &'a S
  27. }
  28. impl<'a, S: Symbol> SymbolAction<'a, S> {
  29. fn new(runner: &'a SymbolRunner, symbol: &'a S) -> Self {
  30. Self { runner: runner, symbol: symbol }
  31. }
  32. }
  33. impl<'a, S: Symbol> Action for SymbolAction<'a, S> {
  34. fn run(&self) -> Result<(), Box<Error>> {
  35. self.runner.run_symbol(self.symbol)
  36. }
  37. }
  38. struct OwnedSymbolAction<'a, S: Symbol + 'a> {
  39. runner: &'a SymbolRunner,
  40. symbol: S
  41. }
  42. impl<'a, S: Symbol + 'a> OwnedSymbolAction<'a, S> {
  43. fn new(runner: &'a SymbolRunner, symbol: S) -> Self {
  44. Self { runner: runner, symbol: symbol }
  45. }
  46. }
  47. impl<'a, S: Symbol + 'a> Action for OwnedSymbolAction<'a, S> {
  48. fn run(&self) -> Result<(), Box<Error>> {
  49. self.runner.run_symbol(&self.symbol)
  50. }
  51. }
  52. pub mod acme;
  53. pub mod dir;
  54. pub mod file;
  55. pub mod git;
  56. pub mod hook;
  57. pub mod if_already_present;
  58. pub mod list;
  59. pub mod mariadb;
  60. pub mod nginx;
  61. pub mod npm;
  62. pub mod owner;
  63. pub mod stored_directory;
  64. pub mod systemd;
  65. pub mod tls;
  66. pub mod user;
  67. pub mod wordpress;