litrs::float

Struct FloatLit

source
pub struct FloatLit<B: Buffer> {
    raw: B,
    end_integer_part: usize,
    end_fractional_part: usize,
    end_number_part: usize,
}
Expand description

A floating point literal, e.g. 3.14, 8., 135e12, or 1.956e2f64.

This kind of literal has several forms, but generally consists of a main number part, an optional exponent and an optional type suffix. See the reference for more information.

A leading minus sign - is not part of the literal grammar! -3.14 are two tokens in the Rust grammar. Further, 27 and 27f32 are both not float, but integer literals! Consequently FloatLit::parse will reject them.

Fields§

§raw: B

The whole raw input. The usize fields in this struct partition this string. Always true: end_integer_part <= end_fractional_part.

   12_3.4_56e789f32
       ╷    ╷   ╷
       |    |   └ end_number_part = 13
       |    └ end_fractional_part = 9
       └ end_integer_part = 4

   246.
      ╷╷
      |└ end_fractional_part = end_number_part = 4
      └ end_integer_part = 3

   1234e89
       ╷  ╷
       |  └ end_number_part = 7
       └ end_integer_part = end_fractional_part = 4
§end_integer_part: usize

The first index not part of the integer part anymore. Since the integer part is at the start, this is also the length of that part.

§end_fractional_part: usize

The first index after the fractional part.

§end_number_part: usize

The first index after the whole number part (everything except type suffix).

Implementations§

source§

impl<B: Buffer> FloatLit<B>

source

pub fn parse(s: B) -> Result<Self, ParseError>

Parses the input as a floating point literal. Returns an error if the input is invalid or represents a different kind of literal. Will also reject decimal integer literals like 23 or 17f32, in accordance with the spec.

source

pub fn number_part(&self) -> &str

Returns the number part (including integer part, fractional part and exponent), but without the suffix. If you want an actual floating point value, you need to parse this string, e.g. with f32::from_str or an external crate.

source

pub fn integer_part(&self) -> &str

Returns the non-empty integer part of this literal.

source

pub fn fractional_part(&self) -> Option<&str>

Returns the optional fractional part of this literal. Does not include the period. If a period exists in the input, Some is returned, None otherwise. Note that Some("") might be returned, e.g. for 3..

source

pub fn exponent_part(&self) -> &str

Optional exponent part. Might be empty if there was no exponent part in the input. Includes the e or E at the beginning.

source

pub fn suffix(&self) -> &str

The optional suffix. Returns "" if the suffix is empty/does not exist.

source

pub fn raw_input(&self) -> &str

Returns the raw input that was passed to parse.

source

pub fn into_raw_input(self) -> B

Returns the raw input that was passed to parse, potentially owned.

source§

impl FloatLit<&str>

source

pub fn to_owned(&self) -> FloatLit<String>

Makes a copy of the underlying buffer and returns the owned version of Self.

Trait Implementations§

source§

impl<B: Clone + Buffer> Clone for FloatLit<B>

source§

fn clone(&self) -> FloatLit<B>

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<B: Debug + Buffer> Debug for FloatLit<B>

source§

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

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

impl<B: Buffer> Display for FloatLit<B>

source§

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

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

impl<B: Buffer> From<FloatLit<B>> for Literal

source§

fn from(l: FloatLit<B>) -> Self

Converts to this type from the input type.
source§

impl<B: Buffer> From<FloatLit<B>> for Literal<B>

source§

fn from(src: FloatLit<B>) -> Self

Converts to this type from the input type.
source§

impl<B: PartialEq + Buffer> PartialEq for FloatLit<B>

source§

fn eq(&self, other: &FloatLit<B>) -> 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 TryFrom<&Literal> for FloatLit<String>

source§

type Error = InvalidToken

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

fn try_from(src: &Literal) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<&TokenTree> for FloatLit<String>

source§

type Error = InvalidToken

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

fn try_from(tt: &TokenTree) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<Literal> for FloatLit<String>

source§

type Error = InvalidToken

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

fn try_from(src: Literal) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<TokenTree> for FloatLit<String>

source§

type Error = InvalidToken

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

fn try_from(tt: TokenTree) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl<B: Copy + Buffer> Copy for FloatLit<B>

source§

impl<B: Eq + Buffer> Eq for FloatLit<B>

source§

impl<B: Buffer> StructuralPartialEq for FloatLit<B>

Auto Trait Implementations§

§

impl<B> Freeze for FloatLit<B>
where B: Freeze,

§

impl<B> RefUnwindSafe for FloatLit<B>
where B: RefUnwindSafe,

§

impl<B> Send for FloatLit<B>
where B: Send,

§

impl<B> Sync for FloatLit<B>
where B: Sync,

§

impl<B> Unpin for FloatLit<B>
where B: Unpin,

§

impl<B> UnwindSafe for FloatLit<B>
where B: UnwindSafe,

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, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> 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§

default 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.