// SPDX-FileCopyrightText: 2024 Ɓukasz Niemier <#@hauleth.dev> // // SPDX-License-Identifier: EUPL-1.2 use crate::output::Output; use crate::sources::*; use rayon::prelude::*; use simple_eyre::eyre::Result; #[derive(Debug, serde::Deserialize)] pub struct Entry { pub name: String, pub keys: Box<[Source]>, } impl Entry { pub fn fetch(self) -> Result<(String, Vec)> { let mut stream: Vec = self .keys .par_iter() .flat_map(|k| k.fetch().unwrap()) .collect(); // Deduplicate keys, no need for duplicated entries stream.sort(); stream.dedup_by(|a, b| a.key_data() == b.key_data()); Ok((self.name.clone(), stream)) } } #[derive(Debug, serde::Deserialize)] pub struct Config { #[serde(rename = "entry")] pub entries: Box<[Entry]>, } impl Config { pub fn fetch(self) -> Result { self.entries.into_par_iter().map(Entry::fetch).collect() } }