use super::generator::*;
use {proc_macro2::*, quote::*};
impl StructGenerator {
pub fn generate_handle_other_keys(&self) -> TokenStream {
let handle_other_keys = match &self.other_keys_field {
Some(other_keys_field) => {
let other_keys_field_name = &other_keys_field.name;
let handle_null = Self::generate_handle_null(other_keys_field, true);
quote! {
for (key, value) in map.inner {
if !declared_keys.contains(&key) {
#handle_null
if let Some(key) = ::compris::resolve::Resolve::resolve_with_errors(key, errors)?
&& let Some(value) = ::compris::resolve::Resolve::resolve_with_errors(value, errors)?
{
resolved.#other_keys_field_name.insert(key, value);
}
}
}
}
}
None => quote! {
for (key, _) in map.inner {
if !declared_keys.contains(&key) {
::kutil::std::error::ErrorReceiver::give_error(
errors,
::compris::resolve::InvalidKeyError::new(key.clone()).into(),
)?;
}
}
},
};
let declared_keys = &self.declared_keys;
quote! {
let declared_keys = ::compris::normal_vec![ #(#declared_keys),* ];
#handle_other_keys
}
}
}