tvl-depot/third_party/lisp/cl-json.nix
sterni ab036ffe59 fix(3p/lisp/cl-json): en/decode non-BMP characters correctly
Pin cl-json to a branch on my fork of cl-json which implements encoding
and decoding of non-BMP Unicode codepoints (>= U+10000) using UTF-16
surrogate points as the JSON specs prescribes. While we're at it, also
enable the test suite of the package.

This resolves the annoying issue of panettone garbling up some Unicode
characters by sending invalid JSON to cheddar and then incorrectly
decoding the returned result.

Fixes: b/145.
Change-Id: I44cb38c2775c0e5512d75f51dff0d1deb39f8f78
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5884
Tested-by: BuildkiteCI
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
2022-07-05 16:38:30 +00:00

53 lines
1.2 KiB
Nix

# JSON encoder & decoder
{ depot, pkgs, ... }:
let
inherit (depot.nix) buildLisp;
# https://github.com/sharplispers/cl-json/pull/12/
src = pkgs.fetchFromGitHub {
owner = "sternenseemann";
repo = "cl-json";
rev = "479685029c511cb2011f2f2a99ca6c63aa2e4865";
sha256 = "1663xlzb0wj6kd0wy2cmhafrwip7vy0wlfckc519aj9j18aak5ja";
};
getSrcs = subdir: map (f: src + ("/" + subdir + "/" + f));
in
buildLisp.library {
name = "cl-json";
deps = [ (buildLisp.bundled "asdf") ];
srcs = [ "${src}/cl-json.asd" ] ++
(getSrcs "src" [
"package.lisp"
"common.lisp"
"objects.lisp"
"camel-case.lisp"
"decoder.lisp"
"encoder.lisp"
"utils.lisp"
"json-rpc.lisp"
]);
tests = {
deps = [
depot.third_party.lisp.cl-unicode
depot.third_party.lisp.fiveam
];
srcs = [
# CLOS tests are broken upstream as well
# https://github.com/sharplispers/cl-json/issues/11
(pkgs.writeText "no-clos-tests.lisp" ''
(replace *features* (delete :cl-json-clos *features*))
'')
] ++ getSrcs "t" [
"package.lisp"
"testencoder.lisp"
"testdecoder.lisp"
"testmisc.lisp"
];
expression = "(fiveam:run! 'json-test::json)";
};
}