summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmds/cmd/workspace_sheet.rs18
-rw-r--r--src/cmds/out/path.rs39
-rw-r--r--src/cmds/out/string_vcs.rs65
-rw-r--r--src/cmds/renderer/path.rs13
-rw-r--r--src/cmds/renderer/string_vec.rs13
5 files changed, 140 insertions, 8 deletions
diff --git a/src/cmds/cmd/workspace_sheet.rs b/src/cmds/cmd/workspace_sheet.rs
index a360203..2154b43 100644
--- a/src/cmds/cmd/workspace_sheet.rs
+++ b/src/cmds/cmd/workspace_sheet.rs
@@ -1,9 +1,11 @@
use crate::{
cmd_output,
cmds::{
- arg::workspace_sheet::JVWorkspaceSheetArgument, collect::workspace::JVWorkspaceCollect,
+ arg::workspace_sheet::JVWorkspaceSheetArgument,
+ collect::workspace::JVWorkspaceCollect,
converter::make_sheet_error::MakeSheetErrorConverter,
- r#in::workspace_sheet::JVWorkspaceSheetInput, out::none::JVNoneOutput,
+ r#in::workspace_sheet::JVWorkspaceSheetInput,
+ out::{none::JVNoneOutput, path::JVPathOutput, string_vcs::JVStringVecOutput},
},
systems::{
cmd::{
@@ -92,15 +94,15 @@ async fn exec(input: In, collect: Collect) -> Result<AnyOutput, CmdExecuteError>
}
}
JVWorkspaceSheetInput::ListAll => {
- collect
+ return cmd_output!(JVStringVecOutput => collect
.manager
- .list_sheet_names()
- .await
- .iter()
- .for_each(|name| println!("{}", name));
+ .list_sheet_names().await.into());
}
JVWorkspaceSheetInput::PrintPath(sheet_name) => {
- println!("{}", collect.manager.get_sheet_path(sheet_name).display())
+ return cmd_output!(JVPathOutput => collect
+ .manager
+ .get_sheet_path(sheet_name)
+ .into());
}
}
cmd_output!(JVNoneOutput => JVNoneOutput)
diff --git a/src/cmds/out/path.rs b/src/cmds/out/path.rs
new file mode 100644
index 0000000..2ddd643
--- /dev/null
+++ b/src/cmds/out/path.rs
@@ -0,0 +1,39 @@
+use serde::Serialize;
+use std::path::PathBuf;
+
+#[derive(Serialize)]
+pub struct JVPathOutput {
+ pub path: PathBuf,
+}
+
+impl From<PathBuf> for JVPathOutput {
+ fn from(path: PathBuf) -> Self {
+ JVPathOutput { path }
+ }
+}
+
+impl From<JVPathOutput> for PathBuf {
+ fn from(jv_path: JVPathOutput) -> Self {
+ jv_path.path
+ }
+}
+
+impl AsRef<PathBuf> for JVPathOutput {
+ fn as_ref(&self) -> &PathBuf {
+ &self.path
+ }
+}
+
+impl AsRef<std::path::Path> for JVPathOutput {
+ fn as_ref(&self) -> &std::path::Path {
+ &self.path
+ }
+}
+
+impl std::ops::Deref for JVPathOutput {
+ type Target = PathBuf;
+
+ fn deref(&self) -> &Self::Target {
+ &self.path
+ }
+}
diff --git a/src/cmds/out/string_vcs.rs b/src/cmds/out/string_vcs.rs
new file mode 100644
index 0000000..e01fde7
--- /dev/null
+++ b/src/cmds/out/string_vcs.rs
@@ -0,0 +1,65 @@
+use serde::Serialize;
+
+#[derive(Serialize)]
+pub struct JVStringVecOutput {
+ pub vec: Vec<String>,
+}
+
+impl From<Vec<String>> for JVStringVecOutput {
+ fn from(vec: Vec<String>) -> Self {
+ JVStringVecOutput { vec }
+ }
+}
+
+impl From<JVStringVecOutput> for Vec<String> {
+ fn from(jv_string_vec: JVStringVecOutput) -> Self {
+ jv_string_vec.vec
+ }
+}
+
+impl AsRef<Vec<String>> for JVStringVecOutput {
+ fn as_ref(&self) -> &Vec<String> {
+ &self.vec
+ }
+}
+
+impl AsRef<[String]> for JVStringVecOutput {
+ fn as_ref(&self) -> &[String] {
+ &self.vec
+ }
+}
+
+impl std::ops::Deref for JVStringVecOutput {
+ type Target = Vec<String>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.vec
+ }
+}
+
+impl IntoIterator for JVStringVecOutput {
+ type Item = String;
+ type IntoIter = std::vec::IntoIter<String>;
+
+ fn into_iter(self) -> Self::IntoIter {
+ self.vec.into_iter()
+ }
+}
+
+impl<'a> IntoIterator for &'a JVStringVecOutput {
+ type Item = &'a String;
+ type IntoIter = std::slice::Iter<'a, String>;
+
+ fn into_iter(self) -> Self::IntoIter {
+ self.vec.iter()
+ }
+}
+
+impl<'a> IntoIterator for &'a mut JVStringVecOutput {
+ type Item = &'a mut String;
+ type IntoIter = std::slice::IterMut<'a, String>;
+
+ fn into_iter(self) -> Self::IntoIter {
+ self.vec.iter_mut()
+ }
+}
diff --git a/src/cmds/renderer/path.rs b/src/cmds/renderer/path.rs
new file mode 100644
index 0000000..25a5135
--- /dev/null
+++ b/src/cmds/renderer/path.rs
@@ -0,0 +1,13 @@
+use crate::{
+ cmds::out::path::JVPathOutput,
+ r_println,
+ systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult},
+};
+use render_system_macros::result_renderer;
+
+#[result_renderer(JVPathRenderer)]
+pub async fn render(data: &JVPathOutput) -> Result<JVRenderResult, CmdRenderError> {
+ let mut r = JVRenderResult::default();
+ r_println!(r, "{}", data.display());
+ Ok(r)
+}
diff --git a/src/cmds/renderer/string_vec.rs b/src/cmds/renderer/string_vec.rs
new file mode 100644
index 0000000..b71136a
--- /dev/null
+++ b/src/cmds/renderer/string_vec.rs
@@ -0,0 +1,13 @@
+use crate::{
+ cmds::out::string_vcs::JVStringVecOutput,
+ r_println,
+ systems::{cmd::errors::CmdRenderError, render::renderer::JVRenderResult},
+};
+use render_system_macros::result_renderer;
+
+#[result_renderer(JVStringVecRenderer)]
+pub async fn render(data: &JVStringVecOutput) -> Result<JVRenderResult, CmdRenderError> {
+ let mut r = JVRenderResult::default();
+ data.iter().for_each(|s| r_println!(r, "{}", s));
+ Ok(r)
+}