diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm index 39954d6764..1f8c128eba 100644 --- a/gnu/packages/serialization.scm +++ b/gnu/packages/serialization.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2020 Martin Becze ;;; Copyright © 2020 Alexandros Theodotou ;;; Copyright © 2023 Alexey Abramov +;;; Copyright © 2023 Sharlatan Hellseher ;;; ;;; This file is part of GNU Guix. ;;; @@ -41,6 +42,7 @@ #:use-module (guix build-system copy) #:use-module (guix build-system gnu) #:use-module (guix build-system meson) + #:use-module (guix build-system pyproject) #:use-module (guix build-system python) #:use-module (gnu packages) #:use-module (gnu packages autotools) @@ -58,6 +60,8 @@ #:use-module (gnu packages lua) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) + #:use-module (gnu packages python-check) #:use-module (gnu packages python-science) #:use-module (gnu packages python-xyz) #:use-module (gnu packages perl)) @@ -613,6 +617,61 @@ object, without whitespace.") RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster.") (license license:expat))) +(define-public python-msgspec + (package + (name "python-msgspec") + (version "0.16.0") + (source (origin + ;; There are no tests in the PyPI tarball. + (method git-fetch) + (uri (git-reference + (url "https://github.com/jcrist/msgspec") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "09q567klcv7ly60w9lqip2ffyhrij100ky9igh3p3vqwbml33zb3")))) + (build-system pyproject-build-system) + (arguments + (list + ;; Disable only one failing test. + ;; + ;; AssertionError: msgspec/structs.pyi:7: error: Positional-only + ;; parameters are only supported in Python 3.8 and greater + #:test-flags #~(list "-k" "not test_mypy") + #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'versioneer + (lambda _ + (invoke "versioneer" "install") + (substitute* "setup.py" + (("version=versioneer.get_version\\(),") + (format #f "version=~s," #$version)))))))) + (native-inputs (list python-attrs + python-gcovr + python-msgpack + python-mypy + python-pytest + python-setuptools-scm + python-versioneer)) + (propagated-inputs (list python-pyyaml python-tomli python-tomli-w)) + (home-page "https://jcristharif.com/msgspec/") + (synopsis "Fast serialization/validation library") + (description "@code{msgspec} is a fast serialization and validation +library, with builtin support for JSON, MessagePack, YAML, and TOML. It +includes the following features: + +@itemize +@item High performance encoders/decoders for common protocols. +@item Support for a wide variety of Python types. +@item Zero-cost schema validation using familiar Python type annotations. +@item A speedy Struct type for representing structured data. +@end itemize") + ;; XXX: It might support more architectures but GitHub Actions listed only + ;; two right now. Try to build for the rest supported by Guix. See: + ;; https://github.com/jcrist/msgspec/blob/main/.github/workflows/ci.yml#L83 + (supported-systems (list "x86_64-linux" "aarch64-linux")) + (license license:bsd-3))) + (define-public python-ruamel.yaml (package (name "python-ruamel.yaml")