starlane_core/resource/
create_args.rs1use std::fs::File;
2use std::io::{Read, Write};
3
4use std::str::FromStr;
5
6use zip::write::FileOptions;
7use zip::{CompressionMethod, ZipWriter};
8
9use crate::error::Error;
10use crate::resource::{ResourceAddress,ResourceType,ResourceKind};
11use std::convert::TryInto;
12use starlane_resources::ResourcePath;
13
14lazy_static! {
15 pub static ref ARTIFACT_BUNDLE: ResourcePath = artifact_bundle_address();
16 pub static ref SPACE: &'static str = r#"
17name: Space
18args:
19 - display-name:
20 about: Takes a human friendly display name
21 required: true
22 "#;
23 pub static ref SUB_SPACE: &'static str = r#"
24name: SubSpace
25args:
26 - display-name:
27 about: Takes a human friendly display name
28 required: true
29 "#;
30}
31
32pub fn artifact_bundle_address() -> ResourcePath {
33 let address = format!("space:core:{}", crate::VERSION.to_string());
34 ResourcePath::from_str(address.as_str()).expect(
35 format!(
36 "FATAL: expected artifact_bundle_address '{}' to be parse-able",
37 address
38 )
39 .as_str(),
40 )
41}
42
43pub fn space_address() -> Result<ResourcePath,Error> {
44 let path = artifact_bundle_address();
45 let address = path.append("/create-args/space.yaml" )?;
46 Ok(address)
47}
48
49
50pub fn create_args_artifact_bundle() -> Result<Vec<u8>, Error> {
51 let zipfile = tempfile::NamedTempFile::new()?;
52 let mut zip = ZipWriter::new(zipfile.reopen()?);
53
54 write_file_to_zip(&mut zip, "create-args/space.yaml", &SPACE)?;
55 write_file_to_zip(&mut zip, "create-args/sub_space.yaml", &SUB_SPACE)?;
56
57 zip.finish()?;
58
59 let mut file = zipfile.reopen()?;
60
61 let mut data = Vec::with_capacity(file.metadata()?.len() as _);
62 file.read_to_end(&mut data)?;
63
64 Ok(data)
65}
66
67fn write_file_to_zip(zip: &mut ZipWriter<File>, filename: &str, data: &str) -> Result<(), Error> {
68 let file_options = FileOptions::default()
69 .compression_method(CompressionMethod::Deflated)
70 .unix_permissions(0o755);
71
72 zip.start_file(filename, file_options)?;
73 zip.write_all(data.as_bytes())?;
74
75 Ok(())
76}