miho 8.2.1

Repository management tools
#[macro_export]
macro_rules! command {
  ($program:expr) => {{
    #[cfg(target_os = "windows")]
    {
      let mut cmd = tokio::process::Command::new("pwsh");
      cmd.args(&["-Command", $program]);
      cmd
    }

    #[cfg(not(target_os = "windows"))]
    tokio::process::Command::new($program)
  }};
}

#[macro_export]
macro_rules! return_if_ne {
  ($ord:expr) => {
    let ord = $ord;
    if ord != std::cmp::Ordering::Equal {
      return ord;
    }
  };
}

#[macro_export]
macro_rules! search_packages {
  ($command:expr) => {{
    use itertools::Itertools;

    let path = $command
      .path
      .as_deref()
      .expect("should have `.` as the default value")
      .iter()
      .map(|it| it.as_path())
      .collect_vec();

    let mut builder = $crate::package::SearchBuilder::new(&path);
    if let Some(packages) = $command.package.as_deref() {
      let packages = packages
        .iter()
        .map(|it| it.as_str())
        .collect_vec();

      builder = builder.package(&packages);
    }

    if let Some(agents) = $command.agent.as_deref() {
      let agents = agents
        .iter()
        .map(|it| it.as_str())
        .collect_vec();

      builder = builder.agent(&agents);
    }

    builder.search()?
  }};
}