1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
//! Traits for `opaque_typedef_macros`. #![warn(missing_docs)] /// An error type that indicates the error should never happen. #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Infallible {} /// Common functions for opaque typedef-ed sized types. pub trait OpaqueTypedef: Sized { /// Inner type. type Inner; /// Validation error type. type Error: ::std::fmt::Debug; /// Creates a new value from the inner value without validation. unsafe fn from_inner_unchecked(inner: Self::Inner) -> Self; /// Tries to create a new value from the inner value with validation. fn try_from_inner(inner: Self::Inner) -> Result<Self, Self::Error>; /// Creates a new value from the inner value with validation. /// /// # Panics /// /// Panics if the validation failed. fn from_inner(inner: Self::Inner) -> Self { Self::try_from_inner(inner).unwrap() } /// Takes and returns the inner value with its ownership. fn into_inner(self) -> Self::Inner; /// Returns the reference to the inner value. fn as_inner(&self) -> &Self::Inner; /// Returns the mutable reference to the inner value. unsafe fn as_inner_mut(&mut self) -> &mut Self::Inner; } /// Common functions for opaque typedef-ed unsized types. pub trait OpaqueTypedefUnsized { /// Inner type. type Inner: ?Sized; /// Validation error type. type Error: ::std::fmt::Debug; /// Creates a reference from the inner reference without validation. unsafe fn from_inner_unchecked(inner: &Self::Inner) -> &Self; /// Creates a mutable reference from the inner mutable reference without /// validation. unsafe fn from_inner_unchecked_mut(inner: &mut Self::Inner) -> &mut Self; /// Tries to create a reference from the inner reference with validation. fn try_from_inner(inner: &Self::Inner) -> Result<&Self, Self::Error>; /// Creates a reference from the inner reference with validation. /// /// # Panics /// /// Panics if the validation failed. fn from_inner(inner: &Self::Inner) -> &Self { Self::try_from_inner(inner).unwrap() } /// Tries to create a mutable reference from the inner mutable reference /// with validation. fn try_from_inner_mut(inner: &mut Self::Inner) -> Result<&mut Self, Self::Error>; /// Creates a mutable reference from the inner mutable reference with /// validation. /// /// # Panics /// /// Panics if the validation failed. fn from_inner_mut(inner: &mut Self::Inner) -> &mut Self { Self::try_from_inner_mut(inner).unwrap() } /// Returns the inner reference. fn as_inner(&self) -> &Self::Inner; /// Returns the inner mutable reference. unsafe fn as_inner_mut(&mut self) -> &mut Self::Inner; }