sugar_cli/launch/
process.rs1use std::sync::{atomic::AtomicBool, Arc};
2
3use anyhow::Result;
4use console::{style, Style};
5use dialoguer::{theme::ColorfulTheme, Confirm};
6
7use crate::{
8 common::LAUNCH_EMOJI,
9 config::parser::get_config_data,
10 create_config::{process_create_config, CreateConfigArgs},
11 deploy::{process_deploy, DeployArgs},
12 upload::{process_upload, UploadArgs},
13 validate::{process_validate, ValidateArgs},
14 verify::{process_verify, VerifyArgs},
15};
16
17pub struct LaunchArgs {
18 pub assets_dir: String,
19 pub config: String,
20 pub keypair: Option<String>,
21 pub rpc_url: Option<String>,
22 pub cache: String,
23 pub strict: bool,
24 pub skip_collection_prompt: bool,
25 pub interrupted: Arc<AtomicBool>,
26}
27
28pub async fn process_launch(args: LaunchArgs) -> Result<()> {
29 println!("Starting Sugar launch... {}", LAUNCH_EMOJI);
30
31 let theme = ColorfulTheme {
32 prompt_style: Style::new(),
33 ..Default::default()
34 };
35
36 if let Err(err) = get_config_data(&args.config) {
37 println!();
39 if Confirm::with_theme(&theme)
40 .with_prompt("Could not load config file. Would you like to create a new config file?")
41 .interact()?
42 {
43 println!("\n{} sugar create-config\n", style(">>>").magenta());
44
45 let create_config_args = CreateConfigArgs {
46 config: Some(args.config.clone()),
47 keypair: args.keypair.clone(),
48 rpc_url: args.rpc_url.clone(),
49 assets_dir: args.assets_dir.clone(),
50 };
51
52 process_create_config(create_config_args)?;
53 } else {
54 return Err(err.into());
55 }
56 }
57
58 println!("\n{} sugar validate\n", style(">>>").magenta());
59
60 let validate_args = ValidateArgs {
61 assets_dir: args.assets_dir.clone(),
62 strict: args.strict,
63 skip_collection_prompt: args.skip_collection_prompt,
64 };
65
66 process_validate(validate_args)?;
67
68 println!("\n{} sugar upload\n", style(">>>").magenta());
69
70 let upload_args = UploadArgs {
71 assets_dir: args.assets_dir.clone(),
72 config: args.config.clone(),
73 keypair: args.keypair.clone(),
74 rpc_url: args.rpc_url.clone(),
75 cache: args.cache.clone(),
76 interrupted: args.interrupted.clone(),
77 };
78
79 process_upload(upload_args).await?;
80
81 println!("\n{} sugar deploy\n", style(">>>").magenta());
82
83 let deploy_args = DeployArgs {
84 config: args.config.clone(),
85 keypair: args.keypair.clone(),
86 rpc_url: args.rpc_url.clone(),
87 cache: args.cache.clone(),
88 interrupted: args.interrupted.clone(),
89 collection_mint: None,
90 };
91
92 process_deploy(deploy_args).await?;
93
94 println!("\n{} sugar verify\n", style(">>>").magenta());
95
96 let verify_args = VerifyArgs {
97 keypair: args.keypair.clone(),
98 rpc_url: args.rpc_url.clone(),
99 cache: args.cache.clone(),
100 };
101
102 process_verify(verify_args)?;
103
104 Ok(())
105}