Skip to content

Commit 1c14ba0

Browse files
committed
fix: allow numeric keys in Auspice coloring scale
The Auspice v2 JSON schema specifies that scale entries are two-element arrays where the first item can be either string (categorical) or numeric (continuous).¹ The previous type did not allow numeric keys and would fail to deserialize Auspice JSONs with continuous colorings. ¹ https://nextstrain.org/schemas/auspice/config/v2#/properties/colorings/items/properties/scale
1 parent ed665e1 commit 1c14ba0

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

packages/nextclade/src/tree/tree.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,13 @@ impl AuspiceMetaExtensions {
608608
}
609609
}
610610

611+
#[derive(Clone, Debug, Serialize, Deserialize, schemars::JsonSchema)]
612+
#[serde(untagged)]
613+
pub enum ScaleKey {
614+
Num(f64),
615+
Str(String),
616+
}
617+
611618
#[derive(Clone, Debug, Default, Serialize, Deserialize, schemars::JsonSchema, Validate)]
612619
pub struct AuspiceColoring {
613620
#[serde(rename = "type")]
@@ -619,7 +626,7 @@ pub struct AuspiceColoring {
619626

620627
#[serde(skip_serializing_if = "Vec::is_empty")]
621628
#[serde(default)]
622-
pub scale: Vec<[String; 2]>,
629+
pub scale: Vec<(ScaleKey, String)>,
623630

624631
#[serde(flatten)]
625632
pub other: serde_json::Value,

packages/nextclade/src/tree/tree_preprocess.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::coord::position::{AaRefPosition, NucRefGlobalPosition, PositionLike};
99
use crate::graph::node::GraphNodeKey;
1010
use crate::make_error;
1111
use crate::translate::translate_genes::Translation;
12-
use crate::tree::tree::{AuspiceColoring, AuspiceGraph, AuspiceGraphNodePayload, AuspiceTreeMeta};
12+
use crate::tree::tree::{AuspiceColoring, AuspiceGraph, AuspiceGraphNodePayload, AuspiceTreeMeta, ScaleKey};
1313
use crate::utils::collections::concat_to_vec;
1414
use eyre::{Report, WrapErr};
1515
use itertools::Itertools;
@@ -247,8 +247,8 @@ fn map_aa_muts_for_one_cds(
247247
}
248248
}
249249

250-
fn pair(key: &str, val: &str) -> [String; 2] {
251-
[key.to_owned(), val.to_owned()]
250+
fn pair(key: &str, val: &str) -> (ScaleKey, String) {
251+
(ScaleKey::Str(key.to_owned()), val.to_owned())
252252
}
253253

254254
pub fn add_auspice_metadata_in_place(meta: &mut AuspiceTreeMeta, has_pcr_primers: bool) {

0 commit comments

Comments
 (0)