eth-icons 0.0.2

Retrieve ethereum icons
Documentation
use std::sync::Arc;

use futures_util::future::join_all;

use crate::{IconFetcher, IconQuery, IconSource, result::SourceResult};
use builder::IconClientBuilder;

pub mod builder;

pub struct IconClient {
    fetcher: IconFetcher,
    sources: Vec<Arc<dyn IconSource>>,
}

impl IconClient {
    pub fn new() -> Self {
        Self::builder().with_defaults().build()
    }

    pub fn builder() -> IconClientBuilder {
        IconClientBuilder::new()
    }

    pub fn fetcher(&self) -> &IconFetcher {
        &self.fetcher
    }

    pub fn sources(&self) -> &[Arc<dyn IconSource>] {
        &self.sources
    }

    pub async fn resolve(&self, query: IconQuery) -> Vec<SourceResult> {
        join_all(self.sources.iter().map(|source| async {
            SourceResult {
                source: source.name(),
                result: source.fetch(&self.fetcher, &query).await,
            }
        }))
        .await
    }
}

impl Default for IconClient {
    fn default() -> Self {
        Self::new()
    }
}