refactor: Interpret score with a provided method on Score (#100)
Some checks failed
Compile and package harmony_composer / package_harmony_composer (push) Successful in 6m49s
Run Check Script / check (push) Failing after 41s

First step in a direction to better orchestrate the core flow, even though it feels weird to move this logic into the `Score`. We'll refactor this as soon as we have a better solution.

Co-authored-by: Ian Letourneau <letourneau.ian@gmail.com>
Reviewed-on: #100
This commit is contained in:
2025-08-09 22:56:23 +00:00
parent dcf8335240
commit 29a261575b
23 changed files with 118 additions and 78 deletions

View File

@@ -107,12 +107,21 @@ async fn handle_events() {
HarmonyEvent::InterpretExecutionStarted {
topology,
interpret,
score,
message,
} => {
let section_key = if (*sections).contains_key(&topology_key(&topology)) {
topology_key(&topology)
} else if (*sections).contains_key(&score_key(&score)) {
score_key(&interpret)
} else {
interpret_key(&interpret)
let key = score_key(&score);
let section = progress::new_section(format!(
"\n{} Interpreting score: {score}...",
crate::theme::EMOJI_SCORE,
));
(*sections).insert(key.clone(), section);
key
};
let section = (*sections).get(&section_key).unwrap();
let progress_bar = progress::add_spinner(section, message);
@@ -122,13 +131,14 @@ async fn handle_events() {
HarmonyEvent::InterpretExecutionFinished {
topology,
interpret,
score,
outcome,
} => {
let has_topology = (*sections).contains_key(&topology_key(&topology));
let section_key = if has_topology {
topology_key(&topology)
} else {
interpret_key(&interpret)
score_key(&score)
};
let section = (*sections).get(&section_key).unwrap();
@@ -138,9 +148,15 @@ async fn handle_events() {
let _ = section.clear();
match outcome {
Ok(outcome) => {
progress::success(section, progress_bar, outcome.message);
}
Ok(outcome) => match outcome.status {
harmony::interpret::InterpretStatus::SUCCESS => {
progress::success(section, progress_bar, outcome.message)
}
harmony::interpret::InterpretStatus::NOOP => {
progress::skip(section, progress_bar, outcome.message)
}
_ => progress::error(section, progress_bar, outcome.message),
},
Err(err) => {
progress::error(section, progress_bar, err.to_string());
}
@@ -162,6 +178,10 @@ fn topology_key(topology: &str) -> String {
format!("topology-{topology}")
}
fn score_key(score: &str) -> String {
format!("score-{score}")
}
fn interpret_key(interpret: &str) -> String {
format!("interpret-{interpret}")
}

View File

@@ -8,6 +8,7 @@ pub static EMOJI_SKIP: Emoji<'_, '_> = Emoji("⏭️", "");
pub static EMOJI_ERROR: Emoji<'_, '_> = Emoji("⚠️", "");
pub static EMOJI_DEPLOY: Emoji<'_, '_> = Emoji("🚀", "");
pub static EMOJI_TOPOLOGY: Emoji<'_, '_> = Emoji("📦", "");
pub static EMOJI_SCORE: Emoji<'_, '_> = Emoji("🎶", "");
lazy_static! {
pub static ref SPINNER_STYLE: ProgressStyle = ProgressStyle::default_spinner()