diff --git a/Cargo.lock b/Cargo.lock index d0ea773..b06aec5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -19,33 +19,33 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", "windows-sys", @@ -77,9 +77,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.17" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" dependencies = [ "clap_builder", "clap_derive", @@ -87,9 +87,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.17" +version = "4.5.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" dependencies = [ "anstream", "anstyle", @@ -99,9 +99,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck", "proc-macro2", @@ -111,15 +111,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "dirs-next" @@ -144,7 +144,7 @@ dependencies = [ [[package]] name = "encode" -version = "0.1.1" +version = "0.1.2" dependencies = [ "base58", "base64", @@ -190,9 +190,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libredox" @@ -206,9 +206,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -247,9 +247,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "strsim" @@ -259,9 +259,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.77" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -291,18 +291,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -311,9 +311,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "utf8parse" @@ -351,9 +351,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] diff --git a/Cargo.toml b/Cargo.toml index 28e1f5c..9646fd1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "encode" -version = "0.1.1" +version = "0.1.2" edition = "2021" [dependencies] diff --git a/src/cmd_base58.rs b/src/cmd_base58.rs index 51e213d..7c2ec00 100644 --- a/src/cmd_base58.rs +++ b/src/cmd_base58.rs @@ -28,7 +28,7 @@ impl CmdExec for CmdBase58 { if self.decode { let s = opt_result!(String::from_utf8(input), "Decode UTF8 failed: {}"); - let decoded = opt_result!(s.from_base58(), "Decode base58 failed: {:?}"); + let decoded = opt_result!(s.trim().from_base58(), "Decode base58 failed: {:?}"); std::io::stdout().write_all(&decoded)?; } else { let encoded = input.to_base58(); diff --git a/src/cmd_base64.rs b/src/cmd_base64.rs index 1d39ead..76e7d71 100644 --- a/src/cmd_base64.rs +++ b/src/cmd_base64.rs @@ -1,4 +1,4 @@ -use crate::util::{read_file_or_stdin, split_output_buff}; +use crate::util::{read_file_or_stdin, split_output_buff, trim_vec}; use crate::CmdExec; use base64::engine::general_purpose::{ STANDARD, STANDARD_NO_PAD, @@ -49,7 +49,7 @@ impl CmdExec for CmdBase64 { }; if self.decode { - let decoded = opt_result!(encoder.decode(&input), "Decode failed: {}"); + let decoded = opt_result!(encoder.decode(trim_vec(&input)), "Decode failed: {}"); std::io::stdout().write_all(&decoded)?; } else { let encoded = encoder.encode(&input); diff --git a/src/cmd_hex.rs b/src/cmd_hex.rs index b9de067..4dc6e36 100644 --- a/src/cmd_hex.rs +++ b/src/cmd_hex.rs @@ -1,4 +1,4 @@ -use crate::util::{read_file_or_stdin, split_output}; +use crate::util::{read_file_or_stdin, split_output, trim_vec}; use crate::CmdExec; use clap::Args; use rust_util::{opt_result, simple_error, XResult}; @@ -32,7 +32,7 @@ impl CmdExec for CmdHex { let input = read_file_or_stdin(&self.r#in)?; if self.decode { - let decoded = opt_result!(hex::decode(&input), "Decode failed: {}"); + let decoded = opt_result!(hex::decode(trim_vec(&input)), "Decode failed: {}"); std::io::stdout().write_all(&decoded)?; } else { let encoded = if self.upper_case { diff --git a/src/util.rs b/src/util.rs index 4fe0929..51ed661 100644 --- a/src/util.rs +++ b/src/util.rs @@ -2,6 +2,33 @@ use rust_util::{opt_result, simple_error, XResult}; use std::fs; use std::io::Read; +pub fn trim_vec(bytes: &[u8]) -> &[u8] { + let mut start = 0; + while start < bytes.len() && is_blank_char(bytes[start]) { + start += 1; + } + let mut end = bytes.len() - 1; + while end > 0 && is_blank_char(bytes[end]) { + end -= 1; + } + if start > end { + return &bytes[0..0]; + } + &bytes[start..=end] +} + +#[test] +fn test_trim_vec() { + assert_eq!(trim_vec(b"hello world"), b"hello world"); + assert_eq!(trim_vec(b" hello world "), b"hello world"); + assert_eq!(trim_vec(b" \r\nhello world \n\r\t "), b"hello world"); + assert_eq!(trim_vec(b" "), b""); +} + +fn is_blank_char(c: u8) -> bool { + c == b'\r' || c == b'\n' || c == b'\t' || c == b' ' +} + pub fn read_file_or_stdin(path: &Option) -> XResult> { match path { None => read_stdin(),