Kyaml: Subset of YAML, halfway between YAML and JSON

3 months ago 1

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

thockin

BenTheElder

liggitt

liggitt

BenTheElder

BenTheElder

BenTheElder

KYAML is a strict subset of YAML, which is sort of halfway between YAML and JSON. It has the following properties: * Does not depend on whitespace (easier to text-patch and template). * Always quotes value strings (no ambiguity aroud things like "no"). * Allows quoted keys, but does not require them, and only quotes them if they are not obviously safe (e.g. "no" would always be quoted). * Always uses {} for structs and maps (no more obscure errors about mapping values). * Always uses [] for lists (no more trying to figure out if a dash changes the meaning). * When printing, it includes a header which makes it clear this is YAML and not ill-formed JSON. * Allows trailing commas * Allows comments, * Tries to economize on vertical space by "cuddling" some kinds of brackets together. * Retains comments. Examples: A struct: ```yaml metadata: { creationTimestamp: "2024-12-11T00:10:11Z", labels: { app: "hostnames", }, name: "hostnames", namespace: "default", resourceVersion: "15231643", uid: "f64dbcba-9c58-40b0-bbe7-70495efb5202", } ``` A list of primitves: ```yaml ipFamilies: [ "IPv4", "IPv6", ] ``` A list of structs: ```yaml ports: [{ port: 80, protocol: "TCP", targetPort: 80, }, { port: 443, protocol: "TCP", targetPort: 443, }] ``` A multi-document stream: ```yaml --- { foo: "bar", } --- { qux: "zrb", } ```
* Can read 1 file (cmdline) * Can read multiple files (cmdline) * Can read stdin * Can write traditional YAML or KYAML * Can diff input vs output (-d) * Can write results to the input files (-w)
It's unclear if we actually need this. The round-trip test works without it. The spec describes escapes for things like space and forward-slash, which seem wrong to escape, so I may be misreading it.
Merge the "regular" and "compact" tests together.

BenTheElder

soltysh

Read Entire Article