Subject: [PATCH] gnu: Add rust-serialport

From: Franz Geffke <[email-masked]>
Date: Sat, 4 May 2024 15:46:33 +0100

Change-Id: I7935aab748ffd86569cac0af2e91da02323c4123
---
 gnu/packages/crates-io.scm                    | 132 ++++++++++++++++++
 .../rust-serialport-remove-macos.patch        |  17 +++
 2 files changed, 149 insertions(+)
 create mode 100644 gnu/packages/patches/rust-serialport-remove-macos.patch

diff --git a/gnu/packages/crates-io.scm b/gnu/packages/crates-io.scm
index a67d3d74bb..35cb1028df 100644
--- a/gnu/packages/crates-io.scm
+++ b/gnu/packages/crates-io.scm
@@ -3862,6 +3862,24 @@ (define-public rust-assert2-macros-0.3
     (description "This package provides procedural macros for assert2.")
     (license license:bsd-2)))
 
+(define-public rust-assert-hex-0.4
+  (package
+    (name "rust-assert_hex")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "assert_hex" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "19xwlhz2swak1gw6rv38wai7d1xn9l3mspnv1fl8rz7h60a0y0gp"))))
+    (build-system cargo-build-system)
+    (home-page "https://github.com/wcampbell0x2a/assert_hex")
+    (synopsis "Display assert panics in hexadecimal format")
+    (description
+     "Rust library to display assert panics in hexadecimal format")
+    (license license:expat)))
+
 (define-public rust-associative-cache-1
   (package
     (name "rust-associative-cache")
@@ -34763,6 +34781,64 @@ (define-public rust-libz-ng-sys-1
 high-performance zlib library.")
     (license (list license:expat license:asl2.0))))
 
+(define-public rust-libudev-sys-0.1
+  (package
+    (name "rust-libudev-sys")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libudev-sys" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "09236fdzlx9l0dlrsc6xx21v5x8flpfm3d5rjq9jr5ivlas6k11w"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2))
+       #:cargo-development-inputs
+       (("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (native-inputs
+     (list pkg-config
+           eudev))
+    (home-page "https://github.com/dcuddeback/libudev-rs")
+    (synopsis "Rust wrapper for libudev")
+    (description
+     "This crate provides a safe wrapper around the native libudev library.")
+    (license license:expat)))
+
+(define-public rust-libudev-0.3
+  (package
+    (name "rust-libudev")
+    (version "0.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "libudev" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1q1my5alvdwyi8i9pc9gn2mcx5rhbsssmz5cjnxzfpd65laj9cvq"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "Cargo.toml"
+             (("0.1.3") "0.1.4"))))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-libc" ,rust-libc-0.2)
+        ("rust-libudev-sys" ,rust-libudev-sys-0.1))
+       #:cargo-development-inputs
+        (("rust-pkg-config" ,rust-pkg-config-0.3))))
+    (native-inputs
+     (list pkg-config
+           eudev))
+    (home-page "https://github.com/dcuddeback/libudev-rs")
+    (synopsis "Rust wrapper for libudev")
+    (description
+     "This crate provides a safe wrapper around the native libudev library.")
+    (license license:expat)))
+
 (define-public rust-lifeguard-0.6
   (package
     (name "rust-lifeguard")
@@ -61303,6 +61379,41 @@ (define-public rust-serial-test-0.4
     (description "Serialising Rust tests")
     (license license:expat)))
 
+(define-public rust-serialport-4
+  (package
+    (name "rust-serialport")
+    (version "4.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "serialport" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0a380655dqrl16wfqnr75zxk3f8h3fshjjr68r4gh3clpv81anlg"))
+       (patches (search-patches "rust-serialport-remove-macos.patch"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-bitflags" ,rust-bitflags-2)
+        ("rust-cfg-if" ,rust-cfg-if-1)
+        ("rust-libudev" ,rust-libudev-0.3)
+        ("rust-nix" ,rust-nix-0.26)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-scopeguard" ,rust-scopeguard-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-unescaper" ,rust-unescaper-0.1))
+       #:cargo-development-inputs (("rust-assert-hex" ,rust-assert-hex-0.4)
+                                   ("rust-clap" ,rust-clap-3))))
+    (native-inputs
+     (list pkg-config
+           eudev))
+    (home-page "https://github.com/serialport/serialport-rs")
+    (synopsis "A cross-platform serial port library in Rust.")
+    (description
+     "A cross-platform serial port library in Rust. Provides a blocking I/O
+interface and port enumeration including USB device information.")
+    (license license:expat)))
+
 (define-public rust-servo-fontconfig-0.5
   (package
     (name "rust-servo-fontconfig")
@@ -74909,6 +75020,27 @@ (define-public rust-unescape-0.1
      "Unescapes strings with escape sequences written out as literal characters.")
     (license license:expat)))
 
+(define-public rust-unescaper-0.1
+  (package
+    (name "rust-unescaper")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (crate-uri "unescaper" version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0d4xi16mindhksi3lqvn0kzzgj5az9qbgxqmz7gwmcxm5v9nmpqa"))))
+    (build-system cargo-build-system)
+    (arguments
+     `(#:cargo-inputs
+       (("rust-thiserror" ,rust-thiserror-1))))
+    (home-page "https://github.com/hack-ink/unescaper")
+    (synopsis "Unescape strings with escape sequences.")
+    (description
+     "Unescape strings with escape sequences written out as literal characters.")
+    (license license:expat)))
+
 (define-public rust-ungrammar-1
   (package
     (name "rust-ungrammar")
diff --git a/gnu/packages/patches/rust-serialport-remove-macos.patch b/gnu/packages/patches/rust-serialport-remove-macos.patch
new file mode 100644
index 0000000000..5f779a78df
--- /dev/null
+++ b/gnu/packages/patches/rust-serialport-remove-macos.patch
@@ -0,0 +1,17 @@
+--- serialport-4.3.0/Cargo.toml	2024-05-01 16:01:21.986121155 +0100
++++ serialport-4.3.0/Cargo.toml	2024-05-01 16:00:38.874019301 +0100
+@@ -57,15 +57,6 @@ optional = true
+ [target."cfg(all(target_os = \"linux\", not(target_env = \"musl\")))".dependencies.unescaper]
+ version = "0.1.3"
+
+-[target."cfg(any(target_os = \"ios\", target_os = \"macos\"))".dependencies.core-foundation-sys]
+-version = "0.8.4"
+-
+-[target."cfg(any(target_os = \"ios\", target_os = \"macos\"))".dependencies.io-kit-sys]
+-version = "0.4.0"
+-
+-[target."cfg(any(target_os = \"ios\", target_os = \"macos\"))".dependencies.mach2]
+-version = "0.4.1"
+-
+ [target."cfg(unix)".dependencies.bitflags]
+ version = "2.4.0"
\ No newline at end of file

base-commit: 9e184d5e54d1fee98c75bcb577a98456a77ae015
-- 
2.41.0