use clap::{Parser, Subcommand};
use poems::*;
#[derive(Parser)]
#[clap(author, version, about = "poem by example")]
struct Executable {
#[clap(subcommand)]
command: Command,
}
#[derive(Subcommand)]
enum Command {
#[clap(name = "hello")]
#[clap(author, version, about = "Hello world")]
Hello(hello::Options),
#[clap(name = "hello-ws")]
#[clap(author, version, about = "Hello world w/ websocket")]
HelloWs(hello_ws::Options),
#[clap(name = "hello-openapi")]
#[clap(author, version, about = "Hello world w/ openapi")]
HelloOpenapi(hello_openapi::Options),
#[clap(name = "hello-404")]
#[clap(author, version, about = "Hello world w/ 404 handler")]
Hello404(hello_404::Options),
#[clap(name = "hello-debug")]
#[clap(author, version, about = "Hello world w/ debug")]
HelloDebug(hello_debug::Options),
#[clap(name = "hello-tracing")]
#[clap(author, version, about = "Hello world w/ tracing")]
HelloTracing(hello_tracing::Options),
#[clap(name = "hello-logger")]
#[clap(author, version, about = "Hello world w/ logger")]
HelloLogger(hello_logger::Options),
#[clap(name = "hello-world")]
#[clap(author, version, about = "Hello world w/ manual endpoint impl")]
HelloWorld(hello_world::Options),
#[clap(name = "hello-unix")]
#[clap(author, version, about = "Hello world, unix domain socket")]
HelloUnix(hello_unix::Options),
#[clap(name = "hello-id")]
#[clap(author, version, about = "Hello world, /hello/:id, /hello/:id/:name")]
HelloId(hello_id::Options),
#[clap(name = "nothing")]
#[clap(author, version, about = "Nothing")]
Nothing(nothing::Options),
#[clap(name = "echo")]
#[clap(author, version, about = "Echo request")]
Echo(echo::Options),
#[clap(name = "yaml")]
#[clap(author, version, about = "Echo request (yaml)")]
Yaml(yaml::Options),
#[clap(name = "ser")]
#[clap(author, version, about = "Serve static files")]
Ser(ser::Options),
}
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
Ok(match Executable::parse().command {
Command::Hello(mut options) => {
options.run().await?;
}
Command::HelloWs(mut options) => {
options.run().await?;
}
Command::HelloOpenapi(mut options) => {
options.run().await?;
}
Command::Hello404(mut options) => {
options.run().await?;
}
Command::HelloDebug(mut options) => {
options.run().await?;
}
Command::HelloTracing(mut options) => {
options.run().await?;
}
Command::HelloLogger(mut options) => {
options.run().await?;
}
Command::HelloWorld(mut options) => {
options.run().await?;
}
Command::HelloId(mut options) => {
options.run().await?;
}
Command::HelloUnix(mut options) => {
options.run().await?;
}
Command::Nothing(mut options) => {
options.run().await?;
}
Command::Echo(mut options) => {
options.run().await?;
}
Command::Yaml(mut options) => {
options.run().await?;
}
Command::Ser(mut options) => {
options.run().await?;
}
})
}