use crate::prelude::*;
use crate::tracker::import::bin_reader::ImportError;
impl Module {
#[cfg(feature = "import_mod")]
pub fn load_mod(source: &[u8]) -> Result<Self, ImportError> {
use super::amiga::amiga_module::AmigaModule;
Ok(AmigaModule::load(source)?.to_module())
}
#[cfg(feature = "import_xm")]
pub fn load_xm(source: &[u8]) -> Result<Self, ImportError> {
use super::xm::xmmodule::XmModule;
Ok(XmModule::load(source)?.to_module())
}
#[cfg(feature = "import_s3m")]
pub fn load_s3m(source: &[u8]) -> Result<Self, ImportError> {
use super::s3m::s3m_module::S3mModule;
Ok(S3mModule::load(source)?.to_module())
}
#[cfg(feature = "import_it")]
pub fn load_it(source: &[u8]) -> Result<Self, ImportError> {
use super::it::it_module::ItModule;
Ok(ItModule::load(source)?.to_module())
}
#[cfg(feature = "import_dw")]
pub fn load_dw(source: &[u8]) -> Result<Self, ImportError> {
use super::dw::dw_module::DwModule;
Ok(DwModule::load(source)?.to_module())
}
#[cfg(feature = "import_dw")]
pub fn load_dw_named(source: &[u8], name: &str) -> Result<Self, ImportError> {
let mut module = Self::load_dw(source)?;
if !name.is_empty() {
module.name = name.into();
}
Ok(module)
}
#[cfg(all(feature = "import_dw", feature = "std"))]
pub fn load_dw_path<P: AsRef<std::path::Path>>(path: P) -> Result<Self, ImportError> {
let path = path.as_ref();
let data = std::fs::read(path).map_err(|_| ImportError::Other("dw: cannot read file"))?;
let stem = path.file_stem().and_then(|s| s.to_str()).unwrap_or("");
Self::load_dw_named(&data, stem)
}
pub fn load(source: &[u8]) -> Result<Self, ImportError> {
#[cfg(feature = "import_xm")]
if let Ok(m) = Self::load_xm(source) {
return Ok(m);
};
#[cfg(feature = "import_s3m")]
if let Ok(m) = Self::load_s3m(source) {
return Ok(m);
};
#[cfg(feature = "import_it")]
if let Ok(m) = Self::load_it(source) {
return Ok(m);
};
#[cfg(feature = "import_mod")]
if let Ok(m) = Self::load_mod(source) {
return Ok(m);
};
#[cfg(feature = "import_dw")]
if let Ok(m) = Self::load_dw(source) {
return Ok(m);
};
let _ = source;
Err(ImportError::Other("Unknown data?"))
}
}