http-app 0.2.1

Wrapper around hyper to help with making a http server
Documentation
use std::{net::IpAddr, sync::Arc};

use bytes::Bytes;
use http_body_util::Full;
use hyper::{body::Incoming, Request, Response};
use http_app::{prom_metrics_server::PromMetricsServer, HttpServer, HttpServerHandler, HttpServerSettings};

struct Server;
impl HttpServerHandler for Server {
    type Body = Full<Bytes>;

    async fn handle_request(
        self: Arc<Self>,
        source: IpAddr,
        request: Request<Incoming>,
    ) -> Response<Full<Bytes>> {
        let (header, _body) = request.into_parts();
        Response::new(Full::new(Bytes::from(format!("hello world: {:?} - {}", source, header.uri.path()))))
    }
}

#[tokio::main]
async fn main() {
    pkg_details::init!();
    let server = HttpServer::new(Arc::new(Server), HttpServerSettings::default());

    let metrics_server = PromMetricsServer::new(Default::default());
    metrics_server.register(server.get_metrics());

    let server_handle = tokio::spawn(server.start("0.0.0.0:8080".parse().unwrap()));
    let metrics_handle = tokio::spawn(HttpServer::new(metrics_server, HttpServerSettings::default()).start("0.0.0.0:8081".parse().unwrap()));

    let _ = server_handle.await;
    let _ = metrics_handle.await;
}