about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock12
-rw-r--r--Cargo.toml1
-rw-r--r--src/cli.rs45
3 files changed, 16 insertions, 42 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 6a2f287..587c33a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -243,6 +243,10 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
 
 [[package]]
 name = "bytes"
+version = "1.0.0"
+
+[[package]]
+name = "bytes"
 version = "1.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
@@ -1550,7 +1554,7 @@ dependencies = [
  "ahash",
  "atoi",
  "byteorder",
- "bytes",
+ "bytes 1.7.1",
  "crc",
  "crossbeam-queue",
  "either",
@@ -1628,7 +1632,7 @@ dependencies = [
  "base64",
  "bitflags 2.6.0",
  "byteorder",
- "bytes",
+ "bytes 1.7.1",
  "crc",
  "digest",
  "dotenvy",
@@ -1859,7 +1863,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5"
 dependencies = [
  "backtrace",
- "bytes",
+ "bytes 1.7.1",
  "libc",
  "mio",
  "pin-project-lite",
@@ -2293,6 +2297,7 @@ version = "1.0.0"
 dependencies = [
  "anyhow",
  "blake3",
+ "bytes 1.0.0",
  "chrono",
  "chrono-humanize",
  "clap",
@@ -2316,6 +2321,7 @@ dependencies = [
 name = "yt_dlp"
 version = "0.1.0"
 dependencies = [
+ "bytes 1.0.0",
  "log",
  "pyo3",
  "serde",
diff --git a/Cargo.toml b/Cargo.toml
index a2797f7..20b5af2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -40,6 +40,7 @@ url = { version = "2.5.2", features = ["serde"] }
 xdg = "2.5.2"
 yt_dlp = { path = "./yt_dlp/" }
 libmpv2 = { path = "./crates/libmpv2" }
+bytes = { path = "./crates/bytes" }
 trinitry = { version = "0.2.2" }
 
 [[bin]]
diff --git a/src/cli.rs b/src/cli.rs
index 6f5abd2..c567828 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -14,6 +14,7 @@ use anyhow::{bail, Error};
 use chrono::NaiveDate;
 use clap::{ArgAction, Args, Parser, Subcommand};
 use url::Url;
+use bytes::Bytes;
 
 use crate::{
     constants, select::selection_file::duration::Duration,
@@ -104,45 +105,11 @@ pub enum Command {
     },
 }
 
-fn byte_parser(s: &str) -> Result<u64, Error> {
-    const B: u64 = 1;
-
-    const KIB: u64 = 1024 * B;
-    const MIB: u64 = 1024 * KIB;
-    const GIB: u64 = 1024 * MIB;
-
-    const KB: u64 = 1000 * B;
-    const MB: u64 = 1000 * KB;
-    const GB: u64 = 1000 * MB;
-
-    let s = s
-        .chars()
-        .filter(|elem| !elem.is_whitespace())
-        .collect::<String>();
-
-    let number: u64 = s
-        .chars()
-        .take_while(|x| x.is_numeric())
-        .collect::<String>()
-        .parse()?;
-    let extension = s.chars().skip_while(|x| x.is_numeric()).collect::<String>();
-
-    let output = match extension.to_lowercase().as_str() {
-        "" => number,
-        "b" => number * B,
-        "kib" => number * KIB,
-        "mib" => number * MIB,
-        "gib" => number * GIB,
-        "kb" => number * KB,
-        "mb" => number * MB,
-        "gb" => number * GB,
-        other => bail!(
-            "Your extension '{}' is not yet supported. Only KB,MB,GB or KiB,MiB,GiB are supported",
-            other
-        ),
-    };
-
-    Ok(output)
+fn byte_parser(input: &str) -> Result<u64, anyhow::Error> {
+    Ok(input
+        .parse::<Bytes>()
+        .with_context(|| format!("Failed to parse '{}' as bytes!", input))?
+        .as_u64())
 }
 
 impl Default for Command {