buildx/vendor/sigs.k8s.io/yaml
Sebastiaan van Stijn 35b238ee82
vendor: vendor with -compat=1.17
This might break compatibility with projects using this module that
are still on go1.16, which is EOL, so probably ok to ignore:

    github.com/docker/buildx/store imports
        github.com/gofrs/flock tested by
        github.com/gofrs/flock.test imports
        gopkg.in/check.v1 loaded from gopkg.in/check.v1@v1.0.0-20200227125254-8fa46927fb4f,
        but go 1.16 would select v1.0.0-20201130134442-10cb98267c6c

    To upgrade to the versions selected by go 1.16:
        go mod tidy -go=1.16 && go mod tidy -go=1.17
    If reproducibility with go 1.16 is not needed:
        go mod tidy -compat=1.17
    For other options, see:
        https://golang.org/doc/modules/pruning

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2022-05-10 20:33:20 +02:00
..
.gitignore Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
.travis.yml vendor: update buildkit to 2943a0838 2020-09-19 22:49:12 -07:00
code-of-conduct.md Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
CONTRIBUTING.md Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
fields.go Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
LICENSE Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
OWNERS vendor: update buildkit to 2943a0838 2020-09-19 22:49:12 -07:00
README.md vendor: update buildkit to 2943a0838 2020-09-19 22:49:12 -07:00
RELEASE.md Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
SECURITY_CONTACTS Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
yaml_go110.go Bump buildkit to master and fix versions incompatible with go mod 1.13 2020-03-04 18:37:42 +01:00
yaml.go vendor: update buildkit to 2943a0838 2020-09-19 22:49:12 -07:00

YAML marshaling and unmarshaling support for Go

Build Status

kubernetes-sigs/yaml is a permanent fork of ghodss/yaml.

Introduction

A wrapper around go-yaml designed to enable a better way of handling YAML when marshaling to and from structs.

In short, this library 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. For a detailed overview of the rationale behind this method, see this blog post.

Compatibility

This package uses go-yaml and therefore supports everything go-yaml supports.

Caveats

Caveat #1: When using yaml.Marshal and yaml.Unmarshal, binary data should NOT be preceded with the !!binary YAML tag. If you do, go-yaml will convert the binary data from base64 to native binary data, which is not compatible with JSON. You can still use binary in your YAML files though - just store them without the !!binary tag and decode the base64 in your code (e.g. in the custom JSON methods MarshalJSON and UnmarshalJSON). This also has the benefit that your YAML and your JSON binary data will be decoded exactly the same way. As an example:

BAD:
	exampleKey: !!binary gIGC

GOOD:
	exampleKey: gIGC
... and decode the base64 data in your code.

Caveat #2: When using YAMLToJSON directly, maps with keys that are maps will result in an error since this is not supported by JSON. This error will occur in Unmarshal as well since you can't unmarshal map keys anyways since struct fields can't be keys.

Installation and usage

To install, run:

$ go get sigs.k8s.io/yaml

And import using:

import "sigs.k8s.io/yaml"

Usage is very similar to the JSON library:

package main

import (
	"fmt"

	"sigs.k8s.io/yaml"
)

type Person struct {
	Name string `json:"name"` // Affects YAML field names too.
	Age  int    `json:"age"`
}

func main() {
	// Marshal a Person struct to YAML.
	p := Person{"John", 30}
	y, err := yaml.Marshal(p)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(y))
	/* Output:
	age: 30
	name: John
	*/

	// Unmarshal the YAML back into a Person struct.
	var p2 Person
	err = yaml.Unmarshal(y, &p2)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(p2)
	/* Output:
	{John 30}
	*/
}

yaml.YAMLToJSON and yaml.JSONToYAML methods are also available:

package main

import (
	"fmt"

	"sigs.k8s.io/yaml"
)

func main() {
	j := []byte(`{"name": "John", "age": 30}`)
	y, err := yaml.JSONToYAML(j)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(y))
	/* Output:
	name: John
	age: 30
	*/
	j2, err := yaml.YAMLToJSON(y)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Println(string(j2))
	/* Output:
	{"age":30,"name":"John"}
	*/
}