From 82be51826fbcd7be0f5f2ff0fdc0dc99d02add64 Mon Sep 17 00:00:00 2001
Message-Id: <82be51826fbcd7be0f5f2ff0fdc0dc99d02add64.1707223974.git.yuval.langer@gmail.com>
From: Yuval Langer <yuval.langer@gmail.com>
Date: Sun, 14 Jan 2024 14:54:10 +0200
Subject: [PATCH] Add guile-rsv package definition.

---
 gnu/packages/guile-xyz.scm | 65 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 0bfe6a903a..25674c32e8 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -5411,6 +5411,71 @@ using a short read-capability.")
     (home-page "https://codeberg.org/eris/guile-eris")
     (license license:gpl3+)))
 
+(define-public guile-rsv
+  (let ((commit "41b04c85eef31d4d51001c6d66e8fd339fcc614c")
+        (revision "1")
+        (base32-string "1w9jbkpmh13zrxkj915nm3l537smm0jsrdzrzcxylb6w59vqpw6l")
+        (git-repository-url "https://codeberg.org/kakafarm/guile-rsv/"))
+    (package
+      (name "guile-rsv")
+      (version (git-version "0.2.0" revision commit))
+      (source
+       (origin
+         (uri (git-reference
+               (url git-repository-url)
+               (commit commit)))
+         (method git-fetch)
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 base32-string))))
+      (inputs (list guile-3.0 bash))
+      (build-system guile-build-system)
+      (arguments
+       (list
+        #:phases #~(modify-phases %standard-phases
+                     (add-after 'install 'link-and-wrap-executable
+                       (lambda _
+                         (let* ((bin (string-append #$output "/bin"))
+                                ;; bin directory for PATH.
+                                (site-version (target-guile-effective-version))
+                                (scm (string-append "/share/guile/site/"
+                                                    site-version))
+                                (go (string-append "/lib/guile/" site-version
+                                                   "/site-ccache")))
+                           (mkdir-p bin)
+                           (for-each (lambda (command-name)
+                                       (let ((source-script (string-append #$output
+                                                             scm "/"
+                                                             command-name
+                                                             ".scm"))
+                                             (target-command (string-append
+                                                              bin "/"
+                                                              command-name)))
+                                         (symlink source-script target-command)
+                                         (wrap-program target-command
+                                           #:sh (which "bash")
+                                           `("GUILE_LOAD_PATH" prefix
+                                             (,(string-append #$output scm)))
+                                           `("GUILE_LOAD_COMPILED_PATH" prefix
+                                             (,(string-append #$output go))))))
+                                     (list "scm2rsv" "rsv2scm"))))))))
+      (home-page git-repository-url)
+      (synopsis
+       "Library for reading and writing Rows of String Values data format")
+      (description
+       "R7RS-small Scheme library for reading and writing RSV (Rows of String
+Values) data format, a very simple binary format for storing tables of
+strings.  It is a competitor for e.g. CSV (Comma Seperated Values),
+and TSV (Tab Separated Values).  Its main benefit is that the strings
+are represented as Unicode encoded as UTF-8, and the value and row
+separators are byte values that are never used in UTF-8, so the
+strings do not need any error prone escaping and thus can be written
+and read verbatim.
+
+Specified in https://github.com/Stenway/RSV-Specification and
+demonstrated in https://www.youtube.com/watch?v=tb_70o6ohMA.")
+      (license (list license:gpl3+ license:expat-0)))))
+
 (define-public guile-r6rs-protobuf
   (package
     (name "guile-r6rs-protobuf")
-- 
2.30.2

