xref: /third_party/rust/crates/clap/src/util/id.rs (revision 19625d8c)
119625d8cSopenharmony_ciuse crate::builder::Str;
219625d8cSopenharmony_ci
319625d8cSopenharmony_ci/// [`Arg`][crate::Arg] or [`ArgGroup`][crate::ArgGroup] identifier
419625d8cSopenharmony_ci///
519625d8cSopenharmony_ci/// This is used for accessing the value in [`ArgMatches`][crate::ArgMatches] or defining
619625d8cSopenharmony_ci/// relationships between `Arg`s and `ArgGroup`s with functions like
719625d8cSopenharmony_ci/// [`Arg::conflicts_with`][crate::Arg::conflicts_with].
819625d8cSopenharmony_ci#[derive(Default, Clone, Eq, PartialEq, PartialOrd, Ord, Hash)]
919625d8cSopenharmony_cipub struct Id(Str);
1019625d8cSopenharmony_ci
1119625d8cSopenharmony_ciimpl Id {
1219625d8cSopenharmony_ci    pub(crate) const HELP: &'static str = "help";
1319625d8cSopenharmony_ci    pub(crate) const VERSION: &'static str = "version";
1419625d8cSopenharmony_ci    pub(crate) const EXTERNAL: &'static str = "";
1519625d8cSopenharmony_ci
1619625d8cSopenharmony_ci    pub(crate) fn from_static_ref(name: &'static str) -> Self {
1719625d8cSopenharmony_ci        Self(Str::from_static_ref(name))
1819625d8cSopenharmony_ci    }
1919625d8cSopenharmony_ci
2019625d8cSopenharmony_ci    /// Get the raw string of the `Id`
2119625d8cSopenharmony_ci    pub fn as_str(&self) -> &str {
2219625d8cSopenharmony_ci        self.0.as_str()
2319625d8cSopenharmony_ci    }
2419625d8cSopenharmony_ci
2519625d8cSopenharmony_ci    pub(crate) fn as_internal_str(&self) -> &Str {
2619625d8cSopenharmony_ci        &self.0
2719625d8cSopenharmony_ci    }
2819625d8cSopenharmony_ci}
2919625d8cSopenharmony_ci
3019625d8cSopenharmony_ciimpl From<&'_ Id> for Id {
3119625d8cSopenharmony_ci    fn from(id: &'_ Id) -> Self {
3219625d8cSopenharmony_ci        id.clone()
3319625d8cSopenharmony_ci    }
3419625d8cSopenharmony_ci}
3519625d8cSopenharmony_ci
3619625d8cSopenharmony_ciimpl From<Str> for Id {
3719625d8cSopenharmony_ci    fn from(name: Str) -> Self {
3819625d8cSopenharmony_ci        Self(name)
3919625d8cSopenharmony_ci    }
4019625d8cSopenharmony_ci}
4119625d8cSopenharmony_ci
4219625d8cSopenharmony_ciimpl From<&'_ Str> for Id {
4319625d8cSopenharmony_ci    fn from(name: &'_ Str) -> Self {
4419625d8cSopenharmony_ci        Self(name.into())
4519625d8cSopenharmony_ci    }
4619625d8cSopenharmony_ci}
4719625d8cSopenharmony_ci
4819625d8cSopenharmony_ci#[cfg(feature = "string")]
4919625d8cSopenharmony_ciimpl From<std::string::String> for Id {
5019625d8cSopenharmony_ci    fn from(name: std::string::String) -> Self {
5119625d8cSopenharmony_ci        Self(name.into())
5219625d8cSopenharmony_ci    }
5319625d8cSopenharmony_ci}
5419625d8cSopenharmony_ci
5519625d8cSopenharmony_ci#[cfg(feature = "string")]
5619625d8cSopenharmony_ciimpl From<&'_ std::string::String> for Id {
5719625d8cSopenharmony_ci    fn from(name: &'_ std::string::String) -> Self {
5819625d8cSopenharmony_ci        Self(name.into())
5919625d8cSopenharmony_ci    }
6019625d8cSopenharmony_ci}
6119625d8cSopenharmony_ci
6219625d8cSopenharmony_ciimpl From<&'static str> for Id {
6319625d8cSopenharmony_ci    fn from(name: &'static str) -> Self {
6419625d8cSopenharmony_ci        Self(name.into())
6519625d8cSopenharmony_ci    }
6619625d8cSopenharmony_ci}
6719625d8cSopenharmony_ci
6819625d8cSopenharmony_ciimpl From<&'_ &'static str> for Id {
6919625d8cSopenharmony_ci    fn from(name: &'_ &'static str) -> Self {
7019625d8cSopenharmony_ci        Self(name.into())
7119625d8cSopenharmony_ci    }
7219625d8cSopenharmony_ci}
7319625d8cSopenharmony_ci
7419625d8cSopenharmony_ciimpl From<Id> for Str {
7519625d8cSopenharmony_ci    fn from(name: Id) -> Self {
7619625d8cSopenharmony_ci        name.0
7719625d8cSopenharmony_ci    }
7819625d8cSopenharmony_ci}
7919625d8cSopenharmony_ci
8019625d8cSopenharmony_ciimpl From<Id> for String {
8119625d8cSopenharmony_ci    fn from(name: Id) -> Self {
8219625d8cSopenharmony_ci        Str::from(name).into()
8319625d8cSopenharmony_ci    }
8419625d8cSopenharmony_ci}
8519625d8cSopenharmony_ci
8619625d8cSopenharmony_ciimpl std::fmt::Display for Id {
8719625d8cSopenharmony_ci    #[inline]
8819625d8cSopenharmony_ci    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8919625d8cSopenharmony_ci        std::fmt::Display::fmt(self.as_str(), f)
9019625d8cSopenharmony_ci    }
9119625d8cSopenharmony_ci}
9219625d8cSopenharmony_ci
9319625d8cSopenharmony_ciimpl std::fmt::Debug for Id {
9419625d8cSopenharmony_ci    #[inline]
9519625d8cSopenharmony_ci    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9619625d8cSopenharmony_ci        std::fmt::Debug::fmt(self.as_str(), f)
9719625d8cSopenharmony_ci    }
9819625d8cSopenharmony_ci}
9919625d8cSopenharmony_ci
10019625d8cSopenharmony_ciimpl AsRef<str> for Id {
10119625d8cSopenharmony_ci    #[inline]
10219625d8cSopenharmony_ci    fn as_ref(&self) -> &str {
10319625d8cSopenharmony_ci        self.as_str()
10419625d8cSopenharmony_ci    }
10519625d8cSopenharmony_ci}
10619625d8cSopenharmony_ci
10719625d8cSopenharmony_ciimpl std::borrow::Borrow<str> for Id {
10819625d8cSopenharmony_ci    #[inline]
10919625d8cSopenharmony_ci    fn borrow(&self) -> &str {
11019625d8cSopenharmony_ci        self.as_str()
11119625d8cSopenharmony_ci    }
11219625d8cSopenharmony_ci}
11319625d8cSopenharmony_ci
11419625d8cSopenharmony_ciimpl PartialEq<str> for Id {
11519625d8cSopenharmony_ci    #[inline]
11619625d8cSopenharmony_ci    fn eq(&self, other: &str) -> bool {
11719625d8cSopenharmony_ci        PartialEq::eq(self.as_str(), other)
11819625d8cSopenharmony_ci    }
11919625d8cSopenharmony_ci}
12019625d8cSopenharmony_ciimpl PartialEq<Id> for str {
12119625d8cSopenharmony_ci    #[inline]
12219625d8cSopenharmony_ci    fn eq(&self, other: &Id) -> bool {
12319625d8cSopenharmony_ci        PartialEq::eq(self, other.as_str())
12419625d8cSopenharmony_ci    }
12519625d8cSopenharmony_ci}
12619625d8cSopenharmony_ci
12719625d8cSopenharmony_ciimpl PartialEq<&'_ str> for Id {
12819625d8cSopenharmony_ci    #[inline]
12919625d8cSopenharmony_ci    fn eq(&self, other: &&str) -> bool {
13019625d8cSopenharmony_ci        PartialEq::eq(self.as_str(), *other)
13119625d8cSopenharmony_ci    }
13219625d8cSopenharmony_ci}
13319625d8cSopenharmony_ciimpl PartialEq<Id> for &'_ str {
13419625d8cSopenharmony_ci    #[inline]
13519625d8cSopenharmony_ci    fn eq(&self, other: &Id) -> bool {
13619625d8cSopenharmony_ci        PartialEq::eq(*self, other.as_str())
13719625d8cSopenharmony_ci    }
13819625d8cSopenharmony_ci}
13919625d8cSopenharmony_ci
14019625d8cSopenharmony_ciimpl PartialEq<Str> for Id {
14119625d8cSopenharmony_ci    #[inline]
14219625d8cSopenharmony_ci    fn eq(&self, other: &Str) -> bool {
14319625d8cSopenharmony_ci        PartialEq::eq(self.as_str(), other.as_str())
14419625d8cSopenharmony_ci    }
14519625d8cSopenharmony_ci}
14619625d8cSopenharmony_ciimpl PartialEq<Id> for Str {
14719625d8cSopenharmony_ci    #[inline]
14819625d8cSopenharmony_ci    fn eq(&self, other: &Id) -> bool {
14919625d8cSopenharmony_ci        PartialEq::eq(self.as_str(), other.as_str())
15019625d8cSopenharmony_ci    }
15119625d8cSopenharmony_ci}
15219625d8cSopenharmony_ci
15319625d8cSopenharmony_ciimpl PartialEq<std::string::String> for Id {
15419625d8cSopenharmony_ci    #[inline]
15519625d8cSopenharmony_ci    fn eq(&self, other: &std::string::String) -> bool {
15619625d8cSopenharmony_ci        PartialEq::eq(self.as_str(), other.as_str())
15719625d8cSopenharmony_ci    }
15819625d8cSopenharmony_ci}
15919625d8cSopenharmony_ciimpl PartialEq<Id> for std::string::String {
16019625d8cSopenharmony_ci    #[inline]
16119625d8cSopenharmony_ci    fn eq(&self, other: &Id) -> bool {
16219625d8cSopenharmony_ci        PartialEq::eq(other, self)
16319625d8cSopenharmony_ci    }
16419625d8cSopenharmony_ci}
165