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}