system.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use crate::{rust_template::create_system, workspace::with_workspace};
  2. use anchor_cli::config::ConfigOverride;
  3. use anyhow::{anyhow, Result};
  4. use std::fs;
  5. // Create a new system from the template
  6. pub fn new_system(cfg_override: &ConfigOverride, name: String) -> Result<()> {
  7. with_workspace(cfg_override, |cfg| {
  8. match cfg.path().parent() {
  9. None => {
  10. println!("Unable to make new system");
  11. }
  12. Some(parent) => {
  13. std::env::set_current_dir(parent)?;
  14. let cluster = cfg.provider.cluster.clone();
  15. let programs = cfg.programs.entry(cluster).or_default();
  16. if programs.contains_key(&name) {
  17. return Err(anyhow!("Program already exists"));
  18. }
  19. programs.insert(
  20. name.clone(),
  21. anchor_cli::config::ProgramDeployment {
  22. address: {
  23. create_system(&name)?;
  24. anchor_cli::rust_template::get_or_create_program_id(&name)
  25. },
  26. path: None,
  27. idl: None,
  28. },
  29. );
  30. let toml = cfg.to_string();
  31. fs::write("Anchor.toml", toml)?;
  32. println!("Created new system: {}", name);
  33. }
  34. };
  35. Ok(())
  36. })
  37. }