tmi 0.10.0

twitch.tv messaging interface
Documentation
macro_rules! generate_getters {
  {
    $(<$L:lifetime>)? for $T:ty as $self:ident {
      $(
        $(#[$meta:meta])*
        $field:ident -> $R:ty $(= $e:expr)?
      ),* $(,)?
    }
  } => {
    impl$(<$L>)? $T {
      $(
        #[inline]
        $(#[$meta])*
        pub fn $field(&$self) -> $R {
          generate_getters!(@getter $self $field $($e)?)
        }
      )*
    }
  };

  (@getter $self:ident $field:ident $e:expr) => ($e);
  (@getter $self:ident $field:ident) => ($self.$field.clone());
}

#[cfg(test)]
pub(crate) fn _parse_irc<'src, T: crate::msg::FromIrc<'src>>(input: &'src str) -> T {
  let raw = crate::irc::IrcMessageRef::parse(input).unwrap();
  <T as crate::msg::FromIrc>::from_irc(raw).unwrap()
}

#[cfg(test)]
macro_rules! assert_irc_snapshot {
  ($T:ty, $input:literal,) => {
    assert_irc_snapshot!($T, $input)
  };
  ($T:ty, $input:literal) => {{
    let f = $crate::msg::macros::_parse_irc::<$T>;
    ::insta::assert_debug_snapshot!(f($input))
  }};
}

#[cfg(all(test, feature = "serde"))]
macro_rules! assert_irc_roundtrip {
  ($T:ty, $input:literal,) => {
    assert_irc_roundtrip!($T, $input)
  };
  ($T:ty, $input:literal) => {{
    let original = $crate::msg::macros::_parse_irc::<$T>($input);
    let serialized = ::serde_json::to_string(&original).expect("failed to serialize");
    let deserialized = ::serde_json::from_str(&serialized).expect("failed to deserialize");
    assert_eq!(original, deserialized, "roundtrip failed");
  }};
}