cycles-quartz/crates/cli/src/handler/init.rs

69 lines
2 KiB
Rust
Raw Normal View History

2024-08-08 23:47:02 +00:00
use std::path::PathBuf;
use async_trait::async_trait;
2024-08-08 23:47:02 +00:00
use cargo_generate::{generate, GenerateArgs, TemplatePath, Vcs};
2024-08-28 23:45:09 +00:00
use color_eyre::owo_colors::OwoColorize;
use tokio::fs;
2024-08-28 23:45:09 +00:00
use tracing::info;
use crate::{
config::Config,
error::Error,
handler::Handler,
request::init::InitRequest,
response::{init::InitResponse, Response},
};
#[async_trait]
impl Handler for InitRequest {
type Error = Error;
2024-08-02 19:19:07 +00:00
type Response = Response;
2024-08-28 23:45:09 +00:00
// TODO: Add non-template init method
2024-08-15 20:54:55 +00:00
async fn handle<C: AsRef<Config> + Send>(
self,
config: C,
) -> Result<Self::Response, Self::Error> {
let config = config.as_ref();
2024-08-28 23:45:09 +00:00
info!("{}", "\nPeforming Init".blue().bold());
let root_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("../..");
2024-08-08 23:47:02 +00:00
let parent = self
.name
.parent()
.map(|p| p.to_path_buf())
.expect("path already validated");
fs::create_dir_all(&parent)
.await
.map_err(|e| Error::GenericErr(e.to_string()))?;
let file_name = self
.name
.file_name()
.and_then(|f| f.to_str())
.expect("path already validated");
2024-08-08 23:47:02 +00:00
let wasm_pack_args = GenerateArgs {
name: Some(file_name.to_string()),
destination: Some(config.app_dir.join(parent)),
overwrite: true,
2024-08-08 23:47:02 +00:00
vcs: Some(Vcs::Git),
template_path: TemplatePath {
// git: Some("git@github.com:informalsystems/cycles-quartz.git".to_string()), // TODO: replace with git address when open-sourced
path: Some(root_dir.join("examples/transfers").display().to_string()),
2024-08-08 23:47:02 +00:00
..TemplatePath::default()
},
..GenerateArgs::default()
};
let result_dir = generate(wasm_pack_args)
.expect("something went wrong!")
.display()
.to_string();
2024-08-28 23:45:09 +00:00
info!("\n{}", "It's TEE time.".green().bold());
2024-08-08 23:47:02 +00:00
Ok(InitResponse { result_dir }.into())
}
}