tunein-cli 0.4.2

Browse and listen to thousands of radio stations across the globe right from your terminal 🌎 📻 🎵✨
use std::net::SocketAddr;

use anyhow::Error;
use owo_colors::OwoColorize;
use tonic::transport::Server;
use tunein_cli::api::tunein::v1alpha1::{
    browse_service_server::BrowseServiceServer, playback_service_server::PlaybackServiceServer,
};
use tunein_cli::api::tunein::FILE_DESCRIPTOR_SET;

use self::{browse::Browse, playback::Playback};

pub mod browse;
pub mod playback;

pub async fn exec(port: u16) -> Result<(), Error> {
    let addr: SocketAddr = format!("0.0.0.0:{}", port).parse().unwrap();
    println!(
        "{}",
        r#"
        ______              ____       _______   ____
       /_  __/_ _____  ___ /  _/__    / ___/ /  /  _/
        / / / // / _ \/ -_)/ // _ \  / /__/ /___/ /  
       /_/  \_,_/_//_/\__/___/_//_/  \___/____/___/  
                                                              
    "#
        .bright_green()
    );
    println!("Listening on {}", addr.cyan());
    Server::builder()
        .accept_http1(true)
        .add_service(
            tonic_reflection::server::Builder::configure()
                .register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET)
                .build_v1alpha()?,
        )
        .add_service(tonic_web::enable(BrowseServiceServer::new(
            Browse::default(),
        )))
        .add_service(tonic_web::enable(PlaybackServiceServer::new(
            Playback::default(),
        )))
        .serve(addr)
        .await?;
    Ok(())
}