use sim_lib_music_core::{Score, SmfFile};
use sim_lib_music_lower::{LowerError, LowerOpts, lower_score, write_smf};
use thiserror::Error;
use crate::{SerialRealization, SerialRenderOptions, StrictRealizationError, render_serial_score};
#[derive(Debug, Error)]
pub enum SerialSurfaceError {
#[error(transparent)]
Realization(#[from] StrictRealizationError),
#[error(transparent)]
Lower(#[from] LowerError),
}
pub fn render_serial_audition_score(
realization: &SerialRealization,
options: &SerialRenderOptions,
) -> Result<Score, SerialSurfaceError> {
Ok(render_serial_score(realization, options)?)
}
pub fn lower_serial_score(
realization: &SerialRealization,
render: &SerialRenderOptions,
lower: &LowerOpts,
) -> Result<SmfFile, SerialSurfaceError> {
let score = render_serial_audition_score(realization, render)?;
Ok(lower_score(&score, lower)?)
}
pub fn write_serial_smf(
realization: &SerialRealization,
render: &SerialRenderOptions,
lower: &LowerOpts,
) -> Result<Vec<u8>, SerialSurfaceError> {
let score = render_serial_audition_score(realization, render)?;
Ok(write_smf(&score, lower)?)
}