use crate::program::Program; use std::fs; macro_rules! load_asm { ($path:tt) => {{ if cfg!(any(feature = "static", target_arch = "wasm32")) { let src = include_str!(concat!("../../", $path)); Program::parse(src, true)? } else { let src = fs::read_to_string($path)?; Program::parse(&src, true)? } }}; ($first:tt, $($arg:tt),*) => { load_asm!($first)$(.merge(load_asm!($arg)))* }; } pub struct Data { pub explore: Program, pub megalovania: Program, } impl Data { pub fn load() -> crate::Result { let explore = load_asm!( "assets/asm/explore_melody.asm", "assets/asm/explore_harmony1.asm", "assets/asm/explore_harmony2.asm" ); let megalovania = load_asm!( "assets/asm/megalovania_melody.asm", "assets/asm/megalovania_base.asm" ); Ok(Self { explore, megalovania, }) } }