good morning!!!!

Skip to content
Snippets Groups Projects
Commit 48e6f782 authored by Garet Halliday's avatar Garet Halliday
Browse files

example

parent c7499f22
Branches
No related tags found
No related merge requests found
...@@ -19,3 +19,5 @@ ...@@ -19,3 +19,5 @@
# Go workspace file # Go workspace file
go.work go.work
out
package main
import (
"embed"
"fmt"
"gfx.cafe/util/temple/lib/sanctum"
"github.com/iancoleman/strcase"
"io/fs"
"path/filepath"
"sigs.k8s.io/yaml"
)
const (
OUTPUT = "./out/packets"
)
//go:embed packets.tmpl
var packetsTmpl string
//go:embed types.tmpl
var typesTmpl string
//go:embed spec
var input embed.FS
func removeExt(v string) string {
ext := filepath.Ext(v)
return v[:len(v)-len(ext)]
}
func main() {
t := sanctum.New(OUTPUT)
t.RegisterTemplate("packets", packetsTmpl)
t.RegisterTemplate("types", typesTmpl)
t.RegisterFunc(
"isCustomType", func(v string) bool {
switch v {
case "VarInt", "VarLong", "NBT", "UUID":
return true
default:
return false
}
})
t.RegisterFunc(
"isGeneratedType", func(v string) bool {
switch v {
case "byte", "uint8", "uint16", "uint32", "uint64", "uint",
"int8", "int16", "int32", "int64", "int",
"float32", "float64", "string", "bool",
"VarInt", "VarLong", "NBT", "UUID":
return false
default:
return true
}
})
t.RegisterFunc(
"emptyMap", func() map[any]any {
return make(map[any]any)
})
t.RegisterFunc(
"cloneMap", func(m map[any]any) map[any]any {
out := make(map[any]any)
for k, v := range m {
out[k] = v
}
return out
})
t.RegisterFunc(
"setMap", func(m map[any]any, k any, v any) struct{} {
m[k] = v
return struct{}{}
})
t.RegisterFunc(
"getMap", func(m map[any]any, k any) any {
return m[k]
})
t.RegisterFunc(
"isString", func(v any) bool {
_, ok := v.(string)
return ok
})
t.RegisterFunc(
"add", func(a, b int) int {
return a + b
})
typesFile, err := input.ReadFile("spec/types.yaml")
if err != nil {
panic(err)
}
var types map[string]any
err = yaml.Unmarshal(typesFile, &types)
t.Prepare(&sanctum.Prayer{
Input: "types",
Obj: types,
PackageName: "packets",
FileName: "types.go",
})
var states []fs.DirEntry
states, err = input.ReadDir("spec")
if err != nil {
panic(err)
}
for _, state := range states {
if !state.IsDir() {
continue
}
var directions []fs.DirEntry
directions, err = input.ReadDir(filepath.Join("spec", state.Name()))
for _, direction := range directions {
directionName := removeExt(direction.Name())
var packetsFile []byte
packetsFile, err = input.ReadFile(filepath.Join("spec", state.Name(), direction.Name()))
if err != nil {
panic(err)
}
var packets map[string]any
err = yaml.Unmarshal(packetsFile, &packets)
if err != nil {
panic(err)
}
packets["Types"] = types["Types"]
packets["Name"] = strcase.ToCamel(fmt.Sprintf("%s_%s", state.Name(), directionName))
t.Prepare(&sanctum.Prayer{
Input: "packets",
Obj: packets,
PackagePath: filepath.Join(state.Name(), directionName),
PackageName: state.Name() + "_" + directionName,
FileName: "packets.go",
})
}
}
err = t.Pray()
if err != nil {
panic(err)
}
}
import (
"gfx.cafe/etherlands/go/common/protocol/packet"
"gfx.cafe/etherlands/go/common/protocol/types"
"gfx.cafe/etherlands/go/common/protocol/registry"
"io"
)
var _ io.Reader
{{range $name, $type := .Types -}}
{{if isCustomType $name -}}
type {{$name}} = types.{{$name}}
{{else if isGeneratedType $name -}}
type {{$name}} = registry.{{$name}}
{{end -}}
{{end}}
type {{.Name}} struct {}
func (T {{.Name}}) PacketById(id VarInt) packet.Packet {
switch id {
{{range $name, $packet := .Packets -}}
case {{$packet.Id}}:
return new({{$name}})
{{end -}}
}
return nil
}
var Namespace registry.Namespace = {{.Name}}{}
{{range $name, $packet := .Packets -}}
{{template "allFor" (list $name $packet)}}
func (T *{{$name}}) PacketId() VarInt {
return VarInt({{$packet.Id}})
}
func (T *{{$name}}) Namespace() registry.Namespace {
return Namespace
}
func (T *{{$name}}) PacketName() string {
return "{{$name}}"
}
{{end -}}
\ No newline at end of file
---
Packets: {}
---
Packets:
Handshake:
Id: 0
Struct:
- Name: protocol_version
Type: VarInt
- Name: server_addr
Type: string
- Name: server_port
Type: uint16
- Name: next_state
Type: VarInt
---
Packets:
Pong:
Id: 1
Struct:
- Name: payload
Type: int64
Response:
Id: 0
Struct:
- Name: json_response
Type: string
MaxLength: 32767
---
Packets:
Ping:
Id: 1
Struct:
- Name: payload
Type: int64
Request:
Id: 0
---
Types:
byte:
Type: uint8
string:
Slice:
Prefix: VarInt
Type: byte
VarInt:
# custom builtin type
VarLong:
# custom builtin type
NBT:
# custom builtin type
Chat:
Type: string
Identifier:
Type: string
Slot:
Optional:
Struct:
- Name: item_id
Type: VarInt
- Name: count
Type: byte
- Name: nbt
Type: NBT
Position:
Type: uint64
Angle:
Type: uint8
UUID:
Array:
Length: 16
Type: byte
BitSet:
Slice:
Prefix: VarInt
Type: int64
RegistryTags:
Struct:
- Name: type
Type: Identifier
- Name: tags
Slice:
Prefix: VarInt
Type: RegistryTag
RegistryTag:
Struct:
- Name: name
Type: Identifier
- Name: entries
Slice:
Prefix: VarInt
Type: VarInt
CommandParserDouble:
Struct:
- Name: flags
Type: byte
- Name: min
Type: float64
Default: -1.7976931348623157E307
When:
NotEqual:
- And:
- Field: flags
- Value: 0x01
- Value: 0
- Name: max
Type: float64
Default: 1.7976931348623157E307
When:
NotEqual:
- And:
- Field: flags
- Value: 0x02
- Value: 0
CommandParserFloat:
Struct:
- Name: flags
Type: byte
- Name: min
Type: float32
Default: -3.4028235E38
When:
NotEqual:
- And:
- Field: flags
- Value: 0x01
- Value: 0
- Name: max
Type: float32
Default: 3.4028235E38
When:
NotEqual:
- And:
- Field: flags
- Value: 0x02
- Value: 0
CommandParserInteger:
Struct:
- Name: flags
Type: byte
- Name: min
Type: int32
Default: -2147483648
When:
NotEqual:
- And:
- Field: flags
- Value: 0x01
- Value: 0
- Name: max
Type: int32
Default: 2147483647
When:
NotEqual:
- And:
- Field: flags
- Value: 0x02
- Value: 0
CommandParserLong:
Struct:
- Name: flags
Type: byte
- Name: min
Type: int64
Default: -9223372036854775808
When:
NotEqual:
- And:
- Field: flags
- Value: 0x01
- Value: 0
- Name: max
Type: int64
Default: 9223372036854775807
When:
NotEqual:
- And:
- Field: flags
- Value: 0x02
- Value: 0
CommandNode:
Struct:
- Name: flags
Type: byte
- Name: children
Slice:
Prefix: VarInt
Type: VarInt
- Name: redirect_node
Type: VarInt
When:
NotEqual:
- And:
- Field: flags
- Value: 0x08
- Value: 0
- Name: name
Type: string
When:
Or:
- Equal:
- And:
- Field: flags
- Value: 0x03
- Value: 1
- Equal:
- And:
- Field: flags
- Value: 0x03
- Value: 2
- Name: parser
Type: string
When:
Equal:
- And:
- Field: flags
- Value: 0x03
- Value: 2
- Name: properties
Enum:
Discriminator: parser
Variants:
"brigadier:double":
Type: CommandParserDouble
"brigadier:float":
Type: CommandParserFloat
"brigadier:integer":
Type: CommandParserInteger
"brigadier:long":
Type: CommandParserLong
"brigadier:string":
Type: VarInt
"minecraft:entity":
Type: byte
"minecraft:score_holder":
Type: byte
"minecraft:range":
Type: bool
"minecraft:resource_or_tag":
Type: string
"minecraft:resource":
Type: string
- Name: suggestions_type
Type: Identifier
When:
NotEqual:
- And:
- Field: flags
- Value: 0x10
- Value: 0
TabCompleteMatch:
Struct:
- Name: match
Type: string
- Name: tooltip
Optional:
Type: Chat
PalettedContainer:
Struct:
- Name: bits_per_entry
Type: uint8
- Name: single_value
Type: VarInt
When:
Equal:
- Field: bits_per_entry
- Value: 0
- Name: palette
Slice:
Prefix: VarInt
Type: VarInt
When:
NotEqual:
- Field: bits_per_entry
- Value: 0
- Name: data
Slice:
Prefix: VarInt
Type: int64
ChunkSection:
Struct:
- Name: block_count
Type: int16
- Name: block_state
Type: PalettedContainer
- Name: biomes
Type: PalettedContainer
\ No newline at end of file
import (
"gfx.cafe/etherlands/go/common/protocol/types"
"io"
)
var _ io.Reader
type Packet interface {
PacketId() VarInt
Namespace() Namespace
PacketName() string
Unmarshal(r io.Reader) error
Marshal(w io.Writer) error
}
type Namespace interface {
PacketById(id VarInt) Packet
}
{{define "eval" -}}
{{$map := (index . 0) -}}
{{$variable := (index . 1) -}}
{{$condition := (index . 2) -}}
{{if $condition.Field -}}
{{getMap $map $condition.Field}}
{{- else if some $condition.Value -}}
{{$condition.Value}}
{{- else if $condition.Equal -}}
({{template "eval" (list $map $variable (index $condition.Equal 0))}}) == ({{template "eval" (list $map $variable (index $condition.Equal 1))}})
{{- else if $condition.NotEqual -}}
({{template "eval" (list $map $variable (index $condition.NotEqual 0))}}) != ({{template "eval" (list $map $variable (index $condition.NotEqual 1))}})
{{- else if $condition.LessThan -}}
({{template "eval" (list $map $variable (index $condition.LessThan 0))}}) < ({{template "eval" (list $map $variable (index $condition.LessThan 1))}})
{{- else if $condition.GreaterThan -}}
({{template "eval" (list $map $variable (index $condition.GreaterThan 0))}}) > ({{template "eval" (list $map $variable (index $condition.GreaterThan 1))}})
{{- else if $condition.And -}}
({{template "eval" (list $map $variable (index $condition.And 0))}}) & ({{template "eval" (list $map $variable (index $condition.And 1))}})
{{- else if $condition.Multiply -}}
{{$first := true -}}
{{range $idx, $operand := $condition.Multiply -}}
{{if $first -}}
{{$first = false}}
{{- else -}}
*
{{- end -}}
({{template "eval" (list $map $variable $operand)}})
{{- end -}}
{{- else if $condition.Or -}}
{{$first := true -}}
{{range $idx, $operand := $condition.Or -}}
{{if $first -}}
{{$first = false}}
{{- else -}}
||
{{- end -}}
({{template "eval" (list $map $variable $operand)}})
{{- end -}}
{{- end -}}
{{end -}}
{{define "typeFor" -}}
{{if .Type -}}
{{.Type -}}
{{else if .Slice -}}
[]{{template "typeFor" .Slice -}}
{{else if .Optional -}}
struct {
inner *{{template "typeFor" .Optional}}
}
{{- else if .Array -}}
[{{.Array.Length}}]{{template "typeFor" .Array -}}
{{else if .Struct -}}
struct {
{{range $idx, $field := .Struct -}}
{{upperCamel $field.Name}} {{template "typeFor" $field}}
{{end -}}
}
{{- else if .Enum -}}
any
{{- else -}}
struct{}
{{- end -}}
{{end -}}
{{define "marshalFor" -}}
{{$variable := (index . 0) -}}
{{$type := (index . 1) -}}
{{$map := (index . 2) -}}
{{$name := (index . 3) -}}
{{$temp := (index . 4) -}}
{{$_ := setMap $map $type.Name $variable -}}
{{if $type.Type -}}
{{if isGeneratedType $type.Type -}}
err = {{$variable}}.Marshal(writer)
{{else -}}
err = types.Marshal{{upperCamel $type.Type}}(writer, {{$type.Type}}({{$variable}}))
{{end -}}
if err != nil {
return
}
{{else if $type.Slice -}}
{{if $type.Slice.Prefix -}}
{
length := {{$type.Slice.Prefix}}(len({{$variable}}))
{{if isGeneratedType $type.Slice.Prefix -}}
err = length.Marshal(writer)
{{else -}}
err = types.Marshal{{upperCamel $type.Slice.Prefix}}(writer, length)
{{end -}}
if err != nil {
return
}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for _, {{$iName}} := range {{$variable}} {
{{template "marshalFor" (list $iName $type.Slice (cloneMap $map) "" $temp) -}}
}
}
{{else -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for _, {{$iName}} := range {{$variable}} {
{{template "marshalFor" (list $iName $type.Slice $map "" $temp) -}}
}
{{end -}}
{{else if $type.Optional -}}
if {{$variable}}.inner == nil {
err = types.MarshalBool(writer, false)
if err != nil {
return
}
} else {
err = types.MarshalBool(writer, true)
if err != nil {
return
}
{{template "marshalFor" (list (printf "(*%s.inner)" $variable) $type.Optional (cloneMap $map) "" $temp) -}}
}
{{else if $type.Array -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for _, {{$iName}} := range {{$variable}} {
{{template "marshalFor" (list $iName $type.Array (cloneMap $map) "" $temp) -}}
}
{{else if $type.Struct -}}
{{range $idx, $field := $type.Struct -}}
{{if $field.When -}}
if {{template "eval" (list $map $variable $field.When)}} {
{{end -}}
{{template "marshalFor" (list (printf "%s.%s" $variable (upperCamel $field.Name)) $field $map "" $temp) -}}
{{if $field.When -}}
}
{{end -}}
{{end -}}
{{else if $type.Enum -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
switch {{getMap $map $type.Enum.Discriminator}} {
{{range $key, $variant := $type.Enum.Variants -}}
case {{if isString $key}}"{{end}}{{$key}}{{if isString $key}}"{{end}}:
{{$iName}} := {{$variable}}.({{template "typeFor" $variant}})
{{template "marshalFor" (list $iName $variant (cloneMap $map) "" $temp) -}}
{{end -}}
}
{{end -}}
{{end -}}
{{define "unmarshalFor" -}}
{{$variable := (index . 0) -}}
{{$type := (index . 1) -}}
{{$map := (index . 2) -}}
{{$name := (index . 3) -}}
{{$temp := (index . 4) -}}
{{$_ := setMap $map $type.Name $variable -}}
{{if $type.Type -}}
{{if isGeneratedType $type.Type -}}
err = {{$variable}}.Unmarshal(reader)
{{else -}}
{
var temp {{$type.Type}}
temp, err = types.Unmarshal{{upperCamel $type.Type}}(reader)
{{$variable}} = {{$name}}(temp)
}
{{end -}}
if err != nil {
return
}
{{else if $type.Slice -}}
{{if $type.Slice.Prefix -}}
{
{{if isGeneratedType $type.Slice.Prefix -}}
var length {{$type.Slice.Prefix}}
err = length.Unmarshal(reader)
{{else -}}
var length {{$type.Slice.Prefix}}
length, err = types.Unmarshal{{upperCamel $type.Slice.Prefix}}(reader)
{{end -}}
if err != nil {
return
}
{{$variable}} = make({{template "typeFor" $type}}, int(length))
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for {{$iName}} := range {{$variable}} {
{{template "unmarshalFor" (list (printf "%s[%s]" $variable $iName) $type.Slice (cloneMap $map) "" $temp) -}}
}
}
{{else if $type.Slice.SizeFunc -}}
{{$variable}} = make({{template "typeFor" $type}}, {{template "eval" (list $map $variable $type.Slice.SizeFunc)}})
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for {{$iName}} := range {{$variable}} {
{{template "unmarshalFor" (list (printf "%s[%s]" $variable $iName) $type.Slice (cloneMap $map) "" $temp) -}}
}
{{else if $type.Slice.Until -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for {
{{$iName}} := *new({{template "typeFor" $type.Slice}})
{{template "unmarshalFor" (list $iName $type.Slice $map "" $temp) -}}
{{$variable}} = append({{$variable}}, {{$iName}})
if {{template "eval" (list $map $iName $type.Slice.Until)}} {
break
}
}
{{else -}}
{{$variable}}, err = io.ReadAll(reader)
if err != nil {
return
}
{{end -}}
{{else if $type.Optional -}}
{
var exists bool
exists, err = types.UnmarshalBool(reader)
if err != nil {
return
}
if exists {
{{$variable}}.inner = new({{template "typeFor" $type.Optional}})
{{template "unmarshalFor" (list (printf "(*%s.inner)" $variable) $type.Optional (cloneMap $map) "" $temp) -}}
}
}
{{else if $type.Array -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
for {{$iName}} := range {{$variable}} {
{{template "unmarshalFor" (list (printf "%s[%s]" $variable $iName) $type.Array (cloneMap $map) "" $temp) -}}
}
{{else if $type.Struct -}}
{{range $idx, $field := $type.Struct -}}
{{if $field.When -}}
if {{template "eval" (list $map $variable $field.When)}} {
{{end -}}
{{template "unmarshalFor" (list (printf "%s.%s" $variable (upperCamel $field.Name)) $field $map "" $temp) -}}
{{if $field.When -}}
}
{{end -}}
{{end -}}
{{else if $type.Enum -}}
{{$iName := printf "temp%d" $temp -}}
{{$temp = add $temp 1 -}}
switch {{getMap $map $type.Enum.Discriminator}} {
{{range $key, $variant := $type.Enum.Variants -}}
case {{if isString $key}}"{{end}}{{$key}}{{if isString $key}}"{{end}}:
var {{$iName}} {{template "typeFor" $variant}}
{{template "unmarshalFor" (list $iName $variant (cloneMap $map) "" $temp) -}}
{{$variable}} = {{$iName}}
{{end -}}
}
{{end -}}
{{end -}}
{{define "allFor" -}}
{{$name := (index . 0) -}}
{{$type := (index . 1) -}}
type {{$name}} {{template "typeFor" $type}}
func (T *{{$name}}) Marshal(writer io.Writer) (err error) {
{{template "marshalFor" (list "(*T)" $type emptyMap $name 0) -}}
return
}
func (T *{{$name}}) Unmarshal(reader io.Reader) (err error) {
{{template "unmarshalFor" (list "(*T)" $type emptyMap $name 0) -}}
return
}
{{end -}}
{{range $name, $type := .Types -}}
{{if isCustomType $name -}}
type {{$name}} = types.{{$name}}
{{else if isGeneratedType $name -}}
{{template "allFor" (list $name $type)}}
{{end -}}
{{end -}}
...@@ -6,6 +6,7 @@ require ( ...@@ -6,6 +6,7 @@ require (
github.com/Masterminds/sprig/v3 v3.2.2 github.com/Masterminds/sprig/v3 v3.2.2
github.com/iancoleman/strcase v0.2.0 github.com/iancoleman/strcase v0.2.0
github.com/spf13/afero v1.9.3 github.com/spf13/afero v1.9.3
sigs.k8s.io/yaml v1.3.0
) )
require ( require (
...@@ -20,4 +21,5 @@ require ( ...@@ -20,4 +21,5 @@ require (
github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cast v1.3.1 // indirect
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa // indirect golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa // indirect
golang.org/x/text v0.3.4 // indirect golang.org/x/text v0.3.4 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
) )
...@@ -134,8 +134,10 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 ...@@ -134,8 +134,10 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
...@@ -446,11 +448,13 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD ...@@ -446,11 +448,13 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
...@@ -463,3 +467,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 ...@@ -463,3 +467,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment