use crate::{
packages::get_package_share_directory,
resources::{
find_resource, get_resource, get_resources_prefix, has_resource,
list_all_prefixes_of_resources,
},
search_paths::{get_search_paths, get_search_paths_from_var},
};
use std::{collections::HashMap, path::PathBuf};
#[derive(Clone, Debug, PartialEq)]
pub struct Ament {
pub prefixes: Vec<String>,
}
impl Ament {
pub fn new() -> Result<Self, std::env::VarError> {
Ok(Self {
prefixes: get_search_paths()?,
})
}
pub fn from_var(env_var: impl AsRef<str>) -> Result<Self, std::env::VarError> {
Ok(Self {
prefixes: get_search_paths_from_var(env_var)?,
})
}
pub fn get_packages_prefix(&self) -> HashMap<String, String> {
self.get_resources_prefix("packages")
}
pub fn get_packages_prefixes(&self) -> HashMap<String, Vec<String>> {
self.get_resources_prefixes("packages")
}
pub fn get_package_share_directory(&self, package_name: impl AsRef<str>) -> Option<PathBuf> {
get_package_share_directory(package_name, &self.prefixes)
}
pub fn find_package(&self, package_name: impl AsRef<str>) -> Option<String> {
self.find_resource(package_name, "packages")
}
pub fn has_package(&self, package_name: impl AsRef<str>) -> bool {
self.has_resource(package_name, "packages")
}
pub fn get_resource(
&self,
resource_name: impl AsRef<str>,
resource_type: impl AsRef<str>,
) -> Option<(std::io::Result<Vec<u8>>, String)> {
get_resource(resource_name, resource_type, &self.prefixes)
}
pub fn get_resources_prefix(&self, resource_type: impl AsRef<str>) -> HashMap<String, String> {
get_resources_prefix(resource_type, &self.prefixes)
}
pub fn get_resources_prefixes(
&self,
resource_type: impl AsRef<str>,
) -> HashMap<String, Vec<String>> {
list_all_prefixes_of_resources(resource_type, &self.prefixes)
}
pub fn find_resource(
&self,
resource_name: impl AsRef<str>,
resource_type: impl AsRef<str>,
) -> Option<String> {
find_resource(resource_name, resource_type, &self.prefixes)
}
pub fn has_resource(
&self,
resource_name: impl AsRef<str>,
resource_type: impl AsRef<str>,
) -> bool {
has_resource(resource_name, resource_type, &self.prefixes)
}
}