Skip to main content

caretta_sync_cli/cli/
serve.rs

1use 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}