]>
git.proxmox.com Git - proxmox-backup.git/blob - pbs-tools/src/json.rs
1 use anyhow
::{bail, Error}
;
4 // Generate canonical json
5 pub fn to_canonical_json(value
: &Value
) -> Result
<Vec
<u8>, Error
> {
6 let mut data
= Vec
::new();
7 write_canonical_json(value
, &mut data
)?
;
11 pub fn write_canonical_json(value
: &Value
, output
: &mut Vec
<u8>) -> Result
<(), Error
> {
13 Value
::Null
=> bail
!("got unexpected null value"),
14 Value
::String(_
) | Value
::Number(_
) | Value
::Bool(_
) => {
15 serde_json
::to_writer(output
, &value
)?
;
17 Value
::Array(list
) => {
19 let mut iter
= list
.iter();
20 if let Some(item
) = iter
.next() {
21 write_canonical_json(item
, output
)?
;
24 write_canonical_json(item
, output
)?
;
29 Value
::Object(map
) => {
31 let mut keys
: Vec
<&str> = map
.keys().map(String
::as_str
).collect();
33 let mut iter
= keys
.into_iter();
34 if let Some(key
) = iter
.next() {
35 serde_json
::to_writer(&mut *output
, &key
)?
;
37 write_canonical_json(&map
[key
], output
)?
;
40 serde_json
::to_writer(&mut *output
, &key
)?
;
42 write_canonical_json(&map
[key
], output
)?
;