From fad5172c1c348d0f6bb7f4485095b48ea81e198d Mon Sep 17 00:00:00 2001 From: electricboogie <32370782+kimono-koans@users.noreply.github.com> Date: Fri, 22 Dec 2023 10:14:18 -0600 Subject: [PATCH] Bump dep, fix hanging re serde json --- Cargo.lock | 8 ++++---- Cargo.toml | 4 ++-- src/display_map/format.rs | 35 +++++++-------------------------- src/display_versions/wrapper.rs | 10 +++++----- 4 files changed, 18 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 826e5e43..e909627a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -963,18 +963,18 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index d0377bc1..bbaaf8c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,8 +53,8 @@ proc-mounts = { version = "0.3.0", default-features = false } once_cell = { version = "1.18.0", default-features = false } hashbrown = { version = "0.14.2", default-features = false, features = ["rayon", "ahash", "inline-more"] } nix = { version = "0.27.1", default-features = false, features = ["fs", "user", "zerocopy"] } -serde = { version = "1.0.192", default-features = false } -serde_json = { version = "1.0.108", default-features = false, features = ["preserve_order"] } +serde = { version = "1.0.193" } +serde_json = { version = "1.0.108", features = ["preserve_order", "std"] } filetime = { version = "0.2.22", default-features = false } realpath-ext = { version = "0.1.3", default-features = false, features = ["std"] } # these are strictly not required to build, only included for attribution sake (to be picked up by cargo_about) diff --git a/src/display_map/format.rs b/src/display_map/format.rs index 33798e50..219994f1 100644 --- a/src/display_map/format.rs +++ b/src/display_map/format.rs @@ -15,12 +15,12 @@ // For the full copyright and license information, please view the LICENSE file // that was distributed with this source code. -use crate::config::generate::{ExecMode, MountDisplay, PrintMode}; +use crate::config::generate::{MountDisplay, PrintMode}; use crate::data::paths::ZfsSnapPathGuard; use crate::display_versions::format::{NOT_SO_PRETTY_FIXED_WIDTH_PADDING, QUOTATION_MARKS_LEN}; use crate::library::utility::delimiter; use crate::{MountsForFiles, SnapNameMap, VersionsMap, GLOBAL_CONFIG}; -use serde::ser::SerializeStruct; +use serde::ser::SerializeMap; use serde::{Serialize, Serializer}; use std::borrow::Cow; use std::collections::BTreeMap; @@ -50,9 +50,10 @@ impl Serialize for PrintAsMap { where S: Serializer, { - let mut state = serializer.serialize_struct("PrintAsMap", 1)?; - - state.serialize_field("inner", &self)?; + let mut state = serializer.serialize_map(Some(self.inner.len()))?; + self.inner + .iter() + .try_for_each(|(k, v)| state.serialize_entry(k, v))?; state.end() } } @@ -139,29 +140,7 @@ impl From<&SnapNameMap> for PrintAsMap { impl std::string::ToString for PrintAsMap { fn to_string(&self) -> String { if GLOBAL_CONFIG.opt_json { - let json_string = self.to_json(); - - let res = match &GLOBAL_CONFIG.exec_mode { - ExecMode::BasicDisplay | ExecMode::Interactive(_) => { - json_string.replace("\"inner\": ", "\"versions\": ") - } - ExecMode::MountsForFiles(_) => json_string.replace("\"inner\": ", "\"mounts\": "), - ExecMode::SnapsForFiles(_) => { - json_string.replace("\"inner\": ", "\"snapshot_names\": ") - } - ExecMode::NonInteractiveRecursive(_) - | ExecMode::RollForward(_) - | ExecMode::NumVersions(_) - | ExecMode::Prune(_) - | ExecMode::SnapFileMount(_) => { - unreachable!( - "JSON print should not be available in the selected {:?} execution mode.", - &GLOBAL_CONFIG.exec_mode - ); - } - }; - - return res; + return self.to_json(); } let delimiter = delimiter(); diff --git a/src/display_versions/wrapper.rs b/src/display_versions/wrapper.rs index d6cb2b48..3efd0574 100644 --- a/src/display_versions/wrapper.rs +++ b/src/display_versions/wrapper.rs @@ -20,7 +20,7 @@ use crate::data::paths::PathData; use crate::display_map::format::PrintAsMap; use crate::library::utility::delimiter; use crate::lookup::versions::VersionsMap; -use serde::ser::SerializeStruct; +use serde::ser::SerializeMap; use serde::{Serialize, Serializer}; use std::collections::BTreeMap; use std::ops::Deref; @@ -91,9 +91,6 @@ impl<'a> Serialize for VersionsDisplayWrapper<'a> { where S: Serializer, { - // 3 is the number of fields in the struct. - let mut state = serializer.serialize_struct("VersionMap", 1)?; - // add live file key to values if needed before serializing let new_map: BTreeMap> = self .deref() @@ -110,7 +107,10 @@ impl<'a> Serialize for VersionsDisplayWrapper<'a> { }) .collect(); - state.serialize_field("versions", &new_map)?; + let mut state = serializer.serialize_map(Some(new_map.len()))?; + new_map + .iter() + .try_for_each(|(k, v)| state.serialize_entry(k, v))?; state.end() } }