hive-router 0.0.47

GraphQL router/gateway for Federation
use hive_router_config::supergraph::SupergraphSource;

use crate::supergraph::{
    base::{LoadSupergraphError, SupergraphLoader},
    file::SupergraphFileLoader,
    hive::SupergraphHiveConsoleLoader,
};
use tracing::debug;

pub mod base;
pub mod file;
pub mod hive;

pub fn resolve_from_config(
    config: &SupergraphSource,
) -> Result<Box<dyn SupergraphLoader + Send + Sync>, LoadSupergraphError> {
    debug!(
        "Creating supergraph loader from source {}",
        config.source_name()
    );

    match config {
        SupergraphSource::File {
            path,
            poll_interval,
        } => {
            let path = path
                .as_ref()
                .ok_or(LoadSupergraphError::MissingSupergraphFilePath)?;
            Ok(SupergraphFileLoader::new(path, *poll_interval)?)
        }
        SupergraphSource::HiveConsole {
            endpoint,
            key,
            connect_timeout,
            request_timeout,
            accept_invalid_certs,
            retry_policy,
            poll_interval,
        } => {
            let endpoint = endpoint
                .as_ref()
                .ok_or(LoadSupergraphError::MissingHiveCDNEndpoint)?;
            let key = key.as_ref().ok_or(LoadSupergraphError::MissingHiveCDNKey)?;

            Ok(SupergraphHiveConsoleLoader::try_new(
                endpoint.clone().into(),
                key,
                *poll_interval,
                *connect_timeout,
                *request_timeout,
                *accept_invalid_certs,
                retry_policy.max_retries,
            )?)
        }
    }
}