Skip to main content

cargo_uv/packages/
package_name.rs

1use std::{borrow::Borrow, fmt::Display, ops::DerefMut};
2
3/// Newtype around Package Name.
4///
5/// `workspace.package` for the workspace package as '.' is an invalid char for a package name.
6#[derive(Debug, Default, PartialEq, Eq, Hash, Clone, PartialOrd, Ord)]
7pub struct PackageName(pub String);
8
9impl Display for PackageName {
10    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11        write!(f, "{}", self.0)
12    }
13}
14impl<T> From<T> for PackageName
15where
16    T: Into<String>,
17{
18    fn from(value: T) -> Self {
19        Self(value.into())
20    }
21}
22
23impl std::ops::Deref for PackageName {
24    type Target = String;
25
26    fn deref(&self) -> &Self::Target {
27        &self.0
28    }
29}
30
31impl DerefMut for PackageName {
32    fn deref_mut(&mut self) -> &mut Self::Target {
33        &mut self.0
34    }
35}
36impl Borrow<std::string::String> for PackageName {
37    fn borrow(&self) -> &std::string::String {
38        &self.0
39    }
40}
41impl Borrow<std::string::String> for &PackageName {
42    fn borrow(&self) -> &std::string::String {
43        &self.0
44    }
45}
46impl AsRef<str> for PackageName {
47    fn as_ref(&self) -> &str {
48        &self.0
49    }
50}
51
52impl AsMut<str> for PackageName {
53    fn as_mut(&mut self) -> &mut str {
54        &mut self.0
55    }
56}
57
58impl PartialEq<String> for PackageName {
59    fn eq(&self, other: &String) -> bool {
60        &self.0 == other
61    }
62}
63
64impl PartialEq<PackageName> for String {
65    fn eq(&self, other: &PackageName) -> bool {
66        other.eq(self)
67    }
68}