use-python 0.0.1

Facade crate for RustUse Python ecosystem primitives
Documentation
#![forbid(unsafe_code)]
#![doc = include_str!("../README.md")]

pub use use_python_version::*;

pub use use_python_identifier::*;

pub use use_python_keyword::*;

pub use use_python_value::*;

pub use use_python_module::*;

pub use use_pyproject::*;

pub use use_pip::*;

pub use use_uv::*;

pub use use_venv::*;

pub use use_pytest::*;

#[cfg(test)]
mod tests {
    use super::{
        PipRequirement, PyProject, PyProjectProjectMetadata, PytestMarkerName, PythonIdentifier,
        PythonImplementation, PythonKeyword, PythonModuleName, PythonPrimitiveValue, PythonVersion,
        PythonVirtualEnvKind, PythonVirtualEnvName, UvPackageSpec,
    };

    #[test]
    fn facade_exposes_every_child_crate() -> Result<(), Box<dyn std::error::Error>> {
        let version: PythonVersion = "3.12.1".parse()?;
        let identifier = PythonIdentifier::new("async_task")?;
        let module = PythonModuleName::new("package.module")?;
        let project =
            PyProject::new().with_project(PyProjectProjectMetadata::new().with_name("demo")?);
        let requirement = PipRequirement::new("requests>=2")?;
        let package = UvPackageSpec::new("ruff>=0.4")?;
        let env_name = PythonVirtualEnvName::new(".venv")?;
        let marker = PytestMarkerName::new("slow")?;

        assert!(version.is_python3());
        assert_eq!(identifier.as_str(), "async_task");
        assert_eq!(PythonKeyword::Return.as_str(), "return");
        assert_eq!(PythonPrimitiveValue::None.type_name(), "NoneType");
        assert_eq!(module.as_str(), "package.module");
        assert_eq!(project.project_name(), Some("demo"));
        assert_eq!(requirement.as_str(), "requests>=2");
        assert_eq!(package.as_str(), "ruff>=0.4");
        assert_eq!(env_name.as_str(), ".venv");
        assert_eq!(marker.as_str(), "slow");
        assert_eq!(PythonImplementation::CPython.as_str(), "cpython");
        assert_eq!(PythonVirtualEnvKind::Venv.as_str(), "venv");
        Ok(())
    }
}