From 4b87dd0770fa51fdcc031b227e293b66ed041ad7 Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Thu, 9 May 2024 13:25:44 +0300
Subject: [PATCH 1/4] chore: Add `ArgParse` error
---
src/errors.rs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/errors.rs b/src/errors.rs
index e425f56..b64d9c6 100644
--- a/src/errors.rs
+++ b/src/errors.rs
@@ -38,6 +38,8 @@ pub enum Error {
#[error("Invalid Vault Index Error: {0}")]
InvalidVaultIndex(String),
#[error("{0}")]
+ ArgParse(String),
+ #[error("{0}")]
Other(String),
#[error("CLI error: {0}")]
--
2.45.2
From 71ca10e865c4b42fa050a00e97ccf10768308211 Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Thu, 9 May 2024 13:26:08 +0300
Subject: [PATCH 2/4] chore: A clap parser to parse key value args
---
src/clap_parsers.rs | 30 ++++++++++++++++++++++++++++++
src/main.rs | 2 ++
2 files changed, 32 insertions(+)
create mode 100644 src/clap_parsers.rs
diff --git a/src/clap_parsers.rs b/src/clap_parsers.rs
new file mode 100644
index 0000000..e2bdacd
--- /dev/null
+++ b/src/clap_parsers.rs
@@ -0,0 +1,30 @@
+// Lprs - A local CLI vault manager
+// Copyright (C) 2024 Awiteb
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+use crate::{LprsError, LprsResult};
+
+/// Parse the key & value arguments.
+/// ## Errors
+/// - If the argument value syntax not `key=value`
+pub fn kv_parser(value: &str) -> LprsResult<(String, String)> {
+ if let Some((key, value)) = value.split_once('=') {
+ Ok((key.trim().to_owned(), value.trim().to_owned()))
+ } else {
+ Err(LprsError::ArgParse(
+ "There is no value, the syntax is `KEY=VALUE`".to_owned(),
+ ))
+ }
+}
diff --git a/src/main.rs b/src/main.rs
index ba59a86..dc27b93 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -21,6 +21,8 @@ use std::process::ExitCode;
use clap::Parser;
use inquire::InquireError;
+/// A set of clap vaule parsers used to parse some CLI arguments
+pub mod clap_parsers;
/// The main module of the lprs crate, contains the cli and the commands.
pub mod cli;
/// The errors module, contains the errors and the result type.
--
2.45.2
From 0b020a1cb61710b8e8e05ea71ff9dcf73b3accf4 Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Thu, 9 May 2024 13:28:06 +0300
Subject: [PATCH 3/4] chore: Create new utils for custom fields
Is `get_duplicated_field` and `apply_custom_fields` utils
---
src/utils.rs | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/src/utils.rs b/src/utils.rs
index 525b0ce..fc2a979 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -14,6 +14,7 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+use std::collections::BTreeMap;
use std::{fs, path::PathBuf};
use inquire::{validator::Validation, Password, PasswordDisplayMode};
@@ -174,3 +175,33 @@ pub fn lprs_version() -> LprsResult