use std::path::Path;
use crate::error::RoxResult;
use crate::model::RoxChart;
use super::super::Encoder;
#[cfg(feature = "compression")]
use super::super::formats::RoxCodec;
use super::super::formats::{
FnfEncoder, JroxEncoder, OsuEncoder, QuaEncoder, SmEncoder, YroxEncoder,
};
use super::decode::auto_decode;
use super::types::OutputFormat;
pub fn auto_encode(chart: &RoxChart, path: impl AsRef<Path>) -> RoxResult<()> {
let path = path.as_ref();
let format = OutputFormat::from_path(path)?;
let data = match format {
#[cfg(feature = "compression")]
OutputFormat::Rox => RoxCodec::encode(chart)?,
OutputFormat::Jrox => JroxEncoder::encode(chart)?,
OutputFormat::Yrox => YroxEncoder::encode(chart)?,
OutputFormat::Osu => OsuEncoder::encode(chart)?,
OutputFormat::Sm => SmEncoder::encode(chart)?,
OutputFormat::Qua => QuaEncoder::encode(chart)?,
OutputFormat::Fnf => FnfEncoder::encode(chart)?,
};
std::fs::write(path, data)?;
Ok(())
}
pub fn encode_with_format(chart: &RoxChart, format: OutputFormat) -> RoxResult<Vec<u8>> {
match format {
#[cfg(feature = "compression")]
OutputFormat::Rox => RoxCodec::encode(chart),
OutputFormat::Jrox => JroxEncoder::encode(chart),
OutputFormat::Yrox => YroxEncoder::encode(chart),
OutputFormat::Osu => OsuEncoder::encode(chart),
OutputFormat::Sm => SmEncoder::encode(chart),
OutputFormat::Qua => QuaEncoder::encode(chart),
OutputFormat::Fnf => FnfEncoder::encode(chart),
}
}
pub fn auto_convert(input: impl AsRef<Path>, output: impl AsRef<Path>) -> RoxResult<()> {
let chart = auto_decode(input)?;
auto_encode(&chart, output)
}