Implement unwrapping method

This commit is contained in:
Nettika 2022-07-21 11:33:14 -07:00
parent af44f3e4d2
commit 99f08b418d
2 changed files with 9 additions and 0 deletions

View file

@ -65,6 +65,8 @@ fn main() {
// Any `Valid<Username>` passed is guaranteed // Any `Valid<Username>` passed is guaranteed
// to have met the arbitrary validation checks. // to have met the arbitrary validation checks.
fn create_account(username: Valid<Username>) { fn create_account(username: Valid<Username>) {
let username = username.into_inner(); // Unwrap
println!("Account {:?} created", username); println!("Account {:?} created", username);
} }
``` ```

View file

@ -74,6 +74,13 @@ mod tests;
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] #[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Valid<T>(T); pub struct Valid<T>(T);
impl<T> Valid<T> {
/// Consumes the `Valid` wrapper, returning the wrapped value.
pub fn into_inner(self) -> T {
self.0
}
}
impl<T> core::ops::Deref for Valid<T> { impl<T> core::ops::Deref for Valid<T> {
type Target = T; type Target = T;