use std::sync::Arc;
use pib_service_api_permissions::Permissions;
use pib_service_api_types::config::oidc::OidcConfig;
use pib_service_inventory::InventoryProvider;
use tokio::net::ToSocketAddrs;
mod api_permissions;
mod error;
mod oidc;
mod router;
use router::router;
pub use error::Error;
use oidc::OidcAuth;
pub type Result<T, E = Error> = std::result::Result<T, E>;
struct ServiceState {
pub inventory_provider: Arc<dyn InventoryProvider>,
pub permissions: Arc<dyn Permissions>,
pub oidc: OidcConfig,
}
pub async fn run<A: ToSocketAddrs>(
addrs: A,
inventory_provider: Arc<dyn InventoryProvider>,
permissions: Arc<dyn Permissions>,
oidc: OidcConfig,
) -> anyhow::Result<()> {
let service_state = ServiceState {
inventory_provider,
permissions,
oidc,
};
let app = router(service_state);
let listener = tokio::net::TcpListener::bind(addrs).await?;
axum::serve(listener, app).await?;
Ok(())
}