Enum RustType

Source
pub enum RustType {
    Generic {
        id: TypeName,
        parameters: Vec<RustType>,
    },
    Special(SpecialRustType),
    Simple {
        id: TypeName,
    },
}
Expand description

A named Rust type.

Variants§

§

Generic

A type with generic parameters. Consists of a type ID + parameters that come after in angled brackets. Examples include:

  • SomeStruct<String>
  • SomeEnum<u32>
  • SomeTypeAlias<(), &str> However, there are some generic types that are considered to be special. These include Vec<T> HashMap<K, V>, and Option<T>, which are part of SpecialRustType instead of RustType::Generic.

If a generic type is type-mapped via typeshare.toml, the generic parameters will be dropped automatically.

Fields

§parameters: Vec<RustType>
§

Special(SpecialRustType)

A type that requires a special transformation to its respective language. This includes many core types, like string types, basic container types, numbers, and other primitives.

§

Simple

A type with no generic parameters that is not considered a special type. This includes all user-generated types and some types from the standard library or third-party crates. However, these types can still be transformed as part of the type-map in typeshare.toml.

Fields

Implementations§

Source§

impl RustType

Source

pub fn contains_type(&self, ty: &TypeName) -> bool

Check if a type contains a type with an ID that matches ty. For example, Box<String> contains the types Box and String. Similarly, Vec<Option<HashMap<String, Url>>> contains the types Vec, Option, HashMap, String, and Url.

Source

pub fn id(&self) -> &TypeName

Get the ID (AKA name) of the type.

Source

pub fn is_optional(&self) -> bool

Check if the type is Option<T>

Source

pub fn is_double_optional(&self) -> bool

Check if the type is Option<Option<T>>

Source

pub fn is_vec(&self) -> bool

Check if the type is Vec<T>

Source

pub fn is_hash_map(&self) -> bool

Check if the type is HashMap<K, V>

Source

pub fn parameters(&self) -> Box<dyn Iterator<Item = &Self> + '_>

Get the generic parameters for this type. Returns an empty iterator if there are none. For example, Vec<String>’s generic parameters would be [String]. Meanwhile, HashMap<i64, u32>’s generic parameters would be [i64, u32]. Finally, a type like String would have no generic parameters.

Trait Implementations§

Source§

impl Clone for RustType

Source§

fn clone(&self) -> RustType

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RustType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for RustType

Source§

fn eq(&self, other: &RustType) -> 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 Eq for RustType

Source§

impl StructuralPartialEq for RustType

Auto Trait Implementations§

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> 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.