spire_enum_macros 0.7.1

Procedural macros distributed by the crate `spire_enum`.
Documentation
use std::ops::{Deref, DerefMut};

use super::*;

#[derive(ToTokens, Clone)]
pub struct InputPunctuated<T, P> {
    pub inner: Punctuated<T, P>,
}

impl<T, P> Deref for InputPunctuated<T, P> {
    type Target = Punctuated<T, P>;

    fn deref(&self) -> &Self::Target { &self.inner }
}

impl<T, P> DerefMut for InputPunctuated<T, P> {
    fn deref_mut(&mut self) -> &mut Self::Target { &mut self.inner }
}

impl<T: Parse, P: Parse> Parse for InputPunctuated<T, P> {
    fn parse(input: ParseStream) -> Result<Self> {
        let mut inner = Punctuated::new();

        loop {
            match input.parse::<T>() {
                Ok(ok) => inner.push_value(ok),
                Err(..) => break,
            }

            match input.parse::<P>() {
                Ok(ok) => inner.push_punct(ok),
                Err(..) => break,
            }
        }

        Ok(InputPunctuated { inner })
    }
}