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