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