Created
May 7, 2018 03:55
-
-
Save rbalicki2/84d1a7b4febe64e153cbfe52419dcbf1 to your computer and use it in GitHub Desktop.
QuoteOption, possibly updated for nightly
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use quote::{Tokens, ToTokens}; | |
use proc_macro2::{Term, Span, Group, Delimiter, TokenStream}; | |
pub struct QuoteOption<T>(pub Option<T>); | |
impl<T> ToTokens for QuoteOption<T> | |
where T: ToTokens | |
{ | |
fn to_tokens(&self, tokens: &mut Tokens) { | |
// tokens.append(Term::new("{", Span::call_site())); | |
// tokens.append(Term::new("::", Span::call_site())); | |
// tokens.append(Term::new("std", Span::call_site())); | |
// tokens.append(Term::new("::", Span::call_site())); | |
// tokens.append(Term::new("option", Span::call_site())); | |
// tokens.append(Term::new("::", Span::call_site())); | |
// tokens.append(Term::new("Option", Span::call_site())); | |
// tokens.append(Term::new("::", Span::call_site())); | |
match self.0 { | |
Some(ref t) => { | |
tokens.append(Term::new("Some", Span::call_site())); | |
let mut inner_tokens = Tokens::new(); | |
t.to_tokens(&mut inner_tokens); | |
tokens.append(Group::new(Delimiter::Parenthesis, inner_tokens.into())); | |
} | |
None => { | |
tokens.append(Term::new("None", Span::call_site())); | |
} | |
} | |
// tokens.append(Term::new("}", Span::call_site())); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment