From cb5140114f0788c9e2cf6ddea31b73e4dbf0a8ff Mon Sep 17 00:00:00 2001 From: Alexandre ABRIOUX Date: Tue, 12 Nov 2024 03:02:36 +0100 Subject: [PATCH] fix: preserve column ordering --- Cargo.lock | 2 ++ Cargo.toml | 1 + src/main.rs | 18 ++++++++++++++++++ src/schema.rs | 4 ++-- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e6d6cac..0d74ca3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -424,6 +424,7 @@ dependencies = [ "assert_cmd", "assert_fs", "clap", + "indexmap", "markdown-table-formatter", "once_cell", "predicates", @@ -639,6 +640,7 @@ checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", "hashbrown", + "serde", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c4c6f03..91c0d51 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ markdown-table-formatter = "0.3.0" serde = { version = "1.0.214", features = ["derive"] } serde_json = "1.0.132" serde_yml = "0.0.12" +indexmap = { version = "2.6.0", features = ["serde"] } [dev-dependencies] assert_cmd = "2.0.16" diff --git a/src/main.rs b/src/main.rs index 85b1706..0bf4f63 100644 --- a/src/main.rs +++ b/src/main.rs @@ -141,4 +141,22 @@ tools: "##; generate_toolbox(&input.to_string()); } + + #[test] + fn should_not_sort_columns_alphabetically() { + let input = " +tools: + z: + - neovim + a: + - javascript"; + let markdown = generate_toolbox(&input.to_string()); + assert_eq!( + markdown, + r#"| z | a | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| [Neovim](#) | [JavaScript](#) | +"# + ); + } } diff --git a/src/schema.rs b/src/schema.rs index 5788ffb..718938e 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -1,12 +1,12 @@ +use indexmap::IndexMap; use serde::Deserialize; -use std::collections::BTreeMap; #[derive(Deserialize, Debug, PartialEq)] pub struct Config { pub tools: Tools, } -pub type Tools = BTreeMap>; +pub type Tools = IndexMap>; #[derive(Deserialize, Debug, PartialEq)] #[serde(untagged)]