From f92e9f6f07b1e3834c2ca58ce3510734819d08e4 Mon Sep 17 00:00:00 2001 From: Arne Dußin Date: Wed, 27 Jan 2021 14:01:50 +0100 Subject: Rework graf karto to fit the client/server structure --- src/client/cli/cmd/edit.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/client/cli/cmd/edit.rs (limited to 'src/client/cli/cmd/edit.rs') diff --git a/src/client/cli/cmd/edit.rs b/src/client/cli/cmd/edit.rs new file mode 100644 index 0000000..7a02959 --- /dev/null +++ b/src/client/cli/cmd/edit.rs @@ -0,0 +1,41 @@ +//! Replace the contents of the currently edited map with contents from a file. + +use super::Command; +use super::{CmdParseError, FromArgs}; +use crate::client::map::MapData; +use crate::client::Editor; +use std::path::PathBuf; + +/// Command to load a file from the disk and replace the current editor contents with it's info. +pub struct Edit { + file: PathBuf, +} + +impl FromArgs for Edit { + fn from_args(args: &[&str]) -> Result { + if args.len() != 1 { + return Err(CmdParseError::WrongNumberOfArgs(args.len(), 1..=1)); + } + + Ok(Self { + file: PathBuf::from(args[0]), + }) + } +} + +impl Command for Edit { + fn process(&self, editor: &mut Editor) -> Result { + let data = match MapData::load_from_file(&self.file) { + Ok(data) => data, + Err(err) => { + return Err(format!( + "Unable to read file: {:?}, reason: {:?}", + &self.file, err + )) + } + }; + + editor.map_mut().set_data(data); + Ok(format!("Map data from {:?} loaded.", &self.file)) + } +} -- cgit v1.2.3-70-g09d2