claps 0.2.0

CLIs written in Rust
Documentation
use anyhow::Result;
use clap::Args;
use directories::BaseDirs;

use claps::common::cmd::Run;
use claps::common::log::LogResult;

#[derive(Debug, Args)]
pub(super) struct Cmd {}

#[async_trait::async_trait]
impl Run for Cmd {
    async fn run(self) -> Result<()> {
        let base_dirs = BaseDirs::new().unwrap();
        let config_dir = base_dirs.config_dir();
        let contents = include_str!(concat!(
            env!("CARGO_MANIFEST_DIR"),
            "/docs/ddns/ddns.service"
        ));
        let path = config_dir.join("systemd/user/ddns.service");
        std::fs::write(&path, contents).log()?;
        tracing::info!("installed: {:?}", path);
        let path = config_dir.join("systemd/user/ddns.timer");
        let contents = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/docs/ddns/ddns.timer"));
        std::fs::write(&path, contents).log()?;
        tracing::info!("installed: {:?}", path);
        claps::external::run("systemctl", ["--user", "enable", "--now", "ddns.timer"])?;
        tracing::info!("systemctl --user enable --now ddns.timer");
        Ok(())
    }
}