Documentation
¶
Overview ¶
Package yaml provides a wrapper around go-yaml designed to enable a better way of handling YAML when marshaling to and from structs.
In short, this package first converts YAML to JSON using go-yaml and then uses json.Marshal and json.Unmarshal to convert to or from the struct. This means that it effectively reuses the JSON struct tags as well as the custom JSON methods MarshalJSON and UnmarshalJSON unlike go-yaml.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func YAMLToJSON ¶
YAMLToJSON converts YAML to JSON. Since JSON is a subset of YAML, passing JSON through this method should be a no-op.
Things YAML can do that are not supported by JSON:
- In YAML you can have binary and null keys in your maps. These are invalid in JSON. (int and float keys are converted to strings.)
- Binary data in YAML with the !!binary tag is not supported. If you want to use binary data with this library, encode the data as base64 as usual but do not use the !!binary tag in your YAML. This will ensure the original base64 encoded data makes it all the way through to the JSON.
Types ¶
type DecodeOpts ¶ added in v0.1.0
type DecodeOpts struct {
// Origin controls origin-tracking behavior. When Origin.Enabled is
// false the OriginTree returned by Unmarshal is nil.
Origin OriginOpt
// DisableTimestamps suppresses YAML 1.1 implicit-timestamp resolution.
// When true, untagged date-shaped scalars (e.g. "1344-08-22") resolve
// to strings instead of time.Time, which keeps map keys stable for
// real-world specs that use date-shaped strings as keys. Explicit
// "!!timestamp" tags in the source still resolve to time.Time.
DisableTimestamps bool
}
DecodeOpts groups options that apply to the YAML decoder side, as opposed to JSONOpt which configures the JSON unmarshal step.
type OriginOpt ¶
type OriginOpt struct {
// Enabled adds __origin__ metadata to maps during unmarshaling.
Enabled bool
// File is the source file name recorded in origin metadata.
File string
}
OriginOpt controls origin-tracking behavior. When Enabled is false the OriginTree returned by Unmarshal is nil.
type OriginTree ¶ added in v0.0.6
type OriginTree struct {
// File is the source file for all origins in this subtree.
// Set once at the root of each decode call; all nodes in the same
// decode share the same file.
File string
// Origin is the raw __origin__ value ([]any compact sequence) for this node.
// Format: [key_name, key_line, key_col, nf, f1_name, f1_delta, f1_col, ..., ns, ...]
Origin any
// Fields holds child trees keyed by map key name.
Fields map[string]*OriginTree
// Items holds child trees for slice elements (index-aligned).
Items []*OriginTree
}
OriginTree holds __origin__ data extracted from a YAML-decoded map tree. It mirrors the structure of the spec: Fields tracks map children by key, Items tracks slice children by index.
func Unmarshal ¶
func Unmarshal(y []byte, o interface{}, decode DecodeOpts, opts ...JSONOpt) (*OriginTree, error)
Unmarshal converts YAML to JSON then uses JSON to unmarshal into o. It is the single public unmarshal entry point: pass DecodeOpts{} for the simple case, or set Origin / DisableTimestamps to opt into origin tracking or YAML 1.1 timestamp-resolution suppression. The variadic JSONOpt list configures the JSON unmarshal step. The returned OriginTree is nil when origin tracking is disabled.