use quote::ToTokens;
use crate::ast::symbol;
use crate::ast::types::{SiguledXcoder, XcoderType};
#[derive(Debug, Clone)]
pub struct Xcoder {
pub enc: Option<SiguledXcoder>,
pub dec: Option<XcoderType>,
}
impl TryFrom<&syn::MetaList> for Xcoder {
type Error = syn::Error;
fn try_from(input: &syn::MetaList) -> syn::Result<Self> {
let mut enc: Option<SiguledXcoder> = None;
let mut dec: Option<XcoderType> = None;
input.parse_nested_meta(|meta| {
tk_syn_macros::handle_unique_nested_meta_values! {
meta;
err!(UnknownKeyLenField(meta.path));
2;
enc: symbol::pnm_parse_maybestr_encoder => err!(DuplicateEncoderInKeyLen),
dec: symbol::pnm_parse_maybestr_decoder => err!(DuplicateDecoderInKeyLen),
}
})?;
Ok(Xcoder { enc, dec })
}
}