caretta_sync_cli/cli/
serve.rs1use std::marker::PhantomData;
2
3use caretta_sync_core::{
4 config::Config, global::CONFIG, server::ServerTrait, utils::runnable::Runnable,
5};
6use clap::Args;
7use sea_orm_migration::MigratorTrait;
8
9use super::ConfigArgs;
10
11#[derive(Args, Debug)]
12pub struct ServeCommandArgs<M, S>
13where
14 M: MigratorTrait,
15 S: ServerTrait,
16{
17 #[arg(skip)]
18 migrator: PhantomData<M>,
19 #[arg(skip)]
20 server: PhantomData<S>,
21 #[command(flatten)]
22 config: ConfigArgs,
23}
24impl<M, S> Runnable for ServeCommandArgs<M, S>
25where
26 M: MigratorTrait,
27 S: ServerTrait,
28{
29 #[tokio::main]
30 async fn run(self, app_name: &'static str) {
31 let config = CONFIG
32 .get_or_init::<Config>(self.config.into_config(app_name).await)
33 .await;
34 S::serve::<_, M>(config).await.unwrap();
35 }
36}