use sva_engine::{Buffer, PSYCHOACOUSTIC_V1, READINGS, answer_buffer};
use crate::{Answer, Asked, CliError};
pub fn analyzable(asked: &[Asked]) -> Result<(), CliError> {
let Some(one) = asked.iter().find(|one| !one.off_samples(true)) else {
return Ok(());
};
let answered: Vec<&str> = READINGS
.iter()
.filter(|row| row.reads.off_samples(true))
.map(|row| row.name)
.collect();
Err(CliError::usage(
"query.not_analyzable",
format!(
"`analyze` does not answer `{}` — only {} need no rendered graph",
one.name,
answered.join(", ")
),
))
}
pub fn analyzed(target: &str, buffer: &Buffer, asked: &[Asked]) -> Result<Vec<Answer>, CliError> {
analyzable(asked)?;
asked
.iter()
.map(|one| {
answer_buffer(
target,
buffer,
one.representation(buffer.rate, None)?,
PSYCHOACOUSTIC_V1.name,
)
.map_err(CliError::Engine)
})
.collect()
}