mindustry logic execution, map- and schematic- parsing and rendering
Diffstat (limited to 'src/exe/print.rs')
-rw-r--r--src/exe/print.rs130
1 files changed, 5 insertions, 125 deletions
diff --git a/src/exe/print.rs b/src/exe/print.rs
index 525bf9a..25af8a4 100644
--- a/src/exe/print.rs
+++ b/src/exe/print.rs
@@ -1,85 +1,18 @@
-use std::borrow::Cow;
use std::env::Args;
-use std::fs;
-use std::io::{self, Write};
-use plandustry::block::build_registry;
-use plandustry::data::schematic::{Schematic, SchematicSerializer};
-use plandustry::data::{DataRead, Serializer};
+use mindus::build_registry;
+use mindus::{Schematic, SchematicSerializer};
-use crate::args::{self, ArgCount, ArgOption, OptionHandler};
use crate::print_err;
-pub fn main(mut args: Args, arg_off: usize) {
- let mut handler = OptionHandler::default();
- let opt_file = handler
- .add(ArgOption::new(
- Some('f'),
- Some(Cow::Borrowed("file")),
- ArgCount::Required(usize::MAX),
- ))
- .unwrap();
- let opt_interact = handler
- .add(ArgOption::new(
- Some('i'),
- Some(Cow::Borrowed("interactive")),
- ArgCount::Forbidden,
- ))
- .unwrap();
- if let Err(e) = args::parse(&mut args, &mut handler, arg_off) {
- print_err!(e, "Command error");
- return;
- }
-
+pub fn main(args: Args) {
let reg = build_registry();
let mut ss = SchematicSerializer(&reg);
let mut first = true;
let mut need_space = false;
- // process the files if any
- let file = match handler.get_value(opt_file).get_values() {
- None => false,
- Some(paths) => {
- for path in paths {
- match fs::read(path) {
- Ok(data) => {
- match ss.deserialize(&mut DataRead::new(&data)) {
- Ok(s) => {
- if !first || need_space {
- println!();
- }
- first = false;
- need_space = true;
- println!("Schematic: @{path}");
- print_schematic(&s);
- }
- // continue processing files, literals & maybe interactive mode
- Err(e) => {
- if need_space {
- println!();
- }
- first = false;
- need_space = false;
- print_err!(e, "Could not read schematic from {path}");
- }
- }
- }
- // continue processing files, literals & maybe interactive mode
- Err(e) => {
- if need_space {
- println!();
- }
- first = false;
- need_space = false;
- print_err!(e, "Could not read file {path:?}");
- }
- }
- }
- true
- }
- };
// process schematics from command line
- for curr in handler.get_literals() {
- match ss.deserialize_base64(curr) {
+ for curr in args {
+ match ss.deserialize_base64(&curr) {
Ok(s) => {
if !first || need_space {
println!();
@@ -100,59 +33,6 @@ pub fn main(mut args: Args, arg_off: usize) {
}
}
}
- // if --interactive or no schematics: continue parsing from console
- if handler.get_value(opt_interact).is_present() || (!file && handler.get_literals().is_empty())
- {
- if need_space {
- println!();
- }
- need_space = false;
- println!("Entering interactive mode, paste schematic to print details.");
- let mut buff = String::new();
- let stdin = io::stdin();
- loop {
- buff.clear();
- if need_space {
- println!();
- }
- need_space = false;
- print!("> ");
- if let Err(e) = io::stdout().flush() {
- // what the print & println macros would do
- panic!("failed printing to stdout: {e}");
- }
- match stdin.read_line(&mut buff) {
- Ok(..) => {
- let data = buff.trim();
- if data.is_empty() {
- break;
- }
- match ss.deserialize_base64(data) {
- Ok(s) => {
- println!();
- need_space = true;
- print_schematic(&s)
- }
- // continue interactive mode, typos are especially likely here
- Err(e) => {
- if need_space {
- println!();
- }
- need_space = false;
- print_err!(e, "Could not read schematic");
- }
- }
- }
- Err(e) => {
- if need_space {
- println!();
- }
- print_err!(e, "Failed to read next schematic");
- break;
- }
- }
- }
- }
}
pub fn print_schematic(s: &Schematic) {