mashin_macro 0.1.4

Proc macro for writing mashin resources
Documentation
/* -------------------------------------------------------- *\
 *                                                          *
 *      ███╗░░░███╗░█████╗░░██████╗██╗░░██╗██╗███╗░░██╗     *
 *      ████╗░████║██╔══██╗██╔════╝██║░░██║██║████╗░██║     *
 *      ██╔████╔██║███████║╚█████╗░███████║██║██╔██╗██║     *
 *      ██║╚██╔╝██║██╔══██║░╚═══██╗██╔══██║██║██║╚████║     *
 *      ██║░╚═╝░██║██║░░██║██████╔╝██║░░██║██║██║░╚███║     *
 *      ╚═╝░░░░░╚═╝╚═╝░░╚═╝╚═════╝░╚═╝░░╚═╝╚═╝╚═╝░░╚══╝     *
 *                                         by Nutshimit     *
 * -------------------------------------------------------- *
 *                                                          *
 *   This file is dual-licensed as Apache-2.0 or GPL-3.0.   *
 *   see LICENSE for license details.                       *
 *                                                          *
\* ---------------------------------------------------------*/

use crate::provider::parse::Def;

pub fn expand_resource_config(def: &mut Def) -> proc_macro2::TokenStream {
	def.resources_config.iter_mut().for_each(|resource| {
		let resource_item = {
			let item =
				&mut def.item.content.as_mut().expect("Checked by def parser").1[resource.index];
			if let syn::Item::Struct(item) = item {
				item
			} else {
				unreachable!("Checked by config parser")
			}
		};

		resource_item.attrs.push(syn::parse_quote! {
			#[derive(Default, Debug, Clone, ::serde::Serialize, ::serde::Deserialize, PartialEq)]
		});
		resource_item.attrs.push(syn::parse_quote! {#[serde(rename_all = "camelCase")]});

		resource_item
			.fields
			.iter_mut()
			.for_each(|field| field.attrs.push(syn::parse_quote!(#[serde(default)])));
	});

	quote::quote! {}
}