1#![doc = include_str!("../README.proj.md")]
2#![deny(missing_docs)]
17
18mod build;
19mod check;
20mod cmd;
21mod deploy;
22pub mod errors;
23mod export;
24mod export_error_page;
25mod init;
26mod install;
27pub mod parse;
29mod prepare;
30mod reload_server;
31mod serve;
32mod serve_exported;
33mod snoop;
34mod test;
35mod thread;
36mod tinker;
37
38use errors::*;
39use std::path::PathBuf;
40use std::{fs, path::Path};
41
42pub const PERSEUS_VERSION: &str = env!("CARGO_PKG_VERSION");
44pub use build::build;
45pub use check::check;
46pub use deploy::deploy;
47pub use export::export;
48pub use export_error_page::export_error_page;
49pub use init::{init, new};
50pub use install::{get_tools_dir, Tools};
51pub use prepare::check_env;
52pub use reload_server::{order_reload, run_reload_server};
53pub use serve::serve;
54pub use serve_exported::serve_exported;
55pub use snoop::{snoop_build, snoop_server, snoop_wasm_build};
56pub use test::test;
57pub use tinker::tinker;
58
59pub fn create_dist(dir: &Path) -> Result<(), ExecutionError> {
62 let target = dir.join("dist");
63 if !target.exists() {
64 fs::create_dir(target).map_err(|err| ExecutionError::CreateDistFailed { source: err })?;
65 }
66 Ok(())
67}
68
69pub fn delete_dist(dir: PathBuf) -> Result<(), ExecutionError> {
73 let target = dir.join("dist");
74 if target.exists() {
75 if let Err(err) = fs::remove_dir_all(&target) {
76 return Err(ExecutionError::RemoveArtifactsFailed {
77 target: target.to_str().map(|s| s.to_string()),
78 source: err,
79 });
80 }
81 }
82
83 Ok(())
84}
85
86pub fn delete_artifacts(dir: PathBuf, dir_to_remove: &str) -> Result<(), ExecutionError> {
89 let mut target = dir;
90 target.extend(["dist", dir_to_remove]);
91 if target.exists() {
93 if let Err(err) = fs::remove_dir_all(&target) {
94 return Err(ExecutionError::RemoveArtifactsFailed {
95 target: target.to_str().map(|s| s.to_string()),
96 source: err,
97 });
98 }
99 }
100 if let Err(err) = fs::create_dir_all(&target) {
104 return Err(ExecutionError::RemoveArtifactsFailed {
105 target: target.to_str().map(|s| s.to_string()),
106 source: err,
107 });
108 }
109
110 Ok(())
111}
112
113pub fn get_user_crate_name(dir: &Path) -> Result<String, ExecutionError> {
116 let manifest = cargo_toml::Manifest::from_path(dir.join("Cargo.toml"))
117 .map_err(|err| ExecutionError::GetManifestFailed { source: err })?;
118 let name = manifest
119 .package
120 .ok_or(ExecutionError::CrateNameNotPresentInManifest)?
121 .name;
122 Ok(name)
123}
124
125pub static WATCH_EXCLUSIONS: &[&str] =
132 &["dist", "target", "target_engine", "target_browser", ".git"];