Skip to main content

dxm_init/
lib.rs

1//! A crate for initializing FXServer data directories.
2
3use std::{error::Error, path::Path};
4
5use dxm_manifest::{Manifest, resource::Resource};
6use vcs::VcsOption;
7
8pub mod vcs;
9
10pub const README_NAME: &str = "README.md";
11pub const ENV_CFG_NAME: &str = "env.cfg";
12pub const PERMISSIONS_CFG_NAME: &str = "permissions.cfg";
13pub const RESOURCES_CFG_NAME: &str = "resources.cfg";
14pub const SECRETS_CFG_NAME: &str = "secrets.cfg";
15pub const SERVER_CFG_NAME: &str = "server.cfg";
16pub const TXDATA_DIR: &str = "txData";
17pub const TXDATA_DEFAULT_PROFILE: &str = "default";
18pub const TXDATA_CONFIG_NAME: &str = "config.json";
19
20const README: &str = include_str!("../templates/README.md");
21const ENV_CFG: &str = include_str!("../templates/env.cfg");
22const PERMISSIONS_CFG: &str = include_str!("../templates/permissions.cfg");
23const RESOURCES_CFG: &str = include_str!("../templates/resources.cfg");
24const SECRETS_CFG: &str = include_str!("../templates/secrets.cfg");
25const SERVER_CFG: &str = include_str!("../templates/server.cfg");
26const TXDATA_DEFAULT_CONFIG: &str = include_str!("../templates/txData-config.json");
27
28/// Initialize server data files in the given directory path with the given vcs.
29pub fn server<P>(path: P, vcs: &VcsOption) -> Result<(), Box<dyn Error>>
30where
31    P: AsRef<Path>,
32{
33    let path = path.as_ref();
34
35    fs_err::create_dir_all(path)?;
36
37    let mut manifest = Manifest::default();
38    let data_path = manifest.server.data(path);
39
40    manifest.resources.insert(
41        "[cfx-default]".to_owned(),
42        Resource::new(
43            "https://github.com/citizenfx/cfx-server-data",
44            "",
45            "resources",
46        ),
47    );
48
49    manifest.write(path)?;
50    fs_err::write(path.join(README_NAME), README)?;
51
52    fs_err::create_dir_all(manifest.server.resources(path))?;
53    fs_err::write(data_path.join(ENV_CFG_NAME), ENV_CFG)?;
54    fs_err::write(data_path.join(PERMISSIONS_CFG_NAME), PERMISSIONS_CFG)?;
55    fs_err::write(data_path.join(RESOURCES_CFG_NAME), RESOURCES_CFG)?;
56    fs_err::write(data_path.join(SECRETS_CFG_NAME), SECRETS_CFG)?;
57    fs_err::write(data_path.join(SERVER_CFG_NAME), SERVER_CFG)?;
58
59    let txdata_default_path = path.join(TXDATA_DIR).join(TXDATA_DEFAULT_PROFILE);
60
61    fs_err::create_dir_all(&txdata_default_path)?;
62    fs_err::write(
63        txdata_default_path.join(TXDATA_CONFIG_NAME),
64        TXDATA_DEFAULT_CONFIG,
65    )?;
66
67    vcs.init(path, &manifest)?;
68
69    Ok(())
70}