nix-super/src/libutil
Felix Uhl 3fefc2b284 Fix derivation load assertion errors
When loading a derivation from a JSON, malformed input would trigger
cryptic "assertion failed" errors. Simply replacing calls to `operator []`
with calls to `.at()` was not enough, as this would cause json.execptions
to be printed verbatim.

Display nice error messages instead and give some indication where the
error happened.

*Before:*

```
$ echo 4 | nix derivation add
error: [json.exception.type_error.305] cannot use operator[] with a string argument with number

$ nix derivation show nixpkgs#hello | nix derivation add
Assertion failed: (it != m_value.object->end()), function operator[], file /nix/store/8h9pxgq1776ns6qi5arx08ifgnhmgl22-nlohmann_json-3.11.2/include/nlohmann/json.hpp, line 2135.

$ nix derivation show nixpkgs#hello | jq '.[] | .name = 5' | nix derivation add
error: [json.exception.type_error.302] type must be string, but is object

$ nix derivation show nixpkgs#hello | jq '.[] | .outputs = { out: "/nix/store/8j3f8j-hello" }' | nix derivation add
error: [json.exception.type_error.302] type must be object, but is string

```

*After:*

```
$ echo 4 | nix derivation add
error: Expected JSON of derivation to be of type 'object', but it is of type 'number'

$ nix derivation show nixpkgs#hello | nix derivation add
error: Expected JSON object to contain key 'name' but it doesn't

$ nix derivation show nixpkgs#hello | jq '.[] | .name = 5' | nix derivation add
error: Expected JSON value to be of type 'string' but it is of type 'number'

$ nix derivation show nixpkgs#hello | jq '.[] | .outputs = { out: "/nix/store/8j3f8j-hello" }' | nix derivation add
error:
       … while reading key 'outputs'

       error: Expected JSON value to be of type 'object' but it is of type 'string'
```
2023-08-05 01:34:30 +02:00
..
tests Merge pull request #4282 from tweag/fix-ca-hash-rewriting 2023-06-14 18:25:00 +02:00
abstract-setting-to-json.hh Split OptionalPathSetting from PathSetting 2023-06-18 23:31:18 -04:00
ansicolor.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
archive.cc Remove FormatOrString and remaining uses of format() 2023-03-02 15:57:54 +01:00
archive.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
args.cc Create nlohmann serializers for std::optional and use 2023-06-18 23:31:10 -04:00
args.hh Stuctured command stability 2023-04-03 11:48:21 -04:00
callback.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
canon-path.cc Backport SourcePath from the lazy-trees branch 2023-04-06 13:15:50 +02:00
canon-path.hh Merge remote-tracking branch 'upstream/master' into source-path 2023-04-17 11:41:50 +02:00
cgroup.cc Clean up cgroup handling in getMaxCPU() 2022-12-02 12:59:13 +01:00
cgroup.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
chunked-vector.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
closure.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
comparator.hh Create Derivation::fromJSON 2023-04-07 08:34:58 -04:00
compression.cc Rename and protect BufferedSink::write 2023-04-07 09:21:50 +02:00
compression.hh Rename and protect BufferedSink::write 2023-04-07 09:21:50 +02:00
compute-levels.cc Add x86_64 compute levels as additional system types 2021-02-22 09:11:15 +01:00
compute-levels.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
config-impl.hh Merge pull request #8374 from obsidiansystems/improve-path-setting 2023-06-21 15:40:43 -04:00
config.cc Split OptionalPathSetting from PathSetting 2023-06-18 23:31:18 -04:00
config.hh Split OptionalPathSetting from PathSetting 2023-06-18 23:31:18 -04:00
error.cc error.cc: Only suggest show-trace when truncated trace items would be printed 2023-03-23 17:29:06 +01:00
error.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
experimental-features.cc Support opening local store with database on read-only filesystem (#8356) 2023-06-20 11:34:09 +02:00
experimental-features.hh Merge pull request #8374 from obsidiansystems/improve-path-setting 2023-06-21 15:40:43 -04:00
filesystem.cc Remove dead code (#8504) 2023-06-14 14:09:11 -04:00
finally.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
fmt.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
git.cc Fix the parsing of the sourcehut refs file 2022-05-04 14:38:59 +02:00
git.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
hash.cc Merge pull request #7732 from hercules-ci/make-initLibStore-viable-alternative 2023-04-17 08:04:41 -04:00
hash.hh Rename and protect BufferedSink::write 2023-04-07 09:21:50 +02:00
hilite.cc Fix incorrect comment in hiliteMatches 2022-06-05 20:30:18 +02:00
hilite.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-impls.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-utils.cc Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
json-utils.hh Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
local.mk Remove the explicit c++fs linkage on darwin 2022-08-08 14:34:22 +02:00
logging.cc Enable -Werror=switch-enum 2023-04-03 18:45:20 +02:00
logging.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
lru-cache.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
monitor-fd.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
namespaces.cc Simplify the PID namespace check: just try to mount /proc 2023-02-10 14:38:14 +01:00
namespaces.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
pool.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
ref.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
references.cc Don't assume the type of string::size_type 2023-06-15 21:24:14 +02:00
references.hh Don't assume the type of string::size_type 2023-06-15 21:24:14 +02:00
regex-combinators.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
serialise.cc Merge pull request #8176 from tweag/rename-confusing-write-method 2023-04-14 10:44:36 +02:00
serialise.hh Merge pull request #8176 from tweag/rename-confusing-write-method 2023-04-14 10:44:36 +02:00
split.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
suggestions.cc Implement operator<< for Suggestions 2022-03-07 10:09:10 +01:00
suggestions.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
sync.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
tarfile.cc TarArchive: Remove a duplicate constant and increase the buffer size 2023-04-25 16:43:10 +02:00
tarfile.hh TarArchive: Remove a duplicate constant and increase the buffer size 2023-04-25 16:43:10 +02:00
thread-pool.cc Remove CPU locking 2021-12-22 15:56:25 +01:00
thread-pool.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
topo-sort.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
types.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
url-parts.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
url.cc url: make percentEncode stricter, expose and unit test it 2023-02-27 15:30:00 +01:00
url.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
util.cc restoreMountNamespace(): Restore the original root directory 2023-06-09 16:09:29 +02:00
util.hh Remove dead code (#8504) 2023-06-14 14:09:11 -04:00
xml-writer.cc xml-writer: Remove std aliases 2022-02-25 16:13:02 +01:00
xml-writer.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00