use crate::GenerateCode;
use derive_more::From;
use ir::HexLiteral;
use proc_macro2::TokenStream as TokenStream2;
use quote::quote_spanned;
#[derive(From)]
pub struct SelectorId<'a> {
macro_input: &'a ir::SelectorMacro<ir::marker::SelectorId>,
}
impl GenerateCode for SelectorId<'_> {
fn generate_code(&self) -> TokenStream2 {
let span = self.macro_input.input().span();
let selector_id = self
.macro_input
.selector()
.into_be_u32()
.hex_padded_suffixed();
quote_spanned!(span=> #selector_id)
}
}
#[derive(From)]
pub struct SelectorBytes<'a> {
macro_input: &'a ir::SelectorMacro<ir::marker::SelectorBytes>,
}
impl GenerateCode for SelectorBytes<'_> {
fn generate_code(&self) -> TokenStream2 {
let span = self.macro_input.input().span();
let selector_bytes = self.macro_input.selector().hex_lits();
quote_spanned!(span=> [ #( #selector_bytes ),* ] )
}
}