oauth1-request-derive 0.3.2

A derive macro for `oauth1_request::Authorize` trait.
Documentation
use std::mem;

use proc_macro2::{Span, TokenStream};
use quote::ToTokens;

use crate::util::error;

pub struct Ctxt {
    errors: Option<TokenStream>,
}

impl Ctxt {
    pub fn new() -> Self {
        Self {
            errors: Some(TokenStream::new()),
        }
    }

    pub fn error(&mut self, msg: &str, span: Span) {
        error(msg, span).to_tokens(self.errors.as_mut().unwrap());
    }

    pub fn emit_errors(mut self) -> Option<TokenStream> {
        let errors = self.errors.take().unwrap();
        mem::forget(self);
        if errors.is_empty() {
            None
        } else {
            Some(errors)
        }
    }
}

impl Drop for Ctxt {
    fn drop(&mut self) {
        if !std::thread::panicking() {
            panic!("must call `Ctxt::emit_errors`");
        }
    }
}