1use sva_engine::{Buffer, PSYCHOACOUSTIC_V1, READINGS, answer_buffer};
4
5use crate::{Answer, Asked, CliError};
6
7pub fn analyzable(asked: &[Asked]) -> Result<(), CliError> {
9 let Some(one) = asked.iter().find(|one| !one.off_samples(true)) else {
10 return Ok(());
11 };
12 let answered: Vec<&str> = READINGS
13 .iter()
14 .filter(|row| row.reads.off_samples(true))
15 .map(|row| row.name)
16 .collect();
17 Err(CliError::usage(
18 "query.not_analyzable",
19 format!(
20 "`analyze` does not answer `{}` — only {} need no rendered graph",
21 one.name,
22 answered.join(", ")
23 ),
24 ))
25}
26
27pub fn analyzed(target: &str, buffer: &Buffer, asked: &[Asked]) -> Result<Vec<Answer>, CliError> {
29 analyzable(asked)?;
30 asked
31 .iter()
32 .map(|one| {
33 answer_buffer(
34 target,
35 buffer,
36 one.representation(buffer.rate, None)?,
37 PSYCHOACOUSTIC_V1.name,
38 )
39 .map_err(CliError::Engine)
40 })
41 .collect()
42}