sugar_cli/launch/
process.rs

1use 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        // padding
38        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}