Skip to main content

pib_service_api/
lib.rs

1// SPDX-FileCopyrightText: Politik im Blick developers
2// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
3//
4// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2
5
6use std::sync::Arc;
7
8use pib_service_api_auth::ApiAuth;
9use pib_service_facade::Service;
10use tokio::net::ToSocketAddrs;
11
12mod auth;
13mod error;
14mod router;
15
16use router::router;
17
18use auth::Auth;
19pub use error::Error;
20
21pub type Result<T, E = Error> = std::result::Result<T, E>;
22
23pub async fn run<A: ToSocketAddrs>(
24    addrs: A,
25    service: Arc<dyn Service>,
26    auth: Arc<dyn ApiAuth>,
27) -> anyhow::Result<()> {
28    let auth_layer = { Auth::new(auth) };
29
30    let app = router(auth_layer, service).await;
31    let listener = tokio::net::TcpListener::bind(addrs).await?;
32    axum::serve(listener, app).await?;
33    Ok(())
34}