Skip to content
5 changes: 1 addition & 4 deletions examples/parts/arrays.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use serde::{
Deserialize,
Serialize,
};
use serde::{Deserialize, Serialize};
use serde_json::json;
use toon_format::encode_default;

Expand Down
5 changes: 1 addition & 4 deletions examples/parts/arrays_of_arrays.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use serde::{
Deserialize,
Serialize,
};
use serde::{Deserialize, Serialize};
use serde_json::json;
use toon_format::encode_default;

Expand Down
5 changes: 1 addition & 4 deletions examples/parts/decode_strict.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
use serde_json::Value;
use toon_format::{
decode,
DecodeOptions,
};
use toon_format::{decode, DecodeOptions};

pub fn decode_strict() {
// Malformed: header says 2 rows, but only 1 provided
Expand Down
6 changes: 1 addition & 5 deletions examples/parts/delimiters.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
use serde_json::json;
use toon_format::{
encode,
Delimiter,
EncodeOptions,
};
use toon_format::{encode, Delimiter, EncodeOptions};

pub fn delimiters() {
let data = json!({
Expand Down
5 changes: 1 addition & 4 deletions examples/parts/mixed_arrays.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use serde::{
Deserialize,
Serialize,
};
use serde::{Deserialize, Serialize};
use serde_json::json;
use toon_format::encode_default;

Expand Down
5 changes: 1 addition & 4 deletions examples/parts/objects.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use serde::{
Deserialize,
Serialize,
};
use serde::{Deserialize, Serialize};
use serde_json::json;
use toon_format::encode_default;

Expand Down
15 changes: 3 additions & 12 deletions examples/parts/round_trip.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
use serde::{
Deserialize,
Serialize,
};
use serde_json::{
json,
Value,
};
use toon_format::{
decode_default,
encode_default,
};
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};
use toon_format::{decode_default, encode_default};

#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct Product {
Expand Down
10 changes: 2 additions & 8 deletions examples/parts/structs.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
use serde::{
Deserialize,
Serialize,
};
use toon_format::{
decode_default,
encode_default,
};
use serde::{Deserialize, Serialize};
use toon_format::{decode_default, encode_default};

#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct User {
Expand Down
5 changes: 1 addition & 4 deletions examples/parts/tabular.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
use serde::{
Deserialize,
Serialize,
};
use serde::{Deserialize, Serialize};
use serde_json::json;
use toon_format::encode_default;

Expand Down
29 changes: 5 additions & 24 deletions src/cli/main.rs
Original file line number Diff line number Diff line change
@@ -1,36 +1,17 @@
use std::{
fs,
io::{
self,
Read,
Write,
},
path::{
Path,
PathBuf,
},
io::{self, Read, Write},
path::{Path, PathBuf},
};

use anyhow::{
bail,
Context,
Result,
};
use anyhow::{bail, Context, Result};
use clap::Parser;
use comfy_table::Table;
use serde::Serialize;
use tiktoken_rs::cl100k_base;
use toon_format::{
decode,
encode,
types::{
DecodeOptions,
Delimiter,
EncodeOptions,
Indent,
KeyFoldingMode,
PathExpansionMode,
},
decode, encode,
types::{DecodeOptions, Delimiter, EncodeOptions, Indent, KeyFoldingMode, PathExpansionMode},
};

#[derive(Parser, Debug)]
Expand Down
16 changes: 4 additions & 12 deletions src/decode/expansion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,7 @@ use indexmap::IndexMap;

use crate::{
constants::QUOTED_KEY_MARKER,
types::{
is_identifier_segment,
JsonValue as Value,
PathExpansionMode,
ToonError,
ToonResult,
},
types::{is_identifier_segment, JsonValue as Value, PathExpansionMode, ToonError, ToonResult},
};

pub fn should_expand_key(key: &str, mode: PathExpansionMode) -> Option<Vec<String>> {
Expand Down Expand Up @@ -90,7 +84,7 @@ pub fn deep_merge_value(
}
} else {
target.insert(first_key.clone(), Value::Object(IndexMap::new()));
match target.get_mut(first_key).unwrap() {
match target.get_mut(first_key).expect("key was just inserted") {
Value::Object(obj) => obj,
_ => unreachable!(),
}
Expand All @@ -108,10 +102,8 @@ pub fn expand_paths_in_object(
let mut result = IndexMap::new();

for (key, mut value) in obj {
// Expand nested objects first (depth-first)
if let Value::Object(nested_obj) = value {
value = Value::Object(expand_paths_in_object(nested_obj, mode, strict)?);
}
// Expand nested structures (arrays/objects) first (depth-first)
value = expand_paths_recursive(value, mode, strict)?;

// Strip marker from quoted keys
let clean_key = if key.starts_with(QUOTED_KEY_MARKER) {
Expand Down
5 changes: 1 addition & 4 deletions src/decode/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,7 @@ pub mod validation;

use serde_json::Value;

use crate::types::{
DecodeOptions,
ToonResult,
};
use crate::types::{DecodeOptions, ToonResult};

/// Decode a TOON string into any deserializable type.
///
Expand Down
Loading
Loading