nushell/crates/nuon
132ikl 83de8560ee
Unify closure serializing logic for to nuon, to msgpack, and to json (#15285)
# Description
Before this PR, `to msgpack`/`to msgpackz` and `to json` serialize
closures as `nil`/`null` respectively, when the `--serialize` option
isn't passed. This PR makes it an error to serialize closures to msgpack
or JSON without the `--serialize` flag, which is the behavior of `to
nuon`.

This PR also adds the `--serialize` flag to `to msgpack`.

This PR also changes `to nuon` and `to json` to return an error if they
cannot find the block contents of a closure, rather than serializing an
empty string or an error string, respectively. This behavior is
replicated for `to msgpack`.

It also changes `to nuon`'s error message for serializing closures
without `--serialize` to be the same as the new errors for `to json` and
`to msgpack`.

# User-Facing Changes

* Add `--serialize` flag to `to msgpack`, similar to the `--serialize`
flag for `to nuon` and `to json`.
* Serializing closures to JSON or msgpack without `--serialize`

Partially fixes #11738
2025-03-16 20:15:02 +01:00
..
src Unify closure serializing logic for to nuon, to msgpack, and to json (#15285) 2025-03-16 20:15:02 +01:00
Cargo.toml Bump to 0.102.1 dev version (#15012) 2025-02-05 00:19:48 -05:00
LICENSE create nuon crate from from nuon and to nuon (#12553) 2024-04-19 13:54:16 +02:00
README.md Add top-level crate documentation/READMEs (#12907) 2024-07-14 10:10:41 +02:00

Support for the NUON format.

The NUON format is a superset of JSON designed to fit the feel of Nushell. Some of its extra features are

  • trailing commas are allowed
  • commas are optional in lists
  • quotes are not required around keys or any bare string that do not contain spaces or special characters
  • comments are allowed, though not preserved when using [from_nuon]

Example

below is some data in the JSON format

{
    "name": "Some One",
    "birth": "1970-01-01",
    "stats": [
      2544729499973429198,
      687051042647753531,
      6702443901704799912
    ]
}

and an equivalent piece of data written in NUON

{
    name: "Some One",       # the name of the person
    birth: "1970-01-01",    # their date of birth
    stats: [                # some dummy "stats" about them
      2544729499973429198,
      687051042647753531,
      6702443901704799912, # note the trailing comma here...
    ], # and here
} # wait, are these comments in a JSON-like document?!?!