NumberArg

Enum NumberArg 

Source
pub enum NumberArg {
    Literal(LitInt),
    ConstExpr {
        const_token: Const,
        kind: NumberKind,
        block: Block,
    },
    Constant {
        kind: NumberKind,
        dbl_colon: PathSep,
        ident: MinOrMax,
    },
}
Expand description

Represents a numerical argument obtained from parsing proc macro input tokens.

NumberArg can represent three kinds of numerical data:

  • A literal value directly specified in the input.
  • A primitive number constant, which is a predefined constant value.
  • An expression that is evaluated at compile time using the Rhai scripting engine.

This enum is designed to work within the context of procedural macros, where it helps in interpreting and manipulating numerical inputs. It provides flexibility in handling both simple numerical values and complex expressions that need to be evaluated.

The NumberArg can be converted into a NumberValue type through the into_value method. This conversion allows for direct operations on the underlying numerical value, supporting various primitive number types (e.g., u8, u16, i32, usize, etc.).

Example usage:

let num_arg: NumberArg = parse_macro_input!(input as NumberArg);
let num_value: NumberValue = num_arg.into_value(NumberKind::U32);
// Now `num_value` can be used for further numerical operations.

Note: The into_value method panics if the conversion fails, so it should be used within a context where panicking is acceptable or handled appropriately.

Variants§

§

Literal(LitInt)

§

ConstExpr

Fields

§const_token: Const
§block: Block
§

Constant

Fields

§dbl_colon: PathSep
§ident: MinOrMax

Implementations§

Source§

impl NumberArg

Source

pub const LIMITS_INIT: (Option<Self>, Option<Self>)

Source

pub fn new_min_constant(kind: NumberKind) -> Self

Create a new NumberArg instance for a NumberKind’s minimum value.

Source

pub fn new_max_constant(kind: NumberKind) -> Self

Create a new NumberArg instance for a NumberKind’s maximum value.

Source

pub fn from_expr(expr: &Expr) -> Self

Helper method to create a NumberArg instance from a syn::Expr. Mostly useful for testing.

Source

pub fn from_lit(lit: &LitInt) -> Self

Helper method to create a NumberArg instance from a syn::LitInt. Mostly useful for testing.

Source

pub fn from_range_expr(kind: NumberKind, expr: &ExprRange) -> (Self, Self)

Helper method to create a pair of NumberArg instances from a syn::ExprRange. Mostly useful for testing.

Source

pub fn min(&self, other: &Self, kind: NumberKind) -> Self

Create a new NumberArg instance from the lesser of two inputs.

Source

pub fn max(&self, other: &Self, kind: NumberKind) -> Self

Create a new NumberArg instance from the greater of two inputs.

Source

pub fn into_value(&self, kind: NumberKind) -> NumberValue

Convert the NumberArg into a NumberValue instance.

Source

pub fn into_literal_as_tokens(&self, kind: NumberKind) -> TokenStream

Output the value as a bare literal number in a token stream.

Source

pub fn base10_parse<N>(&self) -> Result<N>
where N: FromStr, N::Err: Display,

Parse the value as a base 10 number.

Trait Implementations§

Source§

impl Clone for NumberArg

Source§

fn clone(&self) -> NumberArg

Returns a duplicate 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 NumberArg

Source§

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

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

impl Display for NumberArg

Source§

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

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

impl Parse for NumberArg

Source§

fn parse(input: ParseStream<'_>) -> Result<Self>

Source§

impl ToTokens for NumberArg

Source§

fn to_tokens(&self, tokens: &mut TokenStream)

Write self to the given TokenStream. Read more
Source§

fn to_token_stream(&self) -> TokenStream

Convert self directly into a TokenStream object. Read more
Source§

fn into_token_stream(self) -> TokenStream
where Self: Sized,

Convert self directly into a TokenStream object. Read more

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> Spanned for T
where T: Spanned + ?Sized,

Source§

fn span(&self) -> Span

Returns a Span covering the complete contents of this syntax tree node, or Span::call_site() if this node is empty.
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.
Source§

impl<T> Variant for T
where T: Any + Clone + SendSync,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert this Variant trait object to &dyn Any.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert this Variant trait object to &mut dyn Any.
Source§

fn as_boxed_any(self: Box<T>) -> Box<dyn Any>

Convert this Variant trait object to Box<dyn Any>.
Source§

fn type_name(&self) -> &'static str

Get the name of this type.
Source§

fn clone_object(&self) -> Box<dyn Variant>

Clone this Variant trait object.