enhance.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. use super::prfitem::PrfItem;
  2. use crate::utils::{config, dirs};
  3. use serde::{Deserialize, Serialize};
  4. use serde_yaml::Mapping;
  5. use std::fs;
  6. #[derive(Default, Debug, Clone, Serialize, Deserialize)]
  7. pub struct PrfEnhanced {
  8. pub current: Mapping,
  9. pub chain: Vec<PrfData>,
  10. pub valid: Vec<String>,
  11. pub callback: String,
  12. }
  13. #[derive(Default, Debug, Clone, Serialize, Deserialize)]
  14. pub struct PrfEnhancedResult {
  15. pub data: Option<Mapping>,
  16. pub status: String,
  17. pub error: Option<String>,
  18. }
  19. #[derive(Default, Debug, Clone, Serialize, Deserialize)]
  20. pub struct PrfData {
  21. item: PrfItem,
  22. #[serde(skip_serializing_if = "Option::is_none")]
  23. merge: Option<Mapping>,
  24. #[serde(skip_serializing_if = "Option::is_none")]
  25. script: Option<String>,
  26. }
  27. impl PrfData {
  28. pub fn from_item(item: &PrfItem) -> Option<PrfData> {
  29. match item.itype.as_ref() {
  30. Some(itype) => {
  31. let file = item.file.clone()?;
  32. let path = dirs::app_profiles_dir().join(file);
  33. if !path.exists() {
  34. return None;
  35. }
  36. match itype.as_str() {
  37. "script" => Some(PrfData {
  38. item: item.clone(),
  39. script: Some(fs::read_to_string(path).unwrap_or("".into())),
  40. merge: None,
  41. }),
  42. "merge" => Some(PrfData {
  43. item: item.clone(),
  44. merge: Some(config::read_yaml::<Mapping>(path)),
  45. script: None,
  46. }),
  47. _ => None,
  48. }
  49. }
  50. None => None,
  51. }
  52. }
  53. }