action.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // SPDX-FileCopyrightText: 2021 - 2022 Samuel W. Flint <swflint@flintfam.org>
  2. //
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. use serde::{Deserialize, Serialize};
  5. use std::fmt;
  6. use crate::lib::config::Config;
  7. #[derive(Serialize, Deserialize)]
  8. pub struct Action {
  9. #[serde(default)]
  10. name: String,
  11. #[serde(default)]
  12. description: String,
  13. #[serde(default)]
  14. pub command: String,
  15. #[serde(default)]
  16. pub disabled: bool,
  17. }
  18. pub fn add(config: &mut Config, name: &String, description: &String, command: &String) {
  19. let action = Action {
  20. name : name.to_string(),
  21. description: description.to_string(),
  22. command: command.to_string(),
  23. disabled: false
  24. };
  25. config.actions.insert(name.to_string(), action);
  26. config.is_changed = true;
  27. }
  28. pub fn update_disabled(config: &mut Config, name: &String, value: bool) {
  29. let action = config.actions.get_mut(&name.to_string());
  30. match action {
  31. Some(action) => {
  32. action.disabled = value;
  33. config.is_changed = true;
  34. },
  35. None => panic!("No known action named \"{}\".", name)
  36. }
  37. }
  38. pub fn update_description(config: &mut Config, name: &String, description: &String) {
  39. let action = config.actions.get_mut(&name.to_string());
  40. match action {
  41. Some(action) => {
  42. action.description = description.to_string();
  43. config.is_changed = true;
  44. },
  45. None => panic!("No known action named \"{}\".", name)
  46. }
  47. }
  48. pub fn update_command(config: &mut Config, name: &String, command: &String) {
  49. let action = config.actions.get_mut(&name.to_string());
  50. match action {
  51. Some(action) => {
  52. action.command = command.to_string();
  53. config.is_changed = true;
  54. },
  55. None => panic!("No known action named \"{}\".", name)
  56. }
  57. }
  58. impl fmt::Display for Action {
  59. fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  60. write!(f, "Action {}:\n\t\"{}\"\n\tCommand: \"{}\"\n\tDisabled: {}",
  61. self.name,
  62. self.description,
  63. self.command,
  64. self.disabled
  65. )
  66. }
  67. }