mod.rs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. use super::graph::Graph;
  2. use super::parse_util::UnitParseUtil;
  3. use super::UnitParser;
  4. use crate::error::parse_error::ParseError;
  5. use crate::manager::UnitManager;
  6. use crate::unit::service::{self, ServiceUnit};
  7. #[cfg(target_os = "dragonos")]
  8. use drstd as std;
  9. use std::any::Any;
  10. use std::rc::Rc;
  11. use std::string::ToString;
  12. use std::sync::Arc;
  13. pub struct ServiceParser;
  14. impl ServiceParser {
  15. /// @brief 解析Service类型Unit的
  16. ///
  17. /// 从path解析Service类型Unit
  18. ///
  19. /// @param path 需解析的文件路径
  20. ///
  21. /// @return 成功则返回Ok(Rc<ServiceUnit>),否则返回Err
  22. pub fn parse(path: &str) -> Result<usize, ParseError> {
  23. //预先检查是否存在循环依赖
  24. let mut graph = Graph::construct_graph(path.to_string())?;
  25. let ret = graph.topological_sort()?;
  26. for p in ret {
  27. let temp_unit = UnitParseUtil::parse_unit_no_type(&p)?;
  28. }
  29. let result = UnitManager::get_id_with_path(path).unwrap();
  30. return Ok(result);
  31. }
  32. }