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
impl TokenAccumulator
pub fn new() -> Self
pub fn with_tokens<R>( &mut self, f: impl FnOnce(&mut TokenStream) -> R, ) -> Option<R>
pub fn append(&mut self, t: impl ToTokens)
pub fn tokens(self) -> Result<TokenStream>
Sourcepub fn append_maybe_punct_composable(
&mut self,
val: &(impl ToTokens + ToTokensPunctComposable),
composable: bool,
)
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
impl Debug for TokenAccumulator
Source§impl Default for TokenAccumulator
impl Default for TokenAccumulator
Source§impl Expand<TokenAccumulator> for TemplateElement<TokenAccumulator>
impl Expand<TokenAccumulator> for TemplateElement<TokenAccumulator>
fn expand<'c>( &self, ctx: GeneralContext<'c>, out: &mut TokenAccumulator, ) -> Result<()>
Source§impl ExpansionOutput for TokenAccumulator
impl ExpansionOutput for TokenAccumulator
Source§fn append_identfrag_toks<I: IdentFrag>(
&mut self,
ident: &I,
) -> Result<(), I::BadIdent>
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>
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)
fn append_syn_litstr(&mut self, lit: &LitStr)
Append a
syn::LitStr Read moreSource§fn append_syn_type_inner(
&mut self,
_te_span: Span,
ty: Type,
grouping: Grouping,
)
fn append_syn_type_inner( &mut self, _te_span: Span, ty: Type, grouping: Grouping, )
Append a
syn::Type, which has been grouping-normalisedSource§fn append_tokens_with(
&mut self,
(_not_in_paste, _not_in_concat): &((), ()),
f: impl FnOnce(&mut TokenAccumulator) -> Result<()>,
) -> Result<()>
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) -> !
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)
fn record_error(&mut self, err: Error)
Note that an error occurred Read more
Source§fn new_with_span(_kw_span: Span) -> Self
fn new_with_span(_kw_span: Span) -> Self
Make a new empty expansion output, introduced at
kw_span Read moreSource§fn dbg_expand<'c>(
&mut self,
_kw_span: Span,
ctx: GeneralContext<'c>,
msg: &mut String,
content: &Template<TokenAccumulator>,
) -> Result
fn dbg_expand<'c>( &mut self, _kw_span: Span, ctx: GeneralContext<'c>, msg: &mut String, content: &Template<TokenAccumulator>, ) -> Result
Implement the
dbg keyword Read moreSource§fn write_error<S: Spanned, M: Display>(&mut self, span: &S, message: M)
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<()>
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 morefn default_subst_meta_as(kw: Span) -> Result<SubstAs<Self>>
Source§impl SubstParseContext for TokenAccumulator
impl SubstParseContext for TokenAccumulator
Source§type NotInPaste = ()
type NotInPaste = ()
Uninhabited iff this lexical context is within
${paste }Source§type NotInConcat = ()
type NotInConcat = ()
Uninhabited iff this lexical context is within
${concat }Source§type DbgContent = Template<TokenAccumulator>
type DbgContent = Template<TokenAccumulator>
Content of the
dbg keyword Read moreSource§type ConcatOnly = Void
type ConcatOnly = Void
Uninhabited unless this lexical context is within
${concat }Source§type SpecialParseContext = ()
type SpecialParseContext = ()
For communicating through
parse_special Read morefn not_in_paste(_: &impl Spanned) -> Result<()>
fn not_in_concat(_: &impl Spanned) -> Result<()>
fn not_in_bool(_: &impl Spanned) -> Result<()>
fn bool_only(span: &impl Spanned) -> Result<Self::BoolOnly>
fn concat_only(span: &impl Spanned) -> Result<Self::ConcatOnly>
Source§fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>
fn meta_recog_usage(m: &SubstMeta<Self>) -> UsageInfo<IsUsed>
When we find a
fmeta etc. in this context, does it allow a value? Read moreSource§fn parse_maybe_within_parens<T>(
input: ParseStream<'_>,
f: impl FnOnce(ParseStream<'_>) -> Result<T>,
) -> Result<T>
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 moreSource§fn parse_maybe_comma(input: ParseStream<'_>) -> Result<()>
fn parse_maybe_comma(input: ParseStream<'_>) -> Result<()>
Parse maybe a comma (comma in boolean contegxt, not otherwise) Read more
Auto Trait Implementations§
impl Freeze for TokenAccumulator
impl RefUnwindSafe for TokenAccumulator
impl !Send for TokenAccumulator
impl !Sync for TokenAccumulator
impl Unpin for TokenAccumulator
impl UnwindSafe for TokenAccumulator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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