use lerna::package::{
compute_target_path, join_path, parse_package_header, split_path, PackageResolver,
};
use pyo3::prelude::*;
#[pyclass(name = "PackageResolver")]
#[derive(Clone)]
pub struct PyPackageResolver {
inner: PackageResolver,
}
#[pymethods]
impl PyPackageResolver {
#[new]
fn new() -> Self {
Self {
inner: PackageResolver::new(),
}
}
fn with_config_group(&self, group: &str) -> Self {
Self {
inner: self.inner.clone().with_config_group(group),
}
}
fn with_package_override(&self, package: &str) -> Self {
Self {
inner: self.inner.clone().with_package_override(package),
}
}
fn with_header_package(&self, package: &str) -> Self {
Self {
inner: self.inner.clone().with_header_package(package),
}
}
fn resolve(&self) -> String {
self.inner.resolve()
}
}
#[pyfunction]
fn parse_package_from_header(content: &str) -> Option<String> {
parse_package_header(content)
}
#[pyfunction]
fn compute_config_target_path(package: &str, key_path: &str) -> String {
compute_target_path(package, key_path)
}
#[pyfunction]
fn split_dotted_path(path: &str) -> Vec<String> {
split_path(path)
}
#[pyfunction]
fn join_dotted_path(components: Vec<String>) -> String {
join_path(&components)
}
pub fn register(parent: &Bound<'_, PyModule>) -> PyResult<()> {
let m = PyModule::new(parent.py(), "package")?;
m.add_class::<PyPackageResolver>()?;
m.add_function(wrap_pyfunction!(parse_package_from_header, &m)?)?;
m.add_function(wrap_pyfunction!(compute_config_target_path, &m)?)?;
m.add_function(wrap_pyfunction!(split_dotted_path, &m)?)?;
m.add_function(wrap_pyfunction!(join_dotted_path, &m)?)?;
parent.add_submodule(&m)?;
Ok(())
}