1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use core::{RpPackage, RpVersionedPackage, Version}; pub trait PackageUtils { /// Identify if a character is unsafe for use in a package name. fn package_version_unsafe(c: char) -> bool { match c { '.' | '-' | '~' => true, _ => false, } } /// Default strategy for building the version package. fn version_package(input: &Version) -> String { format!("_{}", input).replace(Self::package_version_unsafe, "_") } /// Build the full package of a versioned package. /// /// This uses a relatively safe strategy for encoding the version number. This can be adjusted /// by overriding `version_package`. fn package(&self, package: &RpVersionedPackage) -> RpPackage { package.as_package(Self::version_package) } }