Fetch User Keys - simple tool for fetching SSH keys from various sources
1use crate::output::Output; 2use crate::sources::*; 3 4use futures::prelude::*; 5 6#[derive(Debug, serde::Deserialize)] 7pub struct Entry { 8 pub name: String, 9 pub keys: Vec<Box<dyn Fetch>>, 10} 11 12impl Entry { 13 pub async fn fetch(&self) -> (String, Vec<String>) { 14 let stream = stream::iter(&self.keys) 15 .then(|k| async { k.fetch().await }) 16 .map(stream::iter) 17 .flatten() 18 .collect() 19 .await; 20 21 (self.name.clone(), stream) 22 } 23} 24 25#[derive(Debug, serde::Deserialize)] 26pub struct Config { 27 #[serde(rename = "entry")] 28 pub entries: Vec<Entry>, 29} 30 31impl Config { 32 pub async fn fetch(&self) -> Result<Output, ()> { 33 let keys = stream::iter(&self.entries) 34 .then(Entry::fetch) 35 .collect() 36 .await; 37 38 Ok(Output { keys }) 39 } 40}