TokenAccumulator

Struct TokenAccumulator 

Source
pub struct TokenAccumulator(Result<TokenStream, Error>);
Expand description

Accumulates tokens, or errors

We collect all the errors, and if we get an error, don’t write anything out. This is because compile_error! (from into_compile_error) only works in certain places in Rust syntax (!)

Tuple Fields§

§0: Result<TokenStream, Error>

Implementations§

Source§

impl TokenAccumulator

Source

pub fn new() -> Self

Source

pub fn with_tokens<R>( &mut self, f: impl FnOnce(&mut TokenStream) -> R, ) -> Option<R>

Source

pub fn append(&mut self, t: impl ToTokens)

Source

pub fn tokens(self) -> Result<TokenStream>

Source

pub fn append_maybe_punct_composable( &mut self, val: &(impl ToTokens + ToTokensPunctComposable), composable: bool, )

Appends val, via ToTokensPunctComposable or ToTokens

Trait Implementations§

Source§

impl Debug for TokenAccumulator

Source§

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

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

impl Default for TokenAccumulator

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Expand<TokenAccumulator> for TemplateElement<TokenAccumulator>

Source§

fn expand<'c>( &self, ctx: GeneralContext<'c>, out: &mut TokenAccumulator, ) -> Result<()>

Source§

impl ExpansionOutput for TokenAccumulator

Source§

fn append_identfrag_toks<I: IdentFrag>( &mut self, ident: &I, ) -> Result<(), I::BadIdent>

An identifier (or fragment of one) Read more
Source§

fn append_idpath<A, B, I>( &mut self, _te_span: Span, pre: A, ident: &I, post: B, grouping: Grouping, ) -> Result<(), I::BadIdent>

Append a Rust path (scoped identifier, perhaps with generics) Read more
Source§

fn append_syn_litstr(&mut self, lit: &LitStr)

Source§

fn append_syn_type_inner( &mut self, _te_span: Span, ty: Type, grouping: Grouping, )

Append a syn::Type, which has been grouping-normalised
Source§

fn append_tokens_with( &mut self, (_not_in_paste, _not_in_concat): &((), ()), f: impl FnOnce(&mut TokenAccumulator) -> Result<()>, ) -> Result<()>

Append using a function which generates tokens Read more
Source§

fn append_bool_only(&mut self, bool_only: &Self::BoolOnly) -> !

“Append” a substitution which can only be used within a boolean Read more
Source§

fn record_error(&mut self, err: Error)

Note that an error occurred Read more
Source§

fn new_with_span(_kw_span: Span) -> Self

Make a new empty expansion output, introduced at kw_span Read more
Source§

fn ignore_impl(self) -> Result<()>

Implement the core of the ignore keyword Read more
Source§

fn dbg_expand<'c>( &mut self, _kw_span: Span, ctx: GeneralContext<'c>, msg: &mut String, content: &Template<TokenAccumulator>, ) -> Result

Implement the dbg keyword Read more
Source§

fn append_syn_type(&mut self, te_span: Span, v: Type, grouping: Grouping)

Source§

fn write_error<S: Spanned, M: Display>(&mut self, span: &S, message: M)

Convenience method for noting an error with span and message
Source§

fn append_tokens( &mut self, allow_tokens: &(<Self as SubstParseContext>::NotInPaste, <Self as SubstParseContext>::NotInConcat), tokens: impl ToTokens, ) -> Result<()>

Convenience method for writing a ToTokens Read more
Source§

fn default_subst_meta_as(kw: Span) -> Result<SubstAs<Self>>

Source§

impl SubstParseContext for TokenAccumulator

Source§

type NotInPaste = ()

Uninhabited iff this lexical context is within ${paste }
Source§

type NotInConcat = ()

Uninhabited iff this lexical context is within ${concat }
Source§

type NotInBool = ()

Uninhabited iff this lexical context is within a condition.
Source§

type DbgContent = Template<TokenAccumulator>

Content of the dbg keyword Read more
Source§

type BoolOnly = Void

Uninhabited unless this lexical context is within a condition.
Source§

type ConcatOnly = Void

Uninhabited unless this lexical context is within ${concat }
Source§

type SpecialParseContext = ()

For communicating through parse_special Read more
Source§

fn not_in_paste(_: &impl Spanned) -> Result<()>

Source§

fn not_in_concat(_: &impl Spanned) -> Result<()>

Source§

fn not_in_bool(_: &impl Spanned) -> Result<()>

Source§

const IS_BOOL: bool = false

Whether this is a boolean context
Source§

fn bool_only(span: &impl Spanned) -> Result<Self::BoolOnly>

Source§

fn concat_only(span: &impl Spanned) -> Result<Self::ConcatOnly>

Source§

fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>

When we find a fmeta etc. in this context, does it allow a value? Read more
Source§

fn parse_maybe_within_parens<T>( input: ParseStream<'_>, f: impl FnOnce(ParseStream<'_>) -> Result<T>, ) -> Result<T>

Parse using f, within parens in boolean context, not otherwise Read more
Source§

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

Parse maybe a comma (comma in boolean contegxt, not otherwise) Read more
Source§

fn missing_keyword_arguments(kw_span: Span) -> Result<Void>

Return an error suitable for reporting missing arguments 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> 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> Same for T

Source§

type Output = T

Should always be Self
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.