Struct Type

Source
pub struct Type<'a> {
    pub type: MaybeBorrowed<'a, TokenCmpWrapper<Type>>,
    pub generics_count: usize,
}
Expand description

A trait Generatable / Template. This asserts that some type implements some trait.

Fields§

§type: MaybeBorrowed<'a, TokenCmpWrapper<Type>>

The type to check the asserted type equals

§generics_count: usize

The amount of generics the type should have

Implementations§

Source§

impl<'a> Type<'a>

Source

pub fn new<T>(type: T, generics_count: usize) -> Self

Creates a new type template from some type to be checked against. Takes any T that can be turned into a MaybeBorrowed type, to support references as well as owned types

Source

pub fn from_owned(type: Type, generics_count: usize) -> Self

Source

pub fn from_borrowed(type: &'a Type, generics_count: usize) -> Self

Trait Implementations§

Source§

impl<'a> Generatable<'a, TokenCmpWrapper<StaticTid<Ident>>> for Type<'a>

Source§

const EMITS_NON_CONSTANT_CODE: bool = true

Set this to true when any of the emitted code may be non-constant
Source§

type GeneratableData = Ident

The type of any data passed from the Generatable stage to proceeding stages.
Source§

type TemplateData = ()

The type of any data passed from the Template stage to proceeding stages.
Source§

fn generatable(_: &mut Context<'_>) -> PassedData<Self::GeneratableData>

This is the method the Generatable stage is composed of. Should return Tokens (if any) generated by this stage, plus optionally any data passed to preceding stages.
Source§

fn assert( &self, _context: &mut Context<'_>, (assert_type_eq, _): (&Self::GeneratableData, &Self::TemplateData), to_assert: &TokenCmpWrapper<StaticTid<Ident>>, ) -> Option<TokenStream>

This is the method the Assert stage is composed of. Should return Tokens generated by this stage.
Source§

fn template( &self, _context: &mut Context<'_>, _passed: &Self::GeneratableData, ) -> PassedData<Self::TemplateData>
where Self::TemplateData: Default,

This is the method the Template stage is composed of. Should return Tokens (if any) generated by this stage, plus optionally any data passed to preceding stages.
Source§

impl<'a> Generatable<'a, TokenCmpWrapper<Type>> for Type<'a>

Source§

const EMITS_NON_CONSTANT_CODE: bool = false

Set this to true when any of the emitted code may be non-constant
Source§

type GeneratableData = Ident

The type of any data passed from the Generatable stage to proceeding stages.
Source§

type TemplateData = ()

The type of any data passed from the Template stage to proceeding stages.
Source§

fn generatable(_: &mut Context<'_>) -> PassedData<Self::GeneratableData>

This is the method the Generatable stage is composed of. Should return Tokens (if any) generated by this stage, plus optionally any data passed to preceding stages.
Source§

fn assert( &self, _context: &mut Context<'_>, (assert_type_eq, _): (&Self::GeneratableData, &Self::TemplateData), to_assert: &TokenCmpWrapper<Type>, ) -> Option<TokenStream>

This is the method the Assert stage is composed of. Should return Tokens generated by this stage.
Source§

fn template( &self, _context: &mut Context<'_>, _passed: &Self::GeneratableData, ) -> PassedData<Self::TemplateData>
where Self::TemplateData: Default,

This is the method the Template stage is composed of. Should return Tokens (if any) generated by this stage, plus optionally any data passed to preceding stages.
Source§

impl<'a> Ord for Type<'a>

Source§

fn cmp(&self, other: &Type<'a>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<'a> PartialEq for Type<'a>

Source§

fn eq(&self, other: &Type<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> PartialOrd for Type<'a>

Source§

fn partial_cmp(&self, other: &Type<'a>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<'a> Eq for Type<'a>

Source§

impl<'a> StructuralPartialEq for Type<'a>

Source§

impl<'a> TidAble<'a> for Type<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Type<'a>

§

impl<'a> RefUnwindSafe for Type<'a>

§

impl<'a> !Send for Type<'a>

§

impl<'a> !Sync for Type<'a>

§

impl<'a> Unpin for Type<'a>

§

impl<'a> UnwindSafe for Type<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AnyExt for T
where T: Any + ?Sized,

Source§

fn downcast_ref<T>(this: &Self) -> Option<&T>
where T: Any,

Attempts to downcast this to T behind reference
Source§

fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>
where T: Any,

Attempts to downcast this to T behind mutable reference
Source§

fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Any,

Attempts to downcast this to T behind Rc pointer
Source§

fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Any,

Attempts to downcast this to T behind Arc pointer
Source§

fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Any,

Attempts to downcast this to T behind Box pointer
Source§

fn downcast_move<T>(this: Self) -> Option<T>
where T: Any, Self: Sized,

Attempts to downcast owned Self to T, useful only in generic context as a workaround for specialization
Source§

impl<'a, Gen, A> AttachGenericsWithAssert<'a, A> for Gen
where Gen: Generatable<'a, A>, A: 'a + TidAble<'a>,

Source§

type Output = MaybeBorrowed<'a, Gen>

An optional type wrapper around the type the generics will be attached to Used by this crate to wrap types with MaybeBorrowed to allow both references and owned types to be represented by the same type.
Source§

fn with_optional_generics<B>( self, generics: Option<impl Into<MaybeBorrowed<'a, Generics>>>, ) -> WithGenerics<'a, <Gen as AttachGenericsWithAssert<'a, A>>::Output>
where B: TypeEq<This = A>,

Source§

fn with_generics<B>( self, generics: impl Into<MaybeBorrowed<'a, Generics>>, ) -> WithGenerics<'a, Self::Output>
where B: TypeEq<This = A>, Self: Sized,

Attach some generics G to Self. This allows for the generics to to not exactly be syn::Generics but any type that can be turned into MaybeBorrowed<syn::Generics>. This allows for both &syn::Generics and syn::Generics to be attached using the same trait.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<'a, T, A> InsertIntoTemplate<'a, T, A> for T
where T: Generatable<'a, A> + 'a + Ord + Eq, A: Ord + Eq + 'a + TidAble<'a>,

Source§

type Output = Assert<'a, T, A>

The type of the Assert generated by the Template Self
Source§

fn test<B>(self, ty: impl Into<MaybeBorrowed<'a, A>>) -> Assert<'a, T, A>
where B: TypeEq<This = A>,

Test some type against the template Self and turn it into Self::Output. So that the type may either be borrowed or owned, any type that can be turned into MaybeBorrowed<T::Assert>
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<'a, T, U> ResolveBounds<'a, T> for U
where T: AssertableWithBounds<'a, U> + 'a,

Source§

fn resolve_for( self, assertable: impl Into<MaybeBorrowed<'a, T>>, ) -> ResolvedBounds<'a, U, T>

Source§

impl<'a, T> Tid<'a> for T
where T: TidAble<'a> + ?Sized,

Source§

fn self_id(&self) -> TypeId

Returns type id of the type of self Read more
Source§

fn id() -> TypeId

Returns type id of this type
Source§

impl<'a, X> TidExt<'a> for X
where X: Tid<'a> + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: Tid<'a>,

Returns true if type behind self is equal to the type of T.
Source§

fn downcast_ref<'b, T>(&'b self) -> Option<&'b T>
where T: Tid<'a>,

Attempts to downcast self to T behind reference
Source§

fn downcast_mut<'b, T>(&'b mut self) -> Option<&'b mut T>
where T: Tid<'a>,

Attempts to downcast self to T behind mutable reference
Source§

fn downcast_rc<T>(self: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Tid<'a>,

Attempts to downcast self to T behind Rc pointer
Source§

fn downcast_arc<T>(self: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Tid<'a>,

Attempts to downcast self to T behind Arc pointer
Source§

fn downcast_box<T>(self: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Tid<'a>,

Attempts to downcast self to T behind Box pointer
Source§

fn downcast_move<T>(self) -> Option<T>
where T: Tid<'a>, Self: Sized,

Attempts to downcast owned Self to T, useful only in generic context as a workaround for specialization
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> TypeEq for T
where T: ?Sized,

Source§

type This = T