pub struct Tagged<T, Tag> { /* private fields */ }Expand description
rust-tagged provides a simple way to define strongly typed wrappers over primitive types like String, i32, Uuid, chrono::DateTime, etc. It helps eliminate bugs caused by misusing raw primitives for conceptually distinct fields such as UserId, Email, ProductId, and more.
Eliminate accidental mixups between similar types (e.g. OrgId vs UserId) Enforce domain modeling in code via the type system Ergonomic .into() support for primitive conversions
§Example
use tagged_core::{Tagged};
#[derive(Debug)]
struct EmailTag;
type Email = Tagged<String, EmailTag>;
fn main() {
let email: Email = "test@example.com".into();
println!("Email inner value: {}", email.value());
// Convert back to String
let raw: String = email.into();
println!("Raw String: {raw}");
}Implementations§
Trait Implementations§
Source§impl<'de, T, Tag> Deserialize<'de> for Tagged<T, Tag>where
T: Deserialize<'de>,
impl<'de, T, Tag> Deserialize<'de> for Tagged<T, Tag>where
T: Deserialize<'de>,
Source§fn deserialize<D>(
deserializer: D,
) -> Result<Tagged<T, Tag>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Tagged<T, Tag>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<'a, T, Tag> IntoIterator for &'a Tagged<Vec<T>, Tag>
impl<'a, T, Tag> IntoIterator for &'a Tagged<Vec<T>, Tag>
Source§impl<T, Tag> IntoIterator for Tagged<Vec<T>, Tag>
impl<T, Tag> IntoIterator for Tagged<Vec<T>, Tag>
Source§impl<T, Tag> Ord for Tagged<T, Tag>where
T: Ord,
impl<T, Tag> Ord for Tagged<T, Tag>where
T: Ord,
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl<T, Tag> PartialOrd for Tagged<T, Tag>where
T: PartialOrd,
impl<T, Tag> PartialOrd for Tagged<T, Tag>where
T: PartialOrd,
Source§impl<T, Tag> Serialize for Tagged<T, Tag>where
T: Serialize,
impl<T, Tag> Serialize for Tagged<T, Tag>where
T: Serialize,
Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl<T, Tag> Eq for Tagged<T, Tag>where
T: Eq,
Auto Trait Implementations§
impl<T, Tag> Freeze for Tagged<T, Tag>where
T: Freeze,
impl<T, Tag> RefUnwindSafe for Tagged<T, Tag>where
T: RefUnwindSafe,
Tag: RefUnwindSafe,
impl<T, Tag> Send for Tagged<T, Tag>
impl<T, Tag> Sync for Tagged<T, Tag>
impl<T, Tag> Unpin for Tagged<T, Tag>
impl<T, Tag> UnwindSafe for Tagged<T, Tag>where
T: UnwindSafe,
Tag: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more