1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use crate::result::Result;
use std::process::{self, Command};
use structopt::StructOpt;
const ORG: &str = "https://github.com/gear-dapps/";
const GIT_SUFFIX: &str = ".git";
const TEMPLATES: &[&str] = &[
"concert",
"crowdsale-ico",
"dao",
"dao-light",
"dutch-auction",
"escrow",
"feeds",
"fungible-token",
"gear-feeds-channel",
"lottery",
"multisig-wallet",
"nft-pixelboard",
"non-fungible-token",
"ping",
"RMRK",
"rock-paper-scissors",
"staking",
"supply-chain",
"swap",
];
#[derive(Debug, StructOpt)]
pub struct New {
pub template: Option<String>,
}
impl New {
fn template(name: &str) -> String {
ORG.to_string() + name + GIT_SUFFIX
}
fn help() {
println!("Available templates:\n\t{}", TEMPLATES.join("\n\t"));
}
pub async fn exec(&self) -> Result<()> {
if let Some(template) = &self.template {
if TEMPLATES.contains(&template.as_ref()) {
if !Command::new("git")
.args(&["clone", &Self::template(template)])
.status()?
.success()
{
process::exit(1);
}
} else {
crate::template::create(template)?;
}
println!("Successfully created {}!", template);
} else {
Self::help();
}
Ok(())
}
}