From e77ad8dada61dfde5bb9823c70083735a53ac509 Mon Sep 17 00:00:00 2001 From: Julien Loudet Date: Wed, 7 Feb 2024 12:30:31 +0100 Subject: [PATCH] refacto(commons): move `parse_vars` function in commons crate This will allow reusing this logic in all Zenoh-Flow executable. Signed-off-by: Julien Loudet --- zenoh-flow-commons/src/lib.rs | 2 +- zenoh-flow-commons/src/vars.rs | 18 ++++++++++++++++++ zfctl/src/instance_command.rs | 6 +++--- zfctl/src/main.rs | 18 ------------------ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/zenoh-flow-commons/src/lib.rs b/zenoh-flow-commons/src/lib.rs index 2602b672..cf290734 100644 --- a/zenoh-flow-commons/src/lib.rs +++ b/zenoh-flow-commons/src/lib.rs @@ -34,7 +34,7 @@ mod utils; pub use utils::try_load_from_file; mod vars; -pub use vars::Vars; +pub use vars::{Vars, parse_vars}; /// Zenoh-Flow's result type. pub type Result = std::result::Result; diff --git a/zenoh-flow-commons/src/vars.rs b/zenoh-flow-commons/src/vars.rs index 351d5fff..870ae7df 100644 --- a/zenoh-flow-commons/src/vars.rs +++ b/zenoh-flow-commons/src/vars.rs @@ -15,6 +15,7 @@ use crate::IMergeOverwrite; use serde::{Deserialize, Serialize}; use std::collections::HashMap; +use std::error::Error; use std::ops::Deref; use std::rc::Rc; @@ -78,3 +79,20 @@ impl, U: AsRef> From> for Vars { } } } + + +/// Parse a Vars from a string of the format "KEY=VALUE". +pub fn parse_vars( + s: &str, +) -> std::result::Result<(T, U), Box> +where + T: std::str::FromStr, + T::Err: Error + Send + Sync + 'static, + U: std::str::FromStr, + U::Err: Error + Send + Sync + 'static, +{ + let pos = s + .find('=') + .ok_or_else(|| format!("invalid KEY=value: no `=` found in `{s}`"))?; + Ok((s[..pos].parse()?, s[pos + 1..].parse()?)) +} diff --git a/zfctl/src/instance_command.rs b/zfctl/src/instance_command.rs index 06d570ca..84d60dae 100644 --- a/zfctl/src/instance_command.rs +++ b/zfctl/src/instance_command.rs @@ -14,7 +14,7 @@ use crate::row; -use super::{parse_key_val, ZENOH_FLOW_INTERNAL_ERROR}; +use super::ZENOH_FLOW_INTERNAL_ERROR; use std::path::PathBuf; @@ -23,7 +23,7 @@ use clap::Subcommand; use comfy_table::Table; use uuid::Uuid; use zenoh::prelude::r#async::*; -use zenoh_flow_commons::{Result, RuntimeId, Vars}; +use zenoh_flow_commons::{Result, RuntimeId, Vars, parse_vars}; use zenoh_flow_daemon::{selectors, InstanceStatus, InstancesQuery, Origin}; use zenoh_flow_descriptors::{DataFlowDescriptor, FlattenedDataFlowDescriptor}; @@ -56,7 +56,7 @@ pub(crate) enum InstanceCommand { /// /// Example: /// --vars HOME_DIR=/home/zenoh-flow --vars BUILD=debug - #[arg(long, value_parser = parse_key_val::, verbatim_doc_comment)] + #[arg(long, value_parser = parse_vars::, verbatim_doc_comment)] vars: Option>, }, /// To delete (and abort, if required) the data flow instance diff --git a/zfctl/src/main.rs b/zfctl/src/main.rs index 0fcec620..e137ad4a 100644 --- a/zfctl/src/main.rs +++ b/zfctl/src/main.rs @@ -15,8 +15,6 @@ mod instance_command; mod runtime_command; -use std::error::Error; - use anyhow::anyhow; use clap::{Parser, Subcommand}; use instance_command::InstanceCommand; @@ -67,22 +65,6 @@ enum Command { Runtime(RuntimeCommand), } -/// Parse a single key-value pair -fn parse_key_val( - s: &str, -) -> std::result::Result<(T, U), Box> -where - T: std::str::FromStr, - T::Err: Error + Send + Sync + 'static, - U: std::str::FromStr, - U::Err: Error + Send + Sync + 'static, -{ - let pos = s - .find('=') - .ok_or_else(|| format!("invalid KEY=value: no `=` found in `{s}`"))?; - Ok((s[..pos].parse()?, s[pos + 1..].parse()?)) -} - #[async_std::main] async fn main() -> Result<()> { // TODO Configure tracing such that: