use crate::prelude::*;
use di::ServiceProvider;
use miette::Report;
use rogue_logging::Logger;
pub struct Host {
pub services: ServiceProvider,
}
impl Host {
#[must_use]
pub fn new(services: ServiceProvider) -> Self {
Host { services }
}
pub async fn execute(&self) -> Result<bool, Report> {
let _ = self.services.get_required::<Logger>();
trace!("{} {}", APP_NAME, app_version_or_describe());
let args = self.services.get_required::<ArgumentsProvider>();
match args.get_command() {
Command::Batch => self
.services
.get_required::<BatchCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Config => self
.services
.get_required::<ConfigCommand>()
.execute()
.map_err(Report::new),
Command::Docs => Ok(self.services.get_required::<DocsCommand>().execute()),
Command::Inspect => self
.services
.get_required::<InspectCommand>()
.execute_cli()
.map_err(Report::new),
Command::Queue(QueueCommand::Add) => self
.services
.get_required::<QueueAddCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Queue(QueueCommand::Fetch) => self
.services
.get_required::<QueueFetchCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Queue(QueueCommand::List) => self
.services
.get_required::<QueueListCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Queue(QueueCommand::Remove) => self
.services
.get_required::<QueueRemoveCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Queue(QueueCommand::Summary) => self
.services
.get_required::<QueueSummaryCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Spectrogram => self
.services
.get_required::<SpectrogramCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Transcode => self
.services
.get_required::<TranscodeCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Upload => self
.services
.get_required::<UploadCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Verify => self
.services
.get_required::<VerifyCommand>()
.execute_cli()
.await
.map_err(Report::new),
Command::Version => Ok(self
.services
.get_required::<VersionCommand>()
.execute()
.await),
}
}
}