use std::{error::Error, fs::read_to_string};
use struson::{
reader::{JsonReader, JsonStreamReader, json_path::json_path},
writer::{JsonStreamWriter, JsonWriter, WriterSettings},
};
use crate::test_lib::get_test_data_file_path;
#[expect(
dead_code,
reason = "this test does not use all functions from `test_lib`"
)]
mod test_lib;
#[test]
fn transfer_test() -> Result<(), Box<dyn Error>> {
let expected_json = read_to_string(get_test_data_file_path())?;
let expected_json = expected_json.replace('\r', "");
let expected_json = expected_json.trim_end();
let mut json_reader = JsonStreamReader::new(expected_json.as_bytes());
let mut writer = Vec::<u8>::new();
let mut json_writer = JsonStreamWriter::new_custom(
&mut writer,
WriterSettings {
pretty_print: true,
..Default::default()
},
);
json_writer.begin_object()?;
json_writer.name("nested")?;
json_writer.begin_array()?;
json_reader.transfer_to(&mut json_writer)?;
json_reader.consume_trailing_whitespace()?;
json_writer.end_array()?;
json_writer.end_object()?;
json_writer.finish_document()?;
let intermediate_json = String::from_utf8(writer)?;
let mut json_reader = JsonStreamReader::new(intermediate_json.as_bytes());
let mut writer = Vec::<u8>::new();
let mut json_writer = JsonStreamWriter::new_custom(
&mut writer,
WriterSettings {
pretty_print: true,
..Default::default()
},
);
json_reader.seek_to(&json_path!["nested", 0])?;
json_reader.transfer_to(&mut json_writer)?;
json_reader.skip_to_top_level()?;
json_reader.consume_trailing_whitespace()?;
json_writer.finish_document()?;
assert_eq!(expected_json, String::from_utf8(writer)?);
Ok(())
}