serde_aggregate 0.1.0

Iterate through serialized sequences allowing to aggregate them without deserializing to an allocated collection.
Documentation
use serde_deser_iter::top_level::DeserializerExt;
use std::{collections::HashSet, fs::File, io::BufReader, path::PathBuf};

#[derive(serde::Deserialize)]
struct DataEntry {
    subscribed_to: Vec<String>,
}

fn main() -> anyhow::Result<()> {
    let example_json_path: PathBuf = [
        env!("CARGO_MANIFEST_DIR"),
        "examples",
        "top_level_data.json",
    ]
    .iter()
    .collect();
    let buffered_file: BufReader<File> = BufReader::new(File::open(example_json_path)?);
    let mut json_deserializer = serde_json::Deserializer::from_reader(buffered_file);

    let mut all_channels = HashSet::new();
    json_deserializer.for_each(|entry: DataEntry| all_channels.extend(entry.subscribed_to))?;
    println!("All existing channels:");
    for channel in all_channels {
        println!("  - {channel}")
    }
    Ok(())
}