Pin github.com/googleapis/gnostic to v0.4.0
See https://github.com/google/gnostic/pull/155
This commit is contained in:
parent
83a5813daf
commit
dea469d6fc
6
go.mod
6
go.mod
@ -7,12 +7,12 @@ require (
|
|||||||
github.com/go-logr/logr v0.3.0 // indirect
|
github.com/go-logr/logr v0.3.0 // indirect
|
||||||
github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663
|
github.com/go-ping/ping v0.0.0-20201115131931-3300c582a663
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
github.com/googleapis/gnostic v0.5.3 // indirect
|
|
||||||
github.com/imdario/mergo v0.3.11 // indirect
|
github.com/imdario/mergo v0.3.11 // indirect
|
||||||
|
github.com/kr/pretty v0.2.0 // indirect
|
||||||
github.com/miekg/dns v1.1.35
|
github.com/miekg/dns v1.1.35
|
||||||
github.com/prometheus/client_golang v1.9.0
|
github.com/prometheus/client_golang v1.9.0
|
||||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
|
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect
|
||||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b // indirect
|
||||||
golang.org/x/sys v0.0.0-20201223074533-0d417f636930 // indirect
|
golang.org/x/sys v0.0.0-20201223074533-0d417f636930 // indirect
|
||||||
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
|
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf // indirect
|
||||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect
|
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect
|
||||||
@ -23,3 +23,5 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
replace k8s.io/client-go => k8s.io/client-go v0.19.6
|
replace k8s.io/client-go => k8s.io/client-go v0.19.6
|
||||||
|
|
||||||
|
replace github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.4.0
|
||||||
|
10
go.sum
10
go.sum
@ -217,10 +217,8 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
|||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I=
|
github.com/googleapis/gnostic v0.4.0 h1:BXDUo8p/DaxC+4FJY/SSx3gvnx9C1VdHNgaUkiEL5mk=
|
||||||
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
|
github.com/googleapis/gnostic v0.4.0/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||||
github.com/googleapis/gnostic v0.5.3 h1:FP6YXyar5+eeXU8lBWDHJMZLHinornnILMJYBLgqKXk=
|
|
||||||
github.com/googleapis/gnostic v0.5.3/go.mod h1:TRWw1s4gxBGjSe301Dai3c7wXJAZy57+/6tawkOvqHQ=
|
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||||
@ -408,7 +406,6 @@ github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
|
|||||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
|
||||||
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
|
||||||
@ -744,7 +741,6 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D
|
|||||||
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
|
||||||
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
@ -806,8 +802,6 @@ 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 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
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=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
3610
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.go
generated
vendored
3610
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.go
generated
vendored
File diff suppressed because it is too large
Load Diff
8720
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go
generated
vendored
8720
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
7
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.proto
generated
vendored
7
vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.proto
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2020 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -41,9 +41,6 @@ option java_package = "org.openapi_v2";
|
|||||||
// the future. 'GPB' is reserved for the protocol buffer implementation itself.
|
// the future. 'GPB' is reserved for the protocol buffer implementation itself.
|
||||||
option objc_class_prefix = "OAS";
|
option objc_class_prefix = "OAS";
|
||||||
|
|
||||||
// The Go package name.
|
|
||||||
option go_package = "openapiv2;openapi_v2";
|
|
||||||
|
|
||||||
message AdditionalPropertiesItem {
|
message AdditionalPropertiesItem {
|
||||||
oneof oneof {
|
oneof oneof {
|
||||||
Schema schema = 1;
|
Schema schema = 1;
|
||||||
@ -556,7 +553,7 @@ message Response {
|
|||||||
repeated NamedAny vendor_extension = 5;
|
repeated NamedAny vendor_extension = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// One or more JSON representations for responses
|
// One or more JSON representations for parameters
|
||||||
message ResponseDefinitions {
|
message ResponseDefinitions {
|
||||||
repeated NamedResponse additional_properties = 1;
|
repeated NamedResponse additional_properties = 1;
|
||||||
}
|
}
|
||||||
|
20
vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md
generated
vendored
20
vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md
generated
vendored
@ -1,14 +1,16 @@
|
|||||||
# OpenAPI v2 Protocol Buffer Models
|
# OpenAPI v2 Protocol Buffer Models
|
||||||
|
|
||||||
This directory contains a Protocol Buffer-language model and related code for
|
This directory contains a Protocol Buffer-language model
|
||||||
supporting OpenAPI v2.
|
and related code for supporting OpenAPI v2.
|
||||||
|
|
||||||
Gnostic applications and plugins can use OpenAPIv2.proto to generate Protocol
|
Gnostic applications and plugins can use OpenAPIv2.proto
|
||||||
Buffer support code for their preferred languages.
|
to generate Protocol Buffer support code for their preferred languages.
|
||||||
|
|
||||||
OpenAPIv2.go is used by Gnostic to read JSON and YAML OpenAPI descriptions into
|
OpenAPIv2.go is used by Gnostic to read JSON and YAML OpenAPI
|
||||||
the Protocol Buffer-based datastructures generated from OpenAPIv2.proto.
|
descriptions into the Protocol Buffer-based datastructures
|
||||||
|
generated from OpenAPIv2.proto.
|
||||||
|
|
||||||
OpenAPIv2.proto and OpenAPIv2.go are generated by the Gnostic compiler
|
OpenAPIv2.proto and OpenAPIv2.go are generated by the Gnostic
|
||||||
generator, and OpenAPIv2.pb.go is generated by protoc, the Protocol Buffer
|
compiler generator, and OpenAPIv2.pb.go is generated by
|
||||||
compiler, and protoc-gen-go, the Protocol Buffer Go code generation plugin.
|
protoc, the Protocol Buffer compiler, and protoc-gen-go, the
|
||||||
|
Protocol Buffer Go code generation plugin.
|
||||||
|
41
vendor/github.com/googleapis/gnostic/OpenAPIv2/document.go
generated
vendored
41
vendor/github.com/googleapis/gnostic/OpenAPIv2/document.go
generated
vendored
@ -1,41 +0,0 @@
|
|||||||
// Copyright 2020 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package openapi_v2
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/googleapis/gnostic/compiler"
|
|
||||||
"gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ParseDocument reads an OpenAPI v2 description from a YAML/JSON representation.
|
|
||||||
func ParseDocument(b []byte) (*Document, error) {
|
|
||||||
info, err := compiler.ReadInfoFromBytes("", b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
root := info.Content[0]
|
|
||||||
return NewDocument(root, compiler.NewContextWithExtensions("$root", root, nil, nil))
|
|
||||||
}
|
|
||||||
|
|
||||||
// YAMLValue produces a serialized YAML representation of the document.
|
|
||||||
func (d *Document) YAMLValue(comment string) ([]byte, error) {
|
|
||||||
rawInfo := d.ToRawInfo()
|
|
||||||
rawInfo = &yaml.Node{
|
|
||||||
Kind: yaml.DocumentNode,
|
|
||||||
Content: []*yaml.Node{rawInfo},
|
|
||||||
HeadComment: comment,
|
|
||||||
}
|
|
||||||
return yaml.Marshal(rawInfo)
|
|
||||||
}
|
|
4
vendor/github.com/googleapis/gnostic/OpenAPIv2/openapi-2.0.json
generated
vendored
4
vendor/github.com/googleapis/gnostic/OpenAPIv2/openapi-2.0.json
generated
vendored
@ -203,7 +203,7 @@
|
|||||||
"additionalProperties": {
|
"additionalProperties": {
|
||||||
"$ref": "#/definitions/response"
|
"$ref": "#/definitions/response"
|
||||||
},
|
},
|
||||||
"description": "One or more JSON representations for responses"
|
"description": "One or more JSON representations for parameters"
|
||||||
},
|
},
|
||||||
"externalDocs": {
|
"externalDocs": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@ -1607,4 +1607,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/googleapis/gnostic/compiler/README.md
generated
vendored
3
vendor/github.com/googleapis/gnostic/compiler/README.md
generated
vendored
@ -1,4 +1,3 @@
|
|||||||
# Compiler support code
|
# Compiler support code
|
||||||
|
|
||||||
This directory contains compiler support code used by Gnostic and Gnostic
|
This directory contains compiler support code used by Gnostic and Gnostic extensions.
|
||||||
extensions.
|
|
20
vendor/github.com/googleapis/gnostic/compiler/context.go
generated
vendored
20
vendor/github.com/googleapis/gnostic/compiler/context.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -14,36 +14,30 @@
|
|||||||
|
|
||||||
package compiler
|
package compiler
|
||||||
|
|
||||||
import (
|
|
||||||
yaml "gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Context contains state of the compiler as it traverses a document.
|
// Context contains state of the compiler as it traverses a document.
|
||||||
type Context struct {
|
type Context struct {
|
||||||
Parent *Context
|
Parent *Context
|
||||||
Name string
|
Name string
|
||||||
Node *yaml.Node
|
|
||||||
ExtensionHandlers *[]ExtensionHandler
|
ExtensionHandlers *[]ExtensionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewContextWithExtensions returns a new object representing the compiler state
|
// NewContextWithExtensions returns a new object representing the compiler state
|
||||||
func NewContextWithExtensions(name string, node *yaml.Node, parent *Context, extensionHandlers *[]ExtensionHandler) *Context {
|
func NewContextWithExtensions(name string, parent *Context, extensionHandlers *[]ExtensionHandler) *Context {
|
||||||
return &Context{Name: name, Node: node, Parent: parent, ExtensionHandlers: extensionHandlers}
|
return &Context{Name: name, Parent: parent, ExtensionHandlers: extensionHandlers}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewContext returns a new object representing the compiler state
|
// NewContext returns a new object representing the compiler state
|
||||||
func NewContext(name string, node *yaml.Node, parent *Context) *Context {
|
func NewContext(name string, parent *Context) *Context {
|
||||||
if parent != nil {
|
if parent != nil {
|
||||||
return &Context{Name: name, Node: node, Parent: parent, ExtensionHandlers: parent.ExtensionHandlers}
|
return &Context{Name: name, Parent: parent, ExtensionHandlers: parent.ExtensionHandlers}
|
||||||
}
|
}
|
||||||
return &Context{Name: name, Parent: parent, ExtensionHandlers: nil}
|
return &Context{Name: name, Parent: parent, ExtensionHandlers: nil}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Description returns a text description of the compiler state
|
// Description returns a text description of the compiler state
|
||||||
func (context *Context) Description() string {
|
func (context *Context) Description() string {
|
||||||
name := context.Name
|
|
||||||
if context.Parent != nil {
|
if context.Parent != nil {
|
||||||
name = context.Parent.Description() + "." + name
|
return context.Parent.Description() + "." + context.Name
|
||||||
}
|
}
|
||||||
return name
|
return context.Name
|
||||||
}
|
}
|
||||||
|
15
vendor/github.com/googleapis/gnostic/compiler/error.go
generated
vendored
15
vendor/github.com/googleapis/gnostic/compiler/error.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -14,8 +14,6 @@
|
|||||||
|
|
||||||
package compiler
|
package compiler
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
// Error represents compiler errors and their location in the document.
|
// Error represents compiler errors and their location in the document.
|
||||||
type Error struct {
|
type Error struct {
|
||||||
Context *Context
|
Context *Context
|
||||||
@ -27,19 +25,12 @@ func NewError(context *Context, message string) *Error {
|
|||||||
return &Error{Context: context, Message: message}
|
return &Error{Context: context, Message: message}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (err *Error) locationDescription() string {
|
|
||||||
if err.Context.Node != nil {
|
|
||||||
return fmt.Sprintf("[%d,%d] %s", err.Context.Node.Line, err.Context.Node.Column, err.Context.Description())
|
|
||||||
}
|
|
||||||
return err.Context.Description()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Error returns the string value of an Error.
|
// Error returns the string value of an Error.
|
||||||
func (err *Error) Error() string {
|
func (err *Error) Error() string {
|
||||||
if err.Context == nil {
|
if err.Context == nil {
|
||||||
return err.Message
|
return "ERROR " + err.Message
|
||||||
}
|
}
|
||||||
return err.locationDescription() + " " + err.Message
|
return "ERROR " + err.Context.Description() + " " + err.Message
|
||||||
}
|
}
|
||||||
|
|
||||||
// ErrorGroup is a container for groups of Error values.
|
// ErrorGroup is a container for groups of Error values.
|
||||||
|
101
vendor/github.com/googleapis/gnostic/compiler/extension-handler.go
generated
vendored
Normal file
101
vendor/github.com/googleapis/gnostic/compiler/extension-handler.go
generated
vendored
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package compiler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"github.com/golang/protobuf/ptypes/any"
|
||||||
|
ext_plugin "github.com/googleapis/gnostic/extensions"
|
||||||
|
yaml "gopkg.in/yaml.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ExtensionHandler describes a binary that is called by the compiler to handle specification extensions.
|
||||||
|
type ExtensionHandler struct {
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
// HandleExtension calls a binary extension handler.
|
||||||
|
func HandleExtension(context *Context, in interface{}, extensionName string) (bool, *any.Any, error) {
|
||||||
|
handled := false
|
||||||
|
var errFromPlugin error
|
||||||
|
var outFromPlugin *any.Any
|
||||||
|
|
||||||
|
if context != nil && context.ExtensionHandlers != nil && len(*(context.ExtensionHandlers)) != 0 {
|
||||||
|
for _, customAnyProtoGenerator := range *(context.ExtensionHandlers) {
|
||||||
|
outFromPlugin, errFromPlugin = customAnyProtoGenerator.handle(in, extensionName)
|
||||||
|
if outFromPlugin == nil {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
handled = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return handled, outFromPlugin, errFromPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (extensionHandlers *ExtensionHandler) handle(in interface{}, extensionName string) (*any.Any, error) {
|
||||||
|
if extensionHandlers.Name != "" {
|
||||||
|
binary, _ := yaml.Marshal(in)
|
||||||
|
|
||||||
|
request := &ext_plugin.ExtensionHandlerRequest{}
|
||||||
|
|
||||||
|
version := &ext_plugin.Version{}
|
||||||
|
version.Major = 0
|
||||||
|
version.Minor = 1
|
||||||
|
version.Patch = 0
|
||||||
|
request.CompilerVersion = version
|
||||||
|
|
||||||
|
request.Wrapper = &ext_plugin.Wrapper{}
|
||||||
|
|
||||||
|
request.Wrapper.Version = "v2"
|
||||||
|
request.Wrapper.Yaml = string(binary)
|
||||||
|
request.Wrapper.ExtensionName = extensionName
|
||||||
|
|
||||||
|
requestBytes, _ := proto.Marshal(request)
|
||||||
|
cmd := exec.Command(extensionHandlers.Name)
|
||||||
|
cmd.Stdin = bytes.NewReader(requestBytes)
|
||||||
|
output, err := cmd.Output()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error: %+v\n", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
response := &ext_plugin.ExtensionHandlerResponse{}
|
||||||
|
err = proto.Unmarshal(output, response)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error: %+v\n", err)
|
||||||
|
fmt.Printf("%s\n", string(output))
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !response.Handled {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
if len(response.Error) != 0 {
|
||||||
|
message := fmt.Sprintf("Errors when parsing: %+v for field %s by vendor extension handler %s. Details %+v", in, extensionName, extensionHandlers.Name, strings.Join(response.Error, ","))
|
||||||
|
return nil, errors.New(message)
|
||||||
|
}
|
||||||
|
return response.Value, nil
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
85
vendor/github.com/googleapis/gnostic/compiler/extensions.go
generated
vendored
85
vendor/github.com/googleapis/gnostic/compiler/extensions.go
generated
vendored
@ -1,85 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package compiler
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"github.com/golang/protobuf/ptypes/any"
|
|
||||||
extensions "github.com/googleapis/gnostic/extensions"
|
|
||||||
yaml "gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ExtensionHandler describes a binary that is called by the compiler to handle specification extensions.
|
|
||||||
type ExtensionHandler struct {
|
|
||||||
Name string
|
|
||||||
}
|
|
||||||
|
|
||||||
// CallExtension calls a binary extension handler.
|
|
||||||
func CallExtension(context *Context, in *yaml.Node, extensionName string) (handled bool, response *any.Any, err error) {
|
|
||||||
if context == nil || context.ExtensionHandlers == nil {
|
|
||||||
return false, nil, nil
|
|
||||||
}
|
|
||||||
handled = false
|
|
||||||
for _, handler := range *(context.ExtensionHandlers) {
|
|
||||||
response, err = handler.handle(in, extensionName)
|
|
||||||
if response == nil {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
handled = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return handled, response, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (extensionHandlers *ExtensionHandler) handle(in *yaml.Node, extensionName string) (*any.Any, error) {
|
|
||||||
if extensionHandlers.Name != "" {
|
|
||||||
yamlData, _ := yaml.Marshal(in)
|
|
||||||
request := &extensions.ExtensionHandlerRequest{
|
|
||||||
CompilerVersion: &extensions.Version{
|
|
||||||
Major: 0,
|
|
||||||
Minor: 1,
|
|
||||||
Patch: 0,
|
|
||||||
},
|
|
||||||
Wrapper: &extensions.Wrapper{
|
|
||||||
Version: "unknown", // TODO: set this to the type/version of spec being parsed.
|
|
||||||
Yaml: string(yamlData),
|
|
||||||
ExtensionName: extensionName,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
requestBytes, _ := proto.Marshal(request)
|
|
||||||
cmd := exec.Command(extensionHandlers.Name)
|
|
||||||
cmd.Stdin = bytes.NewReader(requestBytes)
|
|
||||||
output, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
response := &extensions.ExtensionHandlerResponse{}
|
|
||||||
err = proto.Unmarshal(output, response)
|
|
||||||
if err != nil || !response.Handled {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if len(response.Errors) != 0 {
|
|
||||||
return nil, fmt.Errorf("Errors when parsing: %+v for field %s by vendor extension handler %s. Details %+v", in, extensionName, extensionHandlers.Name, strings.Join(response.Errors, ","))
|
|
||||||
}
|
|
||||||
return response.Value, nil
|
|
||||||
}
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
347
vendor/github.com/googleapis/gnostic/compiler/helpers.go
generated
vendored
347
vendor/github.com/googleapis/gnostic/compiler/helpers.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -16,63 +16,56 @@ package compiler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/googleapis/gnostic/jsonschema"
|
|
||||||
"gopkg.in/yaml.v3"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// compiler helper functions, usually called from generated code
|
// compiler helper functions, usually called from generated code
|
||||||
|
|
||||||
// UnpackMap gets a *yaml.Node if possible.
|
// UnpackMap gets a yaml.MapSlice if possible.
|
||||||
func UnpackMap(in *yaml.Node) (*yaml.Node, bool) {
|
func UnpackMap(in interface{}) (yaml.MapSlice, bool) {
|
||||||
if in == nil {
|
m, ok := in.(yaml.MapSlice)
|
||||||
return nil, false
|
if ok {
|
||||||
|
return m, true
|
||||||
}
|
}
|
||||||
return in, true
|
// do we have an empty array?
|
||||||
|
a, ok := in.([]interface{})
|
||||||
|
if ok && len(a) == 0 {
|
||||||
|
// if so, return an empty map
|
||||||
|
return yaml.MapSlice{}, true
|
||||||
|
}
|
||||||
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
// SortedKeysForMap returns the sorted keys of a yamlv2.MapSlice.
|
// SortedKeysForMap returns the sorted keys of a yaml.MapSlice.
|
||||||
func SortedKeysForMap(m *yaml.Node) []string {
|
func SortedKeysForMap(m yaml.MapSlice) []string {
|
||||||
keys := make([]string, 0)
|
keys := make([]string, 0)
|
||||||
if m.Kind == yaml.MappingNode {
|
for _, item := range m {
|
||||||
for i := 0; i < len(m.Content); i += 2 {
|
keys = append(keys, item.Key.(string))
|
||||||
keys = append(keys, m.Content[i].Value)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
sort.Strings(keys)
|
sort.Strings(keys)
|
||||||
return keys
|
return keys
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapHasKey returns true if a yamlv2.MapSlice contains a specified key.
|
// MapHasKey returns true if a yaml.MapSlice contains a specified key.
|
||||||
func MapHasKey(m *yaml.Node, key string) bool {
|
func MapHasKey(m yaml.MapSlice, key string) bool {
|
||||||
if m == nil {
|
for _, item := range m {
|
||||||
return false
|
itemKey, ok := item.Key.(string)
|
||||||
}
|
if ok && key == itemKey {
|
||||||
if m.Kind == yaml.MappingNode {
|
return true
|
||||||
for i := 0; i < len(m.Content); i += 2 {
|
|
||||||
itemKey := m.Content[i].Value
|
|
||||||
if key == itemKey {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// MapValueForKey gets the value of a map value for a specified key.
|
// MapValueForKey gets the value of a map value for a specified key.
|
||||||
func MapValueForKey(m *yaml.Node, key string) *yaml.Node {
|
func MapValueForKey(m yaml.MapSlice, key string) interface{} {
|
||||||
if m == nil {
|
for _, item := range m {
|
||||||
return nil
|
itemKey, ok := item.Key.(string)
|
||||||
}
|
if ok && key == itemKey {
|
||||||
if m.Kind == yaml.MappingNode {
|
return item.Value
|
||||||
for i := 0; i < len(m.Content); i += 2 {
|
|
||||||
itemKey := m.Content[i].Value
|
|
||||||
if key == itemKey {
|
|
||||||
return m.Content[i+1]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -90,118 +83,8 @@ func ConvertInterfaceArrayToStringArray(interfaceArray []interface{}) []string {
|
|||||||
return stringArray
|
return stringArray
|
||||||
}
|
}
|
||||||
|
|
||||||
// SequenceNodeForNode returns a node if it is a SequenceNode.
|
|
||||||
func SequenceNodeForNode(node *yaml.Node) (*yaml.Node, bool) {
|
|
||||||
if node.Kind != yaml.SequenceNode {
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
return node, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// BoolForScalarNode returns the bool value of a node.
|
|
||||||
func BoolForScalarNode(node *yaml.Node) (bool, bool) {
|
|
||||||
if node == nil {
|
|
||||||
return false, false
|
|
||||||
}
|
|
||||||
if node.Kind == yaml.DocumentNode {
|
|
||||||
return BoolForScalarNode(node.Content[0])
|
|
||||||
}
|
|
||||||
if node.Kind != yaml.ScalarNode {
|
|
||||||
return false, false
|
|
||||||
}
|
|
||||||
if node.Tag != "!!bool" {
|
|
||||||
return false, false
|
|
||||||
}
|
|
||||||
v, err := strconv.ParseBool(node.Value)
|
|
||||||
if err != nil {
|
|
||||||
return false, false
|
|
||||||
}
|
|
||||||
return v, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// IntForScalarNode returns the integer value of a node.
|
|
||||||
func IntForScalarNode(node *yaml.Node) (int64, bool) {
|
|
||||||
if node == nil {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
if node.Kind == yaml.DocumentNode {
|
|
||||||
return IntForScalarNode(node.Content[0])
|
|
||||||
}
|
|
||||||
if node.Kind != yaml.ScalarNode {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
if node.Tag != "!!int" {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
v, err := strconv.ParseInt(node.Value, 10, 64)
|
|
||||||
if err != nil {
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
return v, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// FloatForScalarNode returns the float value of a node.
|
|
||||||
func FloatForScalarNode(node *yaml.Node) (float64, bool) {
|
|
||||||
if node == nil {
|
|
||||||
return 0.0, false
|
|
||||||
}
|
|
||||||
if node.Kind == yaml.DocumentNode {
|
|
||||||
return FloatForScalarNode(node.Content[0])
|
|
||||||
}
|
|
||||||
if node.Kind != yaml.ScalarNode {
|
|
||||||
return 0.0, false
|
|
||||||
}
|
|
||||||
if (node.Tag != "!!int") && (node.Tag != "!!float") {
|
|
||||||
return 0.0, false
|
|
||||||
}
|
|
||||||
v, err := strconv.ParseFloat(node.Value, 64)
|
|
||||||
if err != nil {
|
|
||||||
return 0.0, false
|
|
||||||
}
|
|
||||||
return v, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringForScalarNode returns the string value of a node.
|
|
||||||
func StringForScalarNode(node *yaml.Node) (string, bool) {
|
|
||||||
if node == nil {
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
if node.Kind == yaml.DocumentNode {
|
|
||||||
return StringForScalarNode(node.Content[0])
|
|
||||||
}
|
|
||||||
switch node.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch node.Tag {
|
|
||||||
case "!!int":
|
|
||||||
return node.Value, true
|
|
||||||
case "!!str":
|
|
||||||
return node.Value, true
|
|
||||||
case "!!timestamp":
|
|
||||||
return node.Value, true
|
|
||||||
case "!!null":
|
|
||||||
return "", true
|
|
||||||
default:
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringArrayForSequenceNode converts a sequence node to an array of strings, if possible.
|
|
||||||
func StringArrayForSequenceNode(node *yaml.Node) []string {
|
|
||||||
stringArray := make([]string, 0)
|
|
||||||
for _, item := range node.Content {
|
|
||||||
v, ok := StringForScalarNode(item)
|
|
||||||
if ok {
|
|
||||||
stringArray = append(stringArray, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return stringArray
|
|
||||||
}
|
|
||||||
|
|
||||||
// MissingKeysInMap identifies which keys from a list of required keys are not in a map.
|
// MissingKeysInMap identifies which keys from a list of required keys are not in a map.
|
||||||
func MissingKeysInMap(m *yaml.Node, requiredKeys []string) []string {
|
func MissingKeysInMap(m yaml.MapSlice, requiredKeys []string) []string {
|
||||||
missingKeys := make([]string, 0)
|
missingKeys := make([]string, 0)
|
||||||
for _, k := range requiredKeys {
|
for _, k := range requiredKeys {
|
||||||
if !MapHasKey(m, k) {
|
if !MapHasKey(m, k) {
|
||||||
@ -212,109 +95,64 @@ func MissingKeysInMap(m *yaml.Node, requiredKeys []string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InvalidKeysInMap returns keys in a map that don't match a list of allowed keys and patterns.
|
// InvalidKeysInMap returns keys in a map that don't match a list of allowed keys and patterns.
|
||||||
func InvalidKeysInMap(m *yaml.Node, allowedKeys []string, allowedPatterns []*regexp.Regexp) []string {
|
func InvalidKeysInMap(m yaml.MapSlice, allowedKeys []string, allowedPatterns []*regexp.Regexp) []string {
|
||||||
invalidKeys := make([]string, 0)
|
invalidKeys := make([]string, 0)
|
||||||
if m == nil || m.Kind != yaml.MappingNode {
|
for _, item := range m {
|
||||||
return invalidKeys
|
itemKey, ok := item.Key.(string)
|
||||||
}
|
if ok {
|
||||||
for i := 0; i < len(m.Content); i += 2 {
|
key := itemKey
|
||||||
key := m.Content[i].Value
|
found := false
|
||||||
found := false
|
// does the key match an allowed key?
|
||||||
// does the key match an allowed key?
|
for _, allowedKey := range allowedKeys {
|
||||||
for _, allowedKey := range allowedKeys {
|
if key == allowedKey {
|
||||||
if key == allowedKey {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !found {
|
|
||||||
// does the key match an allowed pattern?
|
|
||||||
for _, allowedPattern := range allowedPatterns {
|
|
||||||
if allowedPattern.MatchString(key) {
|
|
||||||
found = true
|
found = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
if !found {
|
||||||
invalidKeys = append(invalidKeys, key)
|
// does the key match an allowed pattern?
|
||||||
|
for _, allowedPattern := range allowedPatterns {
|
||||||
|
if allowedPattern.MatchString(key) {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
invalidKeys = append(invalidKeys, key)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return invalidKeys
|
return invalidKeys
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNullNode creates a new Null node.
|
// DescribeMap describes a map (for debugging purposes).
|
||||||
func NewNullNode() *yaml.Node {
|
func DescribeMap(in interface{}, indent string) string {
|
||||||
node := &yaml.Node{
|
description := ""
|
||||||
Kind: yaml.ScalarNode,
|
m, ok := in.(map[string]interface{})
|
||||||
Tag: "!!null",
|
if ok {
|
||||||
|
keys := make([]string, 0)
|
||||||
|
for k := range m {
|
||||||
|
keys = append(keys, k)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
for _, k := range keys {
|
||||||
|
v := m[k]
|
||||||
|
description += fmt.Sprintf("%s%s:\n", indent, k)
|
||||||
|
description += DescribeMap(v, indent+" ")
|
||||||
|
}
|
||||||
|
return description
|
||||||
}
|
}
|
||||||
return node
|
a, ok := in.([]interface{})
|
||||||
}
|
if ok {
|
||||||
|
for i, v := range a {
|
||||||
// NewMappingNode creates a new Mapping node.
|
description += fmt.Sprintf("%s%d:\n", indent, i)
|
||||||
func NewMappingNode() *yaml.Node {
|
description += DescribeMap(v, indent+" ")
|
||||||
return &yaml.Node{
|
}
|
||||||
Kind: yaml.MappingNode,
|
return description
|
||||||
Content: make([]*yaml.Node, 0),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSequenceNode creates a new Sequence node.
|
|
||||||
func NewSequenceNode() *yaml.Node {
|
|
||||||
node := &yaml.Node{
|
|
||||||
Kind: yaml.SequenceNode,
|
|
||||||
Content: make([]*yaml.Node, 0),
|
|
||||||
}
|
|
||||||
return node
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewScalarNodeForString creates a new node to hold a string.
|
|
||||||
func NewScalarNodeForString(s string) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!str",
|
|
||||||
Value: s,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSequenceNodeForStringArray creates a new node to hold an array of strings.
|
|
||||||
func NewSequenceNodeForStringArray(strings []string) *yaml.Node {
|
|
||||||
node := &yaml.Node{
|
|
||||||
Kind: yaml.SequenceNode,
|
|
||||||
Content: make([]*yaml.Node, 0),
|
|
||||||
}
|
|
||||||
for _, s := range strings {
|
|
||||||
node.Content = append(node.Content, NewScalarNodeForString(s))
|
|
||||||
}
|
|
||||||
return node
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewScalarNodeForBool creates a new node to hold a bool.
|
|
||||||
func NewScalarNodeForBool(b bool) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!bool",
|
|
||||||
Value: fmt.Sprintf("%t", b),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewScalarNodeForFloat creates a new node to hold a float.
|
|
||||||
func NewScalarNodeForFloat(f float64) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!float",
|
|
||||||
Value: fmt.Sprintf("%g", f),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewScalarNodeForInt creates a new node to hold an integer.
|
|
||||||
func NewScalarNodeForInt(i int64) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!int",
|
|
||||||
Value: fmt.Sprintf("%d", i),
|
|
||||||
}
|
}
|
||||||
|
description += fmt.Sprintf("%s%+v\n", indent, in)
|
||||||
|
return description
|
||||||
}
|
}
|
||||||
|
|
||||||
// PluralProperties returns the string "properties" pluralized.
|
// PluralProperties returns the string "properties" pluralized.
|
||||||
@ -357,40 +195,3 @@ func StringValue(item interface{}) (value string, ok bool) {
|
|||||||
}
|
}
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Description returns a human-readable represention of an item.
|
|
||||||
func Description(item interface{}) string {
|
|
||||||
value, ok := item.(*yaml.Node)
|
|
||||||
if ok {
|
|
||||||
return jsonschema.Render(value)
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%+v", item)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Display returns a description of a node for use in error messages.
|
|
||||||
func Display(node *yaml.Node) string {
|
|
||||||
switch node.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch node.Tag {
|
|
||||||
case "!!str":
|
|
||||||
return fmt.Sprintf("%s (string)", node.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%+v (%T)", node, node)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal creates a yaml version of a structure in our preferred style
|
|
||||||
func Marshal(in *yaml.Node) []byte {
|
|
||||||
clearStyle(in)
|
|
||||||
//bytes, _ := yaml.Marshal(&yaml.Node{Kind: yaml.DocumentNode, Content: []*yaml.Node{in}})
|
|
||||||
bytes, _ := yaml.Marshal(in)
|
|
||||||
|
|
||||||
return bytes
|
|
||||||
}
|
|
||||||
|
|
||||||
func clearStyle(node *yaml.Node) {
|
|
||||||
node.Style = 0
|
|
||||||
for _, c := range node.Content {
|
|
||||||
clearStyle(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
2
vendor/github.com/googleapis/gnostic/compiler/main.go
generated
vendored
2
vendor/github.com/googleapis/gnostic/compiler/main.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
133
vendor/github.com/googleapis/gnostic/compiler/reader.go
generated
vendored
133
vendor/github.com/googleapis/gnostic/compiler/reader.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -15,6 +15,7 @@
|
|||||||
package compiler
|
package compiler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
@ -22,30 +23,18 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
|
|
||||||
yaml "gopkg.in/yaml.v3"
|
yaml "gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
var verboseReader = false
|
|
||||||
|
|
||||||
var fileCache map[string][]byte
|
var fileCache map[string][]byte
|
||||||
var infoCache map[string]*yaml.Node
|
var infoCache map[string]interface{}
|
||||||
|
var count int64
|
||||||
|
|
||||||
|
var verboseReader = false
|
||||||
var fileCacheEnable = true
|
var fileCacheEnable = true
|
||||||
var infoCacheEnable = true
|
var infoCacheEnable = true
|
||||||
|
|
||||||
// These locks are used to synchronize accesses to the fileCache and infoCache
|
|
||||||
// maps (above). They are global state and can throw thread-related errors
|
|
||||||
// when modified from separate goroutines. The general strategy is to protect
|
|
||||||
// all public functions in this file with mutex Lock() calls. As a result, to
|
|
||||||
// avoid deadlock, these public functions should not call other public
|
|
||||||
// functions, so some public functions have private equivalents.
|
|
||||||
// In the future, we might consider replacing the maps with sync.Map and
|
|
||||||
// eliminating these mutexes.
|
|
||||||
var fileCacheMutex sync.Mutex
|
|
||||||
var infoCacheMutex sync.Mutex
|
|
||||||
|
|
||||||
func initializeFileCache() {
|
func initializeFileCache() {
|
||||||
if fileCache == nil {
|
if fileCache == nil {
|
||||||
fileCache = make(map[string][]byte, 0)
|
fileCache = make(map[string][]byte, 0)
|
||||||
@ -54,42 +43,19 @@ func initializeFileCache() {
|
|||||||
|
|
||||||
func initializeInfoCache() {
|
func initializeInfoCache() {
|
||||||
if infoCache == nil {
|
if infoCache == nil {
|
||||||
infoCache = make(map[string]*yaml.Node, 0)
|
infoCache = make(map[string]interface{}, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnableFileCache turns on file caching.
|
|
||||||
func EnableFileCache() {
|
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
fileCacheEnable = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnableInfoCache turns on parsed info caching.
|
|
||||||
func EnableInfoCache() {
|
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
infoCacheEnable = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// DisableFileCache turns off file caching.
|
|
||||||
func DisableFileCache() {
|
func DisableFileCache() {
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
fileCacheEnable = false
|
fileCacheEnable = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// DisableInfoCache turns off parsed info caching.
|
|
||||||
func DisableInfoCache() {
|
func DisableInfoCache() {
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
infoCacheEnable = false
|
infoCacheEnable = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveFromFileCache removes an entry from the file cache.
|
|
||||||
func RemoveFromFileCache(fileurl string) {
|
func RemoveFromFileCache(fileurl string) {
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
if !fileCacheEnable {
|
if !fileCacheEnable {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -97,10 +63,7 @@ func RemoveFromFileCache(fileurl string) {
|
|||||||
delete(fileCache, fileurl)
|
delete(fileCache, fileurl)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveFromInfoCache removes an entry from the info cache.
|
|
||||||
func RemoveFromInfoCache(filename string) {
|
func RemoveFromInfoCache(filename string) {
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
if !infoCacheEnable {
|
if !infoCacheEnable {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -108,44 +71,19 @@ func RemoveFromInfoCache(filename string) {
|
|||||||
delete(infoCache, filename)
|
delete(infoCache, filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetInfoCache returns the info cache map.
|
func GetInfoCache() map[string]interface{} {
|
||||||
func GetInfoCache() map[string]*yaml.Node {
|
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
if infoCache == nil {
|
if infoCache == nil {
|
||||||
initializeInfoCache()
|
initializeInfoCache()
|
||||||
}
|
}
|
||||||
return infoCache
|
return infoCache
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClearFileCache clears the file cache.
|
|
||||||
func ClearFileCache() {
|
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
fileCache = make(map[string][]byte, 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearInfoCache clears the info cache.
|
|
||||||
func ClearInfoCache() {
|
func ClearInfoCache() {
|
||||||
infoCacheMutex.Lock()
|
infoCache = make(map[string]interface{})
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
infoCache = make(map[string]*yaml.Node)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearCaches clears all caches.
|
|
||||||
func ClearCaches() {
|
|
||||||
ClearFileCache()
|
|
||||||
ClearInfoCache()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchFile gets a specified file from the local filesystem or a remote location.
|
// FetchFile gets a specified file from the local filesystem or a remote location.
|
||||||
func FetchFile(fileurl string) ([]byte, error) {
|
func FetchFile(fileurl string) ([]byte, error) {
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
return fetchFile(fileurl)
|
|
||||||
}
|
|
||||||
|
|
||||||
func fetchFile(fileurl string) ([]byte, error) {
|
|
||||||
var bytes []byte
|
var bytes []byte
|
||||||
initializeFileCache()
|
initializeFileCache()
|
||||||
if fileCacheEnable {
|
if fileCacheEnable {
|
||||||
@ -166,7 +104,7 @@ func fetchFile(fileurl string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
if response.StatusCode != 200 {
|
if response.StatusCode != 200 {
|
||||||
return nil, fmt.Errorf("Error downloading %s: %s", fileurl, response.Status)
|
return nil, errors.New(fmt.Sprintf("Error downloading %s: %s", fileurl, response.Status))
|
||||||
}
|
}
|
||||||
bytes, err = ioutil.ReadAll(response.Body)
|
bytes, err = ioutil.ReadAll(response.Body)
|
||||||
if fileCacheEnable && err == nil {
|
if fileCacheEnable && err == nil {
|
||||||
@ -177,17 +115,11 @@ func fetchFile(fileurl string) ([]byte, error) {
|
|||||||
|
|
||||||
// ReadBytesForFile reads the bytes of a file.
|
// ReadBytesForFile reads the bytes of a file.
|
||||||
func ReadBytesForFile(filename string) ([]byte, error) {
|
func ReadBytesForFile(filename string) ([]byte, error) {
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
return readBytesForFile(filename)
|
|
||||||
}
|
|
||||||
|
|
||||||
func readBytesForFile(filename string) ([]byte, error) {
|
|
||||||
// is the filename a url?
|
// is the filename a url?
|
||||||
fileurl, _ := url.Parse(filename)
|
fileurl, _ := url.Parse(filename)
|
||||||
if fileurl.Scheme != "" {
|
if fileurl.Scheme != "" {
|
||||||
// yes, fetch it
|
// yes, fetch it
|
||||||
bytes, err := fetchFile(filename)
|
bytes, err := FetchFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -201,14 +133,8 @@ func readBytesForFile(filename string) ([]byte, error) {
|
|||||||
return bytes, nil
|
return bytes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadInfoFromBytes unmarshals a file as a *yaml.Node.
|
// ReadInfoFromBytes unmarshals a file as a yaml.MapSlice.
|
||||||
func ReadInfoFromBytes(filename string, bytes []byte) (*yaml.Node, error) {
|
func ReadInfoFromBytes(filename string, bytes []byte) (interface{}, error) {
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
return readInfoFromBytes(filename, bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
func readInfoFromBytes(filename string, bytes []byte) (*yaml.Node, error) {
|
|
||||||
initializeInfoCache()
|
initializeInfoCache()
|
||||||
if infoCacheEnable {
|
if infoCacheEnable {
|
||||||
cachedInfo, ok := infoCache[filename]
|
cachedInfo, ok := infoCache[filename]
|
||||||
@ -222,23 +148,19 @@ func readInfoFromBytes(filename string, bytes []byte) (*yaml.Node, error) {
|
|||||||
log.Printf("Reading info for file %s", filename)
|
log.Printf("Reading info for file %s", filename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var info yaml.Node
|
var info yaml.MapSlice
|
||||||
err := yaml.Unmarshal(bytes, &info)
|
err := yaml.Unmarshal(bytes, &info)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if infoCacheEnable && len(filename) > 0 {
|
if infoCacheEnable && len(filename) > 0 {
|
||||||
infoCache[filename] = &info
|
infoCache[filename] = info
|
||||||
}
|
}
|
||||||
return &info, nil
|
return info, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadInfoForRef reads a file and return the fragment needed to resolve a $ref.
|
// ReadInfoForRef reads a file and return the fragment needed to resolve a $ref.
|
||||||
func ReadInfoForRef(basefile string, ref string) (*yaml.Node, error) {
|
func ReadInfoForRef(basefile string, ref string) (interface{}, error) {
|
||||||
fileCacheMutex.Lock()
|
|
||||||
defer fileCacheMutex.Unlock()
|
|
||||||
infoCacheMutex.Lock()
|
|
||||||
defer infoCacheMutex.Unlock()
|
|
||||||
initializeInfoCache()
|
initializeInfoCache()
|
||||||
if infoCacheEnable {
|
if infoCacheEnable {
|
||||||
info, ok := infoCache[ref]
|
info, ok := infoCache[ref]
|
||||||
@ -252,6 +174,7 @@ func ReadInfoForRef(basefile string, ref string) (*yaml.Node, error) {
|
|||||||
log.Printf("Reading info for ref %s#%s", basefile, ref)
|
log.Printf("Reading info for ref %s#%s", basefile, ref)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
count = count + 1
|
||||||
basedir, _ := filepath.Split(basefile)
|
basedir, _ := filepath.Split(basefile)
|
||||||
parts := strings.Split(ref, "#")
|
parts := strings.Split(ref, "#")
|
||||||
var filename string
|
var filename string
|
||||||
@ -264,30 +187,24 @@ func ReadInfoForRef(basefile string, ref string) (*yaml.Node, error) {
|
|||||||
} else {
|
} else {
|
||||||
filename = basefile
|
filename = basefile
|
||||||
}
|
}
|
||||||
bytes, err := readBytesForFile(filename)
|
bytes, err := ReadBytesForFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
info, err := readInfoFromBytes(filename, bytes)
|
info, err := ReadInfoFromBytes(filename, bytes)
|
||||||
if info != nil && info.Kind == yaml.DocumentNode {
|
|
||||||
info = info.Content[0]
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("File error: %v\n", err)
|
log.Printf("File error: %v\n", err)
|
||||||
} else {
|
} else {
|
||||||
if info == nil {
|
|
||||||
return nil, NewError(nil, fmt.Sprintf("could not resolve %s", ref))
|
|
||||||
}
|
|
||||||
if len(parts) > 1 {
|
if len(parts) > 1 {
|
||||||
path := strings.Split(parts[1], "/")
|
path := strings.Split(parts[1], "/")
|
||||||
for i, key := range path {
|
for i, key := range path {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
m := info
|
m, ok := info.(yaml.MapSlice)
|
||||||
if true {
|
if ok {
|
||||||
found := false
|
found := false
|
||||||
for i := 0; i < len(m.Content); i += 2 {
|
for _, section := range m {
|
||||||
if m.Content[i].Value == key {
|
if section.Key == key {
|
||||||
info = m.Content[i+1]
|
info = section.Value
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/googleapis/gnostic/extensions/README.md
generated
vendored
12
vendor/github.com/googleapis/gnostic/extensions/README.md
generated
vendored
@ -1,13 +1,5 @@
|
|||||||
# Extensions
|
# Extensions
|
||||||
|
|
||||||
**Extension Support is experimental.**
|
This directory contains support code for building Gnostic extensions and associated examples.
|
||||||
|
|
||||||
This directory contains support code for building Gnostic extensio handlers and
|
Extensions are used to compile vendor or specification extensions into protocol buffer structures.
|
||||||
associated examples.
|
|
||||||
|
|
||||||
Extension handlers can be used to compile vendor or specification extensions
|
|
||||||
into protocol buffer structures.
|
|
||||||
|
|
||||||
Like plugins, extension handlers are built as separate executables. Extension
|
|
||||||
bodies are written to extension handlers as serialized
|
|
||||||
ExtensionHandlerRequests.
|
|
||||||
|
547
vendor/github.com/googleapis/gnostic/extensions/extension.pb.go
generated
vendored
547
vendor/github.com/googleapis/gnostic/extensions/extension.pb.go
generated
vendored
@ -1,186 +1,148 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
|
||||||
// protoc-gen-go v1.24.0
|
|
||||||
// protoc v3.12.0
|
|
||||||
// source: extensions/extension.proto
|
// source: extensions/extension.proto
|
||||||
|
|
||||||
package gnostic_extension_v1
|
package openapiextension_v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
fmt "fmt"
|
||||||
proto "github.com/golang/protobuf/proto"
|
proto "github.com/golang/protobuf/proto"
|
||||||
any "github.com/golang/protobuf/ptypes/any"
|
any "github.com/golang/protobuf/ptypes/any"
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
math "math"
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
// Verify that this generated code is sufficiently up-to-date.
|
var _ = proto.Marshal
|
||||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
var _ = fmt.Errorf
|
||||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
var _ = math.Inf
|
||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
||||||
)
|
|
||||||
|
|
||||||
// This is a compile-time assertion that a sufficiently up-to-date version
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
// of the legacy proto package is being used.
|
// is compatible with the proto package it is being compiled against.
|
||||||
const _ = proto.ProtoPackageIsVersion4
|
// A compilation error at this line likely means your copy of the
|
||||||
|
// proto package needs to be updated.
|
||||||
|
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||||
|
|
||||||
// The version number of Gnostic.
|
// The version number of OpenAPI compiler.
|
||||||
type Version struct {
|
type Version struct {
|
||||||
state protoimpl.MessageState
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"`
|
Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"`
|
||||||
Minor int32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"`
|
Minor int32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"`
|
||||||
Patch int32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"`
|
Patch int32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"`
|
||||||
// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
|
// A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
|
||||||
// be empty for mainline stable releases.
|
// be empty for mainline stable releases.
|
||||||
Suffix string `protobuf:"bytes,4,opt,name=suffix,proto3" json:"suffix,omitempty"`
|
Suffix string `protobuf:"bytes,4,opt,name=suffix,proto3" json:"suffix,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Version) Reset() {
|
func (m *Version) Reset() { *m = Version{} }
|
||||||
*x = Version{}
|
func (m *Version) String() string { return proto.CompactTextString(m) }
|
||||||
if protoimpl.UnsafeEnabled {
|
func (*Version) ProtoMessage() {}
|
||||||
mi := &file_extensions_extension_proto_msgTypes[0]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *Version) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Version) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *Version) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_extensions_extension_proto_msgTypes[0]
|
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use Version.ProtoReflect.Descriptor instead.
|
|
||||||
func (*Version) Descriptor() ([]byte, []int) {
|
func (*Version) Descriptor() ([]byte, []int) {
|
||||||
return file_extensions_extension_proto_rawDescGZIP(), []int{0}
|
return fileDescriptor_661e47e790f76671, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Version) GetMajor() int32 {
|
func (m *Version) XXX_Unmarshal(b []byte) error {
|
||||||
if x != nil {
|
return xxx_messageInfo_Version.Unmarshal(m, b)
|
||||||
return x.Major
|
}
|
||||||
|
func (m *Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_Version.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *Version) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_Version.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *Version) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_Version.Size(m)
|
||||||
|
}
|
||||||
|
func (m *Version) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_Version.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_Version proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *Version) GetMajor() int32 {
|
||||||
|
if m != nil {
|
||||||
|
return m.Major
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Version) GetMinor() int32 {
|
func (m *Version) GetMinor() int32 {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Minor
|
return m.Minor
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Version) GetPatch() int32 {
|
func (m *Version) GetPatch() int32 {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Patch
|
return m.Patch
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Version) GetSuffix() string {
|
func (m *Version) GetSuffix() string {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Suffix
|
return m.Suffix
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// An encoded Request is written to the ExtensionHandler's stdin.
|
// An encoded Request is written to the ExtensionHandler's stdin.
|
||||||
type ExtensionHandlerRequest struct {
|
type ExtensionHandlerRequest struct {
|
||||||
state protoimpl.MessageState
|
// The OpenAPI descriptions that were explicitly listed on the command line.
|
||||||
sizeCache protoimpl.SizeCache
|
// The specifications will appear in the order they are specified to gnostic.
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// The extension to process.
|
|
||||||
Wrapper *Wrapper `protobuf:"bytes,1,opt,name=wrapper,proto3" json:"wrapper,omitempty"`
|
Wrapper *Wrapper `protobuf:"bytes,1,opt,name=wrapper,proto3" json:"wrapper,omitempty"`
|
||||||
// The version number of Gnostic.
|
// The version number of openapi compiler.
|
||||||
CompilerVersion *Version `protobuf:"bytes,2,opt,name=compiler_version,json=compilerVersion,proto3" json:"compiler_version,omitempty"`
|
CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion,proto3" json:"compiler_version,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerRequest) Reset() {
|
func (m *ExtensionHandlerRequest) Reset() { *m = ExtensionHandlerRequest{} }
|
||||||
*x = ExtensionHandlerRequest{}
|
func (m *ExtensionHandlerRequest) String() string { return proto.CompactTextString(m) }
|
||||||
if protoimpl.UnsafeEnabled {
|
func (*ExtensionHandlerRequest) ProtoMessage() {}
|
||||||
mi := &file_extensions_extension_proto_msgTypes[1]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExtensionHandlerRequest) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ExtensionHandlerRequest) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *ExtensionHandlerRequest) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_extensions_extension_proto_msgTypes[1]
|
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use ExtensionHandlerRequest.ProtoReflect.Descriptor instead.
|
|
||||||
func (*ExtensionHandlerRequest) Descriptor() ([]byte, []int) {
|
func (*ExtensionHandlerRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_extensions_extension_proto_rawDescGZIP(), []int{1}
|
return fileDescriptor_661e47e790f76671, []int{1}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerRequest) GetWrapper() *Wrapper {
|
func (m *ExtensionHandlerRequest) XXX_Unmarshal(b []byte) error {
|
||||||
if x != nil {
|
return xxx_messageInfo_ExtensionHandlerRequest.Unmarshal(m, b)
|
||||||
return x.Wrapper
|
}
|
||||||
|
func (m *ExtensionHandlerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ExtensionHandlerRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ExtensionHandlerRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ExtensionHandlerRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ExtensionHandlerRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ExtensionHandlerRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *ExtensionHandlerRequest) GetWrapper() *Wrapper {
|
||||||
|
if m != nil {
|
||||||
|
return m.Wrapper
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerRequest) GetCompilerVersion() *Version {
|
func (m *ExtensionHandlerRequest) GetCompilerVersion() *Version {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.CompilerVersion
|
return m.CompilerVersion
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// The extensions writes an encoded ExtensionHandlerResponse to stdout.
|
// The extensions writes an encoded ExtensionHandlerResponse to stdout.
|
||||||
type ExtensionHandlerResponse struct {
|
type ExtensionHandlerResponse struct {
|
||||||
state protoimpl.MessageState
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// true if the extension is handled by the extension handler; false otherwise
|
// true if the extension is handled by the extension handler; false otherwise
|
||||||
Handled bool `protobuf:"varint,1,opt,name=handled,proto3" json:"handled,omitempty"`
|
Handled bool `protobuf:"varint,1,opt,name=handled,proto3" json:"handled,omitempty"`
|
||||||
// Error message(s). If non-empty, the extension handling failed.
|
// Error message. If non-empty, the extension handling failed.
|
||||||
// The extension handler process should exit with status code zero
|
// The extension handler process should exit with status code zero
|
||||||
// even if it reports an error in this way.
|
// even if it reports an error in this way.
|
||||||
//
|
//
|
||||||
@ -189,277 +151,150 @@ type ExtensionHandlerResponse struct {
|
|||||||
// itself -- such as the input Document being unparseable -- should be
|
// itself -- such as the input Document being unparseable -- should be
|
||||||
// reported by writing a message to stderr and exiting with a non-zero
|
// reported by writing a message to stderr and exiting with a non-zero
|
||||||
// status code.
|
// status code.
|
||||||
Errors []string `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty"`
|
Error []string `protobuf:"bytes,2,rep,name=error,proto3" json:"error,omitempty"`
|
||||||
// text output
|
// text output
|
||||||
Value *any.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
|
Value *any.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) Reset() {
|
func (m *ExtensionHandlerResponse) Reset() { *m = ExtensionHandlerResponse{} }
|
||||||
*x = ExtensionHandlerResponse{}
|
func (m *ExtensionHandlerResponse) String() string { return proto.CompactTextString(m) }
|
||||||
if protoimpl.UnsafeEnabled {
|
func (*ExtensionHandlerResponse) ProtoMessage() {}
|
||||||
mi := &file_extensions_extension_proto_msgTypes[2]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*ExtensionHandlerResponse) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_extensions_extension_proto_msgTypes[2]
|
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use ExtensionHandlerResponse.ProtoReflect.Descriptor instead.
|
|
||||||
func (*ExtensionHandlerResponse) Descriptor() ([]byte, []int) {
|
func (*ExtensionHandlerResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_extensions_extension_proto_rawDescGZIP(), []int{2}
|
return fileDescriptor_661e47e790f76671, []int{2}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) GetHandled() bool {
|
func (m *ExtensionHandlerResponse) XXX_Unmarshal(b []byte) error {
|
||||||
if x != nil {
|
return xxx_messageInfo_ExtensionHandlerResponse.Unmarshal(m, b)
|
||||||
return x.Handled
|
}
|
||||||
|
func (m *ExtensionHandlerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ExtensionHandlerResponse.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerResponse) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ExtensionHandlerResponse.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerResponse) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ExtensionHandlerResponse.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ExtensionHandlerResponse) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ExtensionHandlerResponse.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ExtensionHandlerResponse proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *ExtensionHandlerResponse) GetHandled() bool {
|
||||||
|
if m != nil {
|
||||||
|
return m.Handled
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) GetErrors() []string {
|
func (m *ExtensionHandlerResponse) GetError() []string {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Errors
|
return m.Error
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ExtensionHandlerResponse) GetValue() *any.Any {
|
func (m *ExtensionHandlerResponse) GetValue() *any.Any {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Value
|
return m.Value
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type Wrapper struct {
|
type Wrapper struct {
|
||||||
state protoimpl.MessageState
|
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// version of the OpenAPI specification in which this extension was written.
|
// version of the OpenAPI specification in which this extension was written.
|
||||||
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
|
Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
|
||||||
// Name of the extension.
|
// Name of the extension
|
||||||
ExtensionName string `protobuf:"bytes,2,opt,name=extension_name,json=extensionName,proto3" json:"extension_name,omitempty"`
|
ExtensionName string `protobuf:"bytes,2,opt,name=extension_name,json=extensionName,proto3" json:"extension_name,omitempty"`
|
||||||
// YAML-formatted extension value.
|
// Must be a valid yaml for the proto
|
||||||
Yaml string `protobuf:"bytes,3,opt,name=yaml,proto3" json:"yaml,omitempty"`
|
Yaml string `protobuf:"bytes,3,opt,name=yaml,proto3" json:"yaml,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Wrapper) Reset() {
|
func (m *Wrapper) Reset() { *m = Wrapper{} }
|
||||||
*x = Wrapper{}
|
func (m *Wrapper) String() string { return proto.CompactTextString(m) }
|
||||||
if protoimpl.UnsafeEnabled {
|
func (*Wrapper) ProtoMessage() {}
|
||||||
mi := &file_extensions_extension_proto_msgTypes[3]
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *Wrapper) String() string {
|
|
||||||
return protoimpl.X.MessageStringOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Wrapper) ProtoMessage() {}
|
|
||||||
|
|
||||||
func (x *Wrapper) ProtoReflect() protoreflect.Message {
|
|
||||||
mi := &file_extensions_extension_proto_msgTypes[3]
|
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
|
||||||
if ms.LoadMessageInfo() == nil {
|
|
||||||
ms.StoreMessageInfo(mi)
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
return mi.MessageOf(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use Wrapper.ProtoReflect.Descriptor instead.
|
|
||||||
func (*Wrapper) Descriptor() ([]byte, []int) {
|
func (*Wrapper) Descriptor() ([]byte, []int) {
|
||||||
return file_extensions_extension_proto_rawDescGZIP(), []int{3}
|
return fileDescriptor_661e47e790f76671, []int{3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Wrapper) GetVersion() string {
|
func (m *Wrapper) XXX_Unmarshal(b []byte) error {
|
||||||
if x != nil {
|
return xxx_messageInfo_Wrapper.Unmarshal(m, b)
|
||||||
return x.Version
|
}
|
||||||
|
func (m *Wrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_Wrapper.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *Wrapper) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_Wrapper.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *Wrapper) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_Wrapper.Size(m)
|
||||||
|
}
|
||||||
|
func (m *Wrapper) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_Wrapper.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_Wrapper proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *Wrapper) GetVersion() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.Version
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Wrapper) GetExtensionName() string {
|
func (m *Wrapper) GetExtensionName() string {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.ExtensionName
|
return m.ExtensionName
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Wrapper) GetYaml() string {
|
func (m *Wrapper) GetYaml() string {
|
||||||
if x != nil {
|
if m != nil {
|
||||||
return x.Yaml
|
return m.Yaml
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
var File_extensions_extension_proto protoreflect.FileDescriptor
|
func init() {
|
||||||
|
proto.RegisterType((*Version)(nil), "openapiextension.v1.Version")
|
||||||
var file_extensions_extension_proto_rawDesc = []byte{
|
proto.RegisterType((*ExtensionHandlerRequest)(nil), "openapiextension.v1.ExtensionHandlerRequest")
|
||||||
0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74,
|
proto.RegisterType((*ExtensionHandlerResponse)(nil), "openapiextension.v1.ExtensionHandlerResponse")
|
||||||
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x6e,
|
proto.RegisterType((*Wrapper)(nil), "openapiextension.v1.Wrapper")
|
||||||
0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
|
|
||||||
0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a,
|
|
||||||
0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f,
|
|
||||||
0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14,
|
|
||||||
0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d,
|
|
||||||
0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20,
|
|
||||||
0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75,
|
|
||||||
0x66, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x66, 0x66,
|
|
||||||
0x69, 0x78, 0x22, 0x9c, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
|
|
||||||
0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37,
|
|
||||||
0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
|
||||||
0x1d, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
|
|
||||||
0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x07,
|
|
||||||
0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69,
|
|
||||||
0x6c, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
|
|
||||||
0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65,
|
|
||||||
0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
|
||||||
0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
|
||||||
0x6e, 0x22, 0x78, 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x61,
|
|
||||||
0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a,
|
|
||||||
0x07, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
|
|
||||||
0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72,
|
|
||||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12,
|
|
||||||
0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14,
|
|
||||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
|
||||||
0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x07, 0x57,
|
|
||||||
0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
|
||||||
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
|
||||||
0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61,
|
|
||||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
|
|
||||||
0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x18,
|
|
||||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, 0x4b, 0x0a, 0x0e, 0x6f,
|
|
||||||
0x72, 0x67, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x47,
|
|
||||||
0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50,
|
|
||||||
0x01, 0x5a, 0x1f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x67, 0x6e,
|
|
||||||
0x6f, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f,
|
|
||||||
0x76, 0x31, 0xa2, 0x02, 0x03, 0x47, 0x4e, 0x58, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
func init() { proto.RegisterFile("extensions/extension.proto", fileDescriptor_661e47e790f76671) }
|
||||||
file_extensions_extension_proto_rawDescOnce sync.Once
|
|
||||||
file_extensions_extension_proto_rawDescData = file_extensions_extension_proto_rawDesc
|
|
||||||
)
|
|
||||||
|
|
||||||
func file_extensions_extension_proto_rawDescGZIP() []byte {
|
var fileDescriptor_661e47e790f76671 = []byte{
|
||||||
file_extensions_extension_proto_rawDescOnce.Do(func() {
|
// 360 bytes of a gzipped FileDescriptorProto
|
||||||
file_extensions_extension_proto_rawDescData = protoimpl.X.CompressGZIP(file_extensions_extension_proto_rawDescData)
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x91, 0xdf, 0x4b, 0xeb, 0x30,
|
||||||
})
|
0x1c, 0xc5, 0xe9, 0x7e, 0xf5, 0xee, 0x7b, 0xb9, 0xbb, 0x12, 0x87, 0xd6, 0xe1, 0x83, 0x14, 0x04,
|
||||||
return file_extensions_extension_proto_rawDescData
|
0x11, 0xe9, 0x98, 0x82, 0xef, 0x1b, 0x0c, 0xf5, 0xc5, 0x8d, 0x3c, 0xcc, 0x37, 0x47, 0xd6, 0x65,
|
||||||
}
|
0x5d, 0xa5, 0x4d, 0x62, 0xfa, 0xc3, 0xed, 0x5f, 0xf1, 0xd1, 0xbf, 0xd4, 0x34, 0x69, 0xeb, 0x83,
|
||||||
|
0xfa, 0x96, 0xf3, 0xe1, 0x34, 0x39, 0xe7, 0x14, 0x06, 0x74, 0x97, 0x52, 0x96, 0x84, 0x9c, 0x25,
|
||||||
var file_extensions_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
0xc3, 0xfa, 0xe8, 0x09, 0xc9, 0x53, 0x8e, 0x0e, 0xb9, 0xa0, 0x8c, 0x88, 0xf0, 0x8b, 0xe7, 0xa3,
|
||||||
var file_extensions_extension_proto_goTypes = []interface{}{
|
0xc1, 0x49, 0xc0, 0x79, 0x10, 0xd1, 0xa1, 0xb6, 0xac, 0xb2, 0xcd, 0x90, 0xb0, 0xbd, 0xf1, 0xbb,
|
||||||
(*Version)(nil), // 0: gnostic.extension.v1.Version
|
0x3e, 0xd8, 0x0b, 0x2a, 0x0b, 0x23, 0xea, 0x43, 0x3b, 0x26, 0x2f, 0x5c, 0x3a, 0xd6, 0x99, 0x75,
|
||||||
(*ExtensionHandlerRequest)(nil), // 1: gnostic.extension.v1.ExtensionHandlerRequest
|
0xd1, 0xc6, 0x46, 0x68, 0x1a, 0x32, 0x45, 0x1b, 0x25, 0x2d, 0x44, 0x41, 0x05, 0x49, 0xfd, 0xad,
|
||||||
(*ExtensionHandlerResponse)(nil), // 2: gnostic.extension.v1.ExtensionHandlerResponse
|
0xd3, 0x34, 0x54, 0x0b, 0x74, 0x04, 0x9d, 0x24, 0xdb, 0x6c, 0xc2, 0x9d, 0xd3, 0x52, 0xb8, 0x8b,
|
||||||
(*Wrapper)(nil), // 3: gnostic.extension.v1.Wrapper
|
0x4b, 0xe5, 0xbe, 0x5b, 0x70, 0x3c, 0xad, 0x02, 0xdd, 0x13, 0xb6, 0x8e, 0xa8, 0xc4, 0xf4, 0x35,
|
||||||
(*any.Any)(nil), // 4: google.protobuf.Any
|
0xa3, 0x49, 0x8a, 0x6e, 0xc1, 0x7e, 0x93, 0x44, 0x08, 0x6a, 0xde, 0xfd, 0x7b, 0x7d, 0xea, 0xfd,
|
||||||
}
|
0x50, 0xc1, 0x7b, 0x32, 0x1e, 0x5c, 0x99, 0xd1, 0x1d, 0x1c, 0xf8, 0x3c, 0x16, 0xa1, 0xba, 0x6a,
|
||||||
var file_extensions_extension_proto_depIdxs = []int32{
|
0x99, 0x9b, 0x06, 0x3a, 0xcc, 0x6f, 0x17, 0x94, 0x2d, 0xf1, 0xff, 0xea, 0xab, 0x12, 0xb8, 0x39,
|
||||||
3, // 0: gnostic.extension.v1.ExtensionHandlerRequest.wrapper:type_name -> gnostic.extension.v1.Wrapper
|
0x38, 0xdf, 0xb3, 0x25, 0x42, 0x8d, 0x4b, 0x91, 0x03, 0xf6, 0x56, 0xa3, 0xb5, 0x0e, 0xf7, 0x07,
|
||||||
0, // 1: gnostic.extension.v1.ExtensionHandlerRequest.compiler_version:type_name -> gnostic.extension.v1.Version
|
0x57, 0xb2, 0x18, 0x80, 0x4a, 0xa9, 0x67, 0x69, 0xaa, 0xa6, 0x46, 0xa0, 0x4b, 0x68, 0xe7, 0x24,
|
||||||
4, // 2: gnostic.extension.v1.ExtensionHandlerResponse.value:type_name -> google.protobuf.Any
|
0xca, 0x68, 0x99, 0xa4, 0xef, 0x99, 0xe1, 0xbd, 0x6a, 0x78, 0x6f, 0xcc, 0xf6, 0xd8, 0x58, 0xdc,
|
||||||
3, // [3:3] is the sub-list for method output_type
|
0x67, 0xb0, 0xcb, 0x52, 0xc5, 0x33, 0x55, 0x05, 0x4b, 0x0f, 0x57, 0x49, 0x74, 0x0e, 0xbd, 0xba,
|
||||||
3, // [3:3] is the sub-list for method input_type
|
0xc5, 0x92, 0x91, 0x98, 0xea, 0xdf, 0xd0, 0xc5, 0xff, 0x6a, 0xfa, 0xa8, 0x20, 0x42, 0xd0, 0xda,
|
||||||
3, // [3:3] is the sub-list for extension type_name
|
0x93, 0x38, 0xd2, 0xcf, 0x76, 0xb1, 0x3e, 0x4f, 0xae, 0xa0, 0xc7, 0x65, 0xe0, 0x05, 0x8c, 0x27,
|
||||||
3, // [3:3] is the sub-list for extension extendee
|
0x69, 0xe8, 0xab, 0x09, 0x26, 0x68, 0xa6, 0x76, 0x19, 0xcf, 0x1f, 0xea, 0xba, 0x8b, 0xd1, 0xdc,
|
||||||
0, // [0:3] is the sub-list for field type_name
|
0xfa, 0x68, 0x34, 0x67, 0xe3, 0xe9, 0xaa, 0xa3, 0x23, 0xde, 0x7c, 0x06, 0x00, 0x00, 0xff, 0xff,
|
||||||
}
|
0xeb, 0xf3, 0xfa, 0x65, 0x5c, 0x02, 0x00, 0x00,
|
||||||
|
|
||||||
func init() { file_extensions_extension_proto_init() }
|
|
||||||
func file_extensions_extension_proto_init() {
|
|
||||||
if File_extensions_extension_proto != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !protoimpl.UnsafeEnabled {
|
|
||||||
file_extensions_extension_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Version); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_extensions_extension_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*ExtensionHandlerRequest); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_extensions_extension_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*ExtensionHandlerResponse); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
file_extensions_extension_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
|
|
||||||
switch v := v.(*Wrapper); i {
|
|
||||||
case 0:
|
|
||||||
return &v.state
|
|
||||||
case 1:
|
|
||||||
return &v.sizeCache
|
|
||||||
case 2:
|
|
||||||
return &v.unknownFields
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
type x struct{}
|
|
||||||
out := protoimpl.TypeBuilder{
|
|
||||||
File: protoimpl.DescBuilder{
|
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
||||||
RawDescriptor: file_extensions_extension_proto_rawDesc,
|
|
||||||
NumEnums: 0,
|
|
||||||
NumMessages: 4,
|
|
||||||
NumExtensions: 0,
|
|
||||||
NumServices: 0,
|
|
||||||
},
|
|
||||||
GoTypes: file_extensions_extension_proto_goTypes,
|
|
||||||
DependencyIndexes: file_extensions_extension_proto_depIdxs,
|
|
||||||
MessageInfos: file_extensions_extension_proto_msgTypes,
|
|
||||||
}.Build()
|
|
||||||
File_extensions_extension_proto = out.File
|
|
||||||
file_extensions_extension_proto_rawDesc = nil
|
|
||||||
file_extensions_extension_proto_goTypes = nil
|
|
||||||
file_extensions_extension_proto_depIdxs = nil
|
|
||||||
}
|
}
|
||||||
|
29
vendor/github.com/googleapis/gnostic/extensions/extension.proto
generated
vendored
29
vendor/github.com/googleapis/gnostic/extensions/extension.proto
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -14,9 +14,8 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package gnostic.extension.v1;
|
|
||||||
|
|
||||||
import "google/protobuf/any.proto";
|
import "google/protobuf/any.proto";
|
||||||
|
package openapiextension.v1;
|
||||||
|
|
||||||
// This option lets the proto compiler generate Java code inside the package
|
// This option lets the proto compiler generate Java code inside the package
|
||||||
// name (see below) instead of inside an outer class. It creates a simpler
|
// name (see below) instead of inside an outer class. It creates a simpler
|
||||||
@ -27,7 +26,7 @@ option java_multiple_files = true;
|
|||||||
// The Java outer classname should be the filename in UpperCamelCase. This
|
// The Java outer classname should be the filename in UpperCamelCase. This
|
||||||
// class is only used to hold proto descriptor, so developers don't need to
|
// class is only used to hold proto descriptor, so developers don't need to
|
||||||
// work with it directly.
|
// work with it directly.
|
||||||
option java_outer_classname = "GnosticExtension";
|
option java_outer_classname = "OpenAPIExtensionV1";
|
||||||
|
|
||||||
// The Java package name must be proto package name with proper prefix.
|
// The Java package name must be proto package name with proper prefix.
|
||||||
option java_package = "org.gnostic.v1";
|
option java_package = "org.gnostic.v1";
|
||||||
@ -38,12 +37,9 @@ option java_package = "org.gnostic.v1";
|
|||||||
// hopefully unique enough to not conflict with things that may come along in
|
// hopefully unique enough to not conflict with things that may come along in
|
||||||
// the future. 'GPB' is reserved for the protocol buffer implementation itself.
|
// the future. 'GPB' is reserved for the protocol buffer implementation itself.
|
||||||
//
|
//
|
||||||
option objc_class_prefix = "GNX"; // "Gnostic Extension"
|
option objc_class_prefix = "OAE"; // "OpenAPI Extension"
|
||||||
|
|
||||||
// The Go package name.
|
// The version number of OpenAPI compiler.
|
||||||
option go_package = "extensions;gnostic_extension_v1";
|
|
||||||
|
|
||||||
// The version number of Gnostic.
|
|
||||||
message Version {
|
message Version {
|
||||||
int32 major = 1;
|
int32 major = 1;
|
||||||
int32 minor = 2;
|
int32 minor = 2;
|
||||||
@ -56,11 +52,12 @@ message Version {
|
|||||||
// An encoded Request is written to the ExtensionHandler's stdin.
|
// An encoded Request is written to the ExtensionHandler's stdin.
|
||||||
message ExtensionHandlerRequest {
|
message ExtensionHandlerRequest {
|
||||||
|
|
||||||
// The extension to process.
|
// The OpenAPI descriptions that were explicitly listed on the command line.
|
||||||
|
// The specifications will appear in the order they are specified to gnostic.
|
||||||
Wrapper wrapper = 1;
|
Wrapper wrapper = 1;
|
||||||
|
|
||||||
// The version number of Gnostic.
|
// The version number of openapi compiler.
|
||||||
Version compiler_version = 2;
|
Version compiler_version = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The extensions writes an encoded ExtensionHandlerResponse to stdout.
|
// The extensions writes an encoded ExtensionHandlerResponse to stdout.
|
||||||
@ -69,7 +66,7 @@ message ExtensionHandlerResponse {
|
|||||||
// true if the extension is handled by the extension handler; false otherwise
|
// true if the extension is handled by the extension handler; false otherwise
|
||||||
bool handled = 1;
|
bool handled = 1;
|
||||||
|
|
||||||
// Error message(s). If non-empty, the extension handling failed.
|
// Error message. If non-empty, the extension handling failed.
|
||||||
// The extension handler process should exit with status code zero
|
// The extension handler process should exit with status code zero
|
||||||
// even if it reports an error in this way.
|
// even if it reports an error in this way.
|
||||||
//
|
//
|
||||||
@ -78,7 +75,7 @@ message ExtensionHandlerResponse {
|
|||||||
// itself -- such as the input Document being unparseable -- should be
|
// itself -- such as the input Document being unparseable -- should be
|
||||||
// reported by writing a message to stderr and exiting with a non-zero
|
// reported by writing a message to stderr and exiting with a non-zero
|
||||||
// status code.
|
// status code.
|
||||||
repeated string errors = 2;
|
repeated string error = 2;
|
||||||
|
|
||||||
// text output
|
// text output
|
||||||
google.protobuf.Any value = 3;
|
google.protobuf.Any value = 3;
|
||||||
@ -88,9 +85,9 @@ message Wrapper {
|
|||||||
// version of the OpenAPI specification in which this extension was written.
|
// version of the OpenAPI specification in which this extension was written.
|
||||||
string version = 1;
|
string version = 1;
|
||||||
|
|
||||||
// Name of the extension.
|
// Name of the extension
|
||||||
string extension_name = 2;
|
string extension_name = 2;
|
||||||
|
|
||||||
// YAML-formatted extension value.
|
// Must be a valid yaml for the proto
|
||||||
string yaml = 3;
|
string yaml = 3;
|
||||||
}
|
}
|
||||||
|
68
vendor/github.com/googleapis/gnostic/extensions/extensions.go
generated
vendored
68
vendor/github.com/googleapis/gnostic/extensions/extensions.go
generated
vendored
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
// Copyright 2017 Google Inc. All Rights Reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@ -12,53 +12,71 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
package gnostic_extension_v1
|
package openapiextension_v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"github.com/golang/protobuf/ptypes"
|
"github.com/golang/protobuf/ptypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type documentHandler func(version string, extensionName string, document string)
|
||||||
type extensionHandler func(name string, yamlInput string) (bool, proto.Message, error)
|
type extensionHandler func(name string, yamlInput string) (bool, proto.Message, error)
|
||||||
|
|
||||||
// Main implements the main program of an extension handler.
|
func forInputYamlFromOpenapic(handler documentHandler) {
|
||||||
func Main(handler extensionHandler) {
|
|
||||||
// unpack the request
|
|
||||||
data, err := ioutil.ReadAll(os.Stdin)
|
data, err := ioutil.ReadAll(os.Stdin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("File error:", err.Error())
|
fmt.Println("File error:", err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
if len(data) == 0 {
|
if len(data) == 0 {
|
||||||
log.Println("No input data.")
|
fmt.Println("No input data.")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
request := &ExtensionHandlerRequest{}
|
request := &ExtensionHandlerRequest{}
|
||||||
err = proto.Unmarshal(data, request)
|
err = proto.Unmarshal(data, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Input error:", err.Error())
|
fmt.Println("Input error:", err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
// call the handler
|
handler(request.Wrapper.Version, request.Wrapper.ExtensionName, request.Wrapper.Yaml)
|
||||||
handled, output, err := handler(request.Wrapper.ExtensionName, request.Wrapper.Yaml)
|
}
|
||||||
// respond with the output of the handler
|
|
||||||
response := &ExtensionHandlerResponse{
|
// ProcessExtension calles the handler for a specified extension.
|
||||||
Handled: false, // default assumption
|
func ProcessExtension(handleExtension extensionHandler) {
|
||||||
Errors: make([]string, 0),
|
response := &ExtensionHandlerResponse{}
|
||||||
}
|
forInputYamlFromOpenapic(
|
||||||
if err != nil {
|
func(version string, extensionName string, yamlInput string) {
|
||||||
response.Errors = append(response.Errors, err.Error())
|
var newObject proto.Message
|
||||||
} else if handled {
|
var err error
|
||||||
response.Handled = true
|
|
||||||
response.Value, err = ptypes.MarshalAny(output)
|
handled, newObject, err := handleExtension(extensionName, yamlInput)
|
||||||
if err != nil {
|
if !handled {
|
||||||
response.Errors = append(response.Errors, err.Error())
|
responseBytes, _ := proto.Marshal(response)
|
||||||
}
|
os.Stdout.Write(responseBytes)
|
||||||
}
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we reach here, then the extension is handled
|
||||||
|
response.Handled = true
|
||||||
|
if err != nil {
|
||||||
|
response.Error = append(response.Error, err.Error())
|
||||||
|
responseBytes, _ := proto.Marshal(response)
|
||||||
|
os.Stdout.Write(responseBytes)
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
response.Value, err = ptypes.MarshalAny(newObject)
|
||||||
|
if err != nil {
|
||||||
|
response.Error = append(response.Error, err.Error())
|
||||||
|
responseBytes, _ := proto.Marshal(response)
|
||||||
|
os.Stdout.Write(responseBytes)
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
responseBytes, _ := proto.Marshal(response)
|
responseBytes, _ := proto.Marshal(response)
|
||||||
os.Stdout.Write(responseBytes)
|
os.Stdout.Write(responseBytes)
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/googleapis/gnostic/jsonschema/README.md
generated
vendored
4
vendor/github.com/googleapis/gnostic/jsonschema/README.md
generated
vendored
@ -1,4 +0,0 @@
|
|||||||
# jsonschema
|
|
||||||
|
|
||||||
This directory contains code for reading, writing, and manipulating JSON
|
|
||||||
schemas.
|
|
84
vendor/github.com/googleapis/gnostic/jsonschema/base.go
generated
vendored
84
vendor/github.com/googleapis/gnostic/jsonschema/base.go
generated
vendored
@ -1,84 +0,0 @@
|
|||||||
|
|
||||||
// THIS FILE IS AUTOMATICALLY GENERATED.
|
|
||||||
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
)
|
|
||||||
|
|
||||||
func baseSchemaBytes() ([]byte, error){
|
|
||||||
return base64.StdEncoding.DecodeString(
|
|
||||||
`ewogICAgImlkIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsCiAgICAi
|
|
||||||
JHNjaGVtYSI6ICJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLAogICAgImRl
|
|
||||||
c2NyaXB0aW9uIjogIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hIiwKICAgICJkZWZpbml0aW9ucyI6IHsK
|
|
||||||
ICAgICAgICAic2NoZW1hQXJyYXkiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAg
|
|
||||||
ICAgICAgIm1pbkl0ZW1zIjogMSwKICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICIjIiB9CiAg
|
|
||||||
ICAgICAgfSwKICAgICAgICAicG9zaXRpdmVJbnRlZ2VyIjogewogICAgICAgICAgICAidHlwZSI6ICJp
|
|
||||||
bnRlZ2VyIiwKICAgICAgICAgICAgIm1pbmltdW0iOiAwCiAgICAgICAgfSwKICAgICAgICAicG9zaXRp
|
|
||||||
dmVJbnRlZ2VyRGVmYXVsdDAiOiB7CiAgICAgICAgICAgICJhbGxPZiI6IFsgeyAiJHJlZiI6ICIjL2Rl
|
|
||||||
ZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciIgfSwgeyAiZGVmYXVsdCI6IDAgfSBdCiAgICAgICAgfSwK
|
|
||||||
ICAgICAgICAic2ltcGxlVHlwZXMiOiB7CiAgICAgICAgICAgICJlbnVtIjogWyAiYXJyYXkiLCAiYm9v
|
|
||||||
bGVhbiIsICJpbnRlZ2VyIiwgIm51bGwiLCAibnVtYmVyIiwgIm9iamVjdCIsICJzdHJpbmciIF0KICAg
|
|
||||||
ICAgICB9LAogICAgICAgICJzdHJpbmdBcnJheSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki
|
|
||||||
LAogICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKICAgICAgICAgICAgIm1p
|
|
||||||
bkl0ZW1zIjogMSwKICAgICAgICAgICAgInVuaXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgIH0KICAgIH0s
|
|
||||||
CiAgICAidHlwZSI6ICJvYmplY3QiLAogICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImlkIjogewog
|
|
||||||
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAg
|
|
||||||
ICAgICB9LAogICAgICAgICIkc2NoZW1hIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAog
|
|
||||||
ICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAgICAgICB9LAogICAgICAgICJ0aXRsZSI6IHsKICAg
|
|
||||||
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgImRlc2NyaXB0aW9uIjog
|
|
||||||
ewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgfSwKICAgICAgICAiZGVmYXVsdCI6
|
|
||||||
IHt9LAogICAgICAgICJtdWx0aXBsZU9mIjogewogICAgICAgICAgICAidHlwZSI6ICJudW1iZXIiLAog
|
|
||||||
ICAgICAgICAgICAibWluaW11bSI6IDAsCiAgICAgICAgICAgICJleGNsdXNpdmVNaW5pbXVtIjogdHJ1
|
|
||||||
ZQogICAgICAgIH0sCiAgICAgICAgIm1heGltdW0iOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm51bWJl
|
|
||||||
ciIKICAgICAgICB9LAogICAgICAgICJleGNsdXNpdmVNYXhpbXVtIjogewogICAgICAgICAgICAidHlw
|
|
||||||
ZSI6ICJib29sZWFuIiwKICAgICAgICAgICAgImRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAg
|
|
||||||
ICAgIm1pbmltdW0iOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm51bWJlciIKICAgICAgICB9LAogICAg
|
|
||||||
ICAgICJleGNsdXNpdmVNaW5pbXVtIjogewogICAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAg
|
|
||||||
ICAgICAgICAgImRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIm1heExlbmd0aCI6IHsg
|
|
||||||
IiRyZWYiOiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIiIH0sCiAgICAgICAgIm1pbkxlbmd0
|
|
||||||
aCI6IHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCIgfSwKICAg
|
|
||||||
ICAgICAicGF0dGVybiI6IHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAg
|
|
||||||
ImZvcm1hdCI6ICJyZWdleCIKICAgICAgICB9LAogICAgICAgICJhZGRpdGlvbmFsSXRlbXMiOiB7CiAg
|
|
||||||
ICAgICAgICAgICJhbnlPZiI6IFsKICAgICAgICAgICAgICAgIHsgInR5cGUiOiAiYm9vbGVhbiIgfSwK
|
|
||||||
ICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAi
|
|
||||||
ZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICJhbnlP
|
|
||||||
ZiI6IFsKICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAgICAgIHsgIiRy
|
|
||||||
ZWYiOiAiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSIgfQogICAgICAgICAgICBdLAogICAgICAgICAg
|
|
||||||
ICAiZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAibWF4SXRlbXMiOiB7ICIkcmVmIjogIiMv
|
|
||||||
ZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIiB9LAogICAgICAgICJtaW5JdGVtcyI6IHsgIiRyZWYi
|
|
||||||
OiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCIgfSwKICAgICAgICAidW5pcXVl
|
|
||||||
SXRlbXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImJvb2xlYW4iLAogICAgICAgICAgICAiZGVmYXVs
|
|
||||||
dCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAibWF4UHJvcGVydGllcyI6IHsgIiRyZWYiOiAiIy9k
|
|
||||||
ZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIiIH0sCiAgICAgICAgIm1pblByb3BlcnRpZXMiOiB7ICIk
|
|
||||||
cmVmIjogIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAiIH0sCiAgICAgICAgInJl
|
|
||||||
cXVpcmVkIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5IiB9LAogICAgICAgICJh
|
|
||||||
ZGRpdGlvbmFsUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgImFueU9mIjogWwogICAgICAgICAgICAg
|
|
||||||
ICAgeyAidHlwZSI6ICJib29sZWFuIiB9LAogICAgICAgICAgICAgICAgeyAiJHJlZiI6ICIjIiB9CiAg
|
|
||||||
ICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZWZhdWx0Ijoge30KICAgICAgICB9LAogICAgICAgICJk
|
|
||||||
ZWZpbml0aW9ucyI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImFk
|
|
||||||
ZGl0aW9uYWxQcm9wZXJ0aWVzIjogeyAiJHJlZiI6ICIjIiB9LAogICAgICAgICAgICAiZGVmYXVsdCI6
|
|
||||||
IHt9CiAgICAgICAgfSwKICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgInR5cGUiOiAi
|
|
||||||
b2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogeyAiJHJlZiI6ICIjIiB9
|
|
||||||
LAogICAgICAgICAgICAiZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAicGF0dGVyblByb3Bl
|
|
||||||
cnRpZXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlv
|
|
||||||
bmFsUHJvcGVydGllcyI6IHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAgImRlZmF1bHQiOiB7fQog
|
|
||||||
ICAgICAgIH0sCiAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2Jq
|
|
||||||
ZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAg
|
|
||||||
ImFueU9mIjogWwogICAgICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAg
|
|
||||||
ICAgICAgICB7ICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkiIH0KICAgICAgICAgICAg
|
|
||||||
ICAgIF0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImVudW0iOiB7CiAgICAgICAgICAg
|
|
||||||
ICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgIm1pbkl0ZW1zIjogMSwKICAgICAgICAgICAgInVu
|
|
||||||
aXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInR5cGUiOiB7CiAgICAgICAgICAgICJh
|
|
||||||
bnlPZiI6IFsKICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBl
|
|
||||||
cyIgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
|
|
||||||
CiAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3NpbXBs
|
|
||||||
ZVR5cGVzIiB9LAogICAgICAgICAgICAgICAgICAgICJtaW5JdGVtcyI6IDEsCiAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgInVuaXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAg
|
|
||||||
ICAgICAgfSwKICAgICAgICAiYWxsT2YiOiB7ICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJy
|
|
||||||
YXkiIH0sCiAgICAgICAgImFueU9mIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5
|
|
||||||
IiB9LAogICAgICAgICJvbmVPZiI6IHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSIg
|
|
||||||
fSwKICAgICAgICAibm90IjogeyAiJHJlZiI6ICIjIiB9CiAgICB9LAogICAgImRlcGVuZGVuY2llcyI6
|
|
||||||
IHsKICAgICAgICAiZXhjbHVzaXZlTWF4aW11bSI6IFsgIm1heGltdW0iIF0sCiAgICAgICAgImV4Y2x1
|
|
||||||
c2l2ZU1pbmltdW0iOiBbICJtaW5pbXVtIiBdCiAgICB9LAogICAgImRlZmF1bHQiOiB7fQp9Cg==`)}
|
|
229
vendor/github.com/googleapis/gnostic/jsonschema/display.go
generated
vendored
229
vendor/github.com/googleapis/gnostic/jsonschema/display.go
generated
vendored
@ -1,229 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
//
|
|
||||||
// DISPLAY
|
|
||||||
// The following methods display Schemas.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Description returns a string representation of a string or string array.
|
|
||||||
func (s *StringOrStringArray) Description() string {
|
|
||||||
if s.String != nil {
|
|
||||||
return *s.String
|
|
||||||
}
|
|
||||||
if s.StringArray != nil {
|
|
||||||
return strings.Join(*s.StringArray, ", ")
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a string representation of a Schema.
|
|
||||||
func (schema *Schema) String() string {
|
|
||||||
return schema.describeSchema("")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper: Returns a string representation of a Schema indented by a specified string.
|
|
||||||
func (schema *Schema) describeSchema(indent string) string {
|
|
||||||
result := ""
|
|
||||||
if schema.Schema != nil {
|
|
||||||
result += indent + "$schema: " + *(schema.Schema) + "\n"
|
|
||||||
}
|
|
||||||
if schema.ID != nil {
|
|
||||||
result += indent + "id: " + *(schema.ID) + "\n"
|
|
||||||
}
|
|
||||||
if schema.MultipleOf != nil {
|
|
||||||
result += indent + fmt.Sprintf("multipleOf: %+v\n", *(schema.MultipleOf))
|
|
||||||
}
|
|
||||||
if schema.Maximum != nil {
|
|
||||||
result += indent + fmt.Sprintf("maximum: %+v\n", *(schema.Maximum))
|
|
||||||
}
|
|
||||||
if schema.ExclusiveMaximum != nil {
|
|
||||||
result += indent + fmt.Sprintf("exclusiveMaximum: %+v\n", *(schema.ExclusiveMaximum))
|
|
||||||
}
|
|
||||||
if schema.Minimum != nil {
|
|
||||||
result += indent + fmt.Sprintf("minimum: %+v\n", *(schema.Minimum))
|
|
||||||
}
|
|
||||||
if schema.ExclusiveMinimum != nil {
|
|
||||||
result += indent + fmt.Sprintf("exclusiveMinimum: %+v\n", *(schema.ExclusiveMinimum))
|
|
||||||
}
|
|
||||||
if schema.MaxLength != nil {
|
|
||||||
result += indent + fmt.Sprintf("maxLength: %+v\n", *(schema.MaxLength))
|
|
||||||
}
|
|
||||||
if schema.MinLength != nil {
|
|
||||||
result += indent + fmt.Sprintf("minLength: %+v\n", *(schema.MinLength))
|
|
||||||
}
|
|
||||||
if schema.Pattern != nil {
|
|
||||||
result += indent + fmt.Sprintf("pattern: %+v\n", *(schema.Pattern))
|
|
||||||
}
|
|
||||||
if schema.AdditionalItems != nil {
|
|
||||||
s := schema.AdditionalItems.Schema
|
|
||||||
if s != nil {
|
|
||||||
result += indent + "additionalItems:\n"
|
|
||||||
result += s.describeSchema(indent + " ")
|
|
||||||
} else {
|
|
||||||
b := *(schema.AdditionalItems.Boolean)
|
|
||||||
result += indent + fmt.Sprintf("additionalItems: %+v\n", b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Items != nil {
|
|
||||||
result += indent + "items:\n"
|
|
||||||
items := schema.Items
|
|
||||||
if items.SchemaArray != nil {
|
|
||||||
for i, s := range *(items.SchemaArray) {
|
|
||||||
result += indent + " " + fmt.Sprintf("%d", i) + ":\n"
|
|
||||||
result += s.describeSchema(indent + " " + " ")
|
|
||||||
}
|
|
||||||
} else if items.Schema != nil {
|
|
||||||
result += items.Schema.describeSchema(indent + " " + " ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.MaxItems != nil {
|
|
||||||
result += indent + fmt.Sprintf("maxItems: %+v\n", *(schema.MaxItems))
|
|
||||||
}
|
|
||||||
if schema.MinItems != nil {
|
|
||||||
result += indent + fmt.Sprintf("minItems: %+v\n", *(schema.MinItems))
|
|
||||||
}
|
|
||||||
if schema.UniqueItems != nil {
|
|
||||||
result += indent + fmt.Sprintf("uniqueItems: %+v\n", *(schema.UniqueItems))
|
|
||||||
}
|
|
||||||
if schema.MaxProperties != nil {
|
|
||||||
result += indent + fmt.Sprintf("maxProperties: %+v\n", *(schema.MaxProperties))
|
|
||||||
}
|
|
||||||
if schema.MinProperties != nil {
|
|
||||||
result += indent + fmt.Sprintf("minProperties: %+v\n", *(schema.MinProperties))
|
|
||||||
}
|
|
||||||
if schema.Required != nil {
|
|
||||||
result += indent + fmt.Sprintf("required: %+v\n", *(schema.Required))
|
|
||||||
}
|
|
||||||
if schema.AdditionalProperties != nil {
|
|
||||||
s := schema.AdditionalProperties.Schema
|
|
||||||
if s != nil {
|
|
||||||
result += indent + "additionalProperties:\n"
|
|
||||||
result += s.describeSchema(indent + " ")
|
|
||||||
} else {
|
|
||||||
b := *(schema.AdditionalProperties.Boolean)
|
|
||||||
result += indent + fmt.Sprintf("additionalProperties: %+v\n", b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Properties != nil {
|
|
||||||
result += indent + "properties:\n"
|
|
||||||
for _, pair := range *(schema.Properties) {
|
|
||||||
name := pair.Name
|
|
||||||
s := pair.Value
|
|
||||||
result += indent + " " + name + ":\n"
|
|
||||||
result += s.describeSchema(indent + " " + " ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.PatternProperties != nil {
|
|
||||||
result += indent + "patternProperties:\n"
|
|
||||||
for _, pair := range *(schema.PatternProperties) {
|
|
||||||
name := pair.Name
|
|
||||||
s := pair.Value
|
|
||||||
result += indent + " " + name + ":\n"
|
|
||||||
result += s.describeSchema(indent + " " + " ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Dependencies != nil {
|
|
||||||
result += indent + "dependencies:\n"
|
|
||||||
for _, pair := range *(schema.Dependencies) {
|
|
||||||
name := pair.Name
|
|
||||||
schemaOrStringArray := pair.Value
|
|
||||||
s := schemaOrStringArray.Schema
|
|
||||||
if s != nil {
|
|
||||||
result += indent + " " + name + ":\n"
|
|
||||||
result += s.describeSchema(indent + " " + " ")
|
|
||||||
} else {
|
|
||||||
a := schemaOrStringArray.StringArray
|
|
||||||
if a != nil {
|
|
||||||
result += indent + " " + name + ":\n"
|
|
||||||
for _, s2 := range *a {
|
|
||||||
result += indent + " " + " " + s2 + "\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Enumeration != nil {
|
|
||||||
result += indent + "enumeration:\n"
|
|
||||||
for _, value := range *(schema.Enumeration) {
|
|
||||||
if value.String != nil {
|
|
||||||
result += indent + " " + fmt.Sprintf("%+v\n", *value.String)
|
|
||||||
} else {
|
|
||||||
result += indent + " " + fmt.Sprintf("%+v\n", *value.Bool)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Type != nil {
|
|
||||||
result += indent + fmt.Sprintf("type: %+v\n", schema.Type.Description())
|
|
||||||
}
|
|
||||||
if schema.AllOf != nil {
|
|
||||||
result += indent + "allOf:\n"
|
|
||||||
for _, s := range *(schema.AllOf) {
|
|
||||||
result += s.describeSchema(indent + " ")
|
|
||||||
result += indent + "-\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.AnyOf != nil {
|
|
||||||
result += indent + "anyOf:\n"
|
|
||||||
for _, s := range *(schema.AnyOf) {
|
|
||||||
result += s.describeSchema(indent + " ")
|
|
||||||
result += indent + "-\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.OneOf != nil {
|
|
||||||
result += indent + "oneOf:\n"
|
|
||||||
for _, s := range *(schema.OneOf) {
|
|
||||||
result += s.describeSchema(indent + " ")
|
|
||||||
result += indent + "-\n"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Not != nil {
|
|
||||||
result += indent + "not:\n"
|
|
||||||
result += schema.Not.describeSchema(indent + " ")
|
|
||||||
}
|
|
||||||
if schema.Definitions != nil {
|
|
||||||
result += indent + "definitions:\n"
|
|
||||||
for _, pair := range *(schema.Definitions) {
|
|
||||||
name := pair.Name
|
|
||||||
s := pair.Value
|
|
||||||
result += indent + " " + name + ":\n"
|
|
||||||
result += s.describeSchema(indent + " " + " ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Title != nil {
|
|
||||||
result += indent + "title: " + *(schema.Title) + "\n"
|
|
||||||
}
|
|
||||||
if schema.Description != nil {
|
|
||||||
result += indent + "description: " + *(schema.Description) + "\n"
|
|
||||||
}
|
|
||||||
if schema.Default != nil {
|
|
||||||
result += indent + "default:\n"
|
|
||||||
result += indent + fmt.Sprintf(" %+v\n", *(schema.Default))
|
|
||||||
}
|
|
||||||
if schema.Format != nil {
|
|
||||||
result += indent + "format: " + *(schema.Format) + "\n"
|
|
||||||
}
|
|
||||||
if schema.Ref != nil {
|
|
||||||
result += indent + "$ref: " + *(schema.Ref) + "\n"
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
228
vendor/github.com/googleapis/gnostic/jsonschema/models.go
generated
vendored
228
vendor/github.com/googleapis/gnostic/jsonschema/models.go
generated
vendored
@ -1,228 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
// Package jsonschema supports the reading, writing, and manipulation
|
|
||||||
// of JSON Schemas.
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import "gopkg.in/yaml.v3"
|
|
||||||
|
|
||||||
// The Schema struct models a JSON Schema and, because schemas are
|
|
||||||
// defined hierarchically, contains many references to itself.
|
|
||||||
// All fields are pointers and are nil if the associated values
|
|
||||||
// are not specified.
|
|
||||||
type Schema struct {
|
|
||||||
Schema *string // $schema
|
|
||||||
ID *string // id keyword used for $ref resolution scope
|
|
||||||
Ref *string // $ref, i.e. JSON Pointers
|
|
||||||
|
|
||||||
// http://json-schema.org/latest/json-schema-validation.html
|
|
||||||
// 5.1. Validation keywords for numeric instances (number and integer)
|
|
||||||
MultipleOf *SchemaNumber
|
|
||||||
Maximum *SchemaNumber
|
|
||||||
ExclusiveMaximum *bool
|
|
||||||
Minimum *SchemaNumber
|
|
||||||
ExclusiveMinimum *bool
|
|
||||||
|
|
||||||
// 5.2. Validation keywords for strings
|
|
||||||
MaxLength *int64
|
|
||||||
MinLength *int64
|
|
||||||
Pattern *string
|
|
||||||
|
|
||||||
// 5.3. Validation keywords for arrays
|
|
||||||
AdditionalItems *SchemaOrBoolean
|
|
||||||
Items *SchemaOrSchemaArray
|
|
||||||
MaxItems *int64
|
|
||||||
MinItems *int64
|
|
||||||
UniqueItems *bool
|
|
||||||
|
|
||||||
// 5.4. Validation keywords for objects
|
|
||||||
MaxProperties *int64
|
|
||||||
MinProperties *int64
|
|
||||||
Required *[]string
|
|
||||||
AdditionalProperties *SchemaOrBoolean
|
|
||||||
Properties *[]*NamedSchema
|
|
||||||
PatternProperties *[]*NamedSchema
|
|
||||||
Dependencies *[]*NamedSchemaOrStringArray
|
|
||||||
|
|
||||||
// 5.5. Validation keywords for any instance type
|
|
||||||
Enumeration *[]SchemaEnumValue
|
|
||||||
Type *StringOrStringArray
|
|
||||||
AllOf *[]*Schema
|
|
||||||
AnyOf *[]*Schema
|
|
||||||
OneOf *[]*Schema
|
|
||||||
Not *Schema
|
|
||||||
Definitions *[]*NamedSchema
|
|
||||||
|
|
||||||
// 6. Metadata keywords
|
|
||||||
Title *string
|
|
||||||
Description *string
|
|
||||||
Default *yaml.Node
|
|
||||||
|
|
||||||
// 7. Semantic validation with "format"
|
|
||||||
Format *string
|
|
||||||
}
|
|
||||||
|
|
||||||
// These helper structs represent "combination" types that generally can
|
|
||||||
// have values of one type or another. All are used to represent parts
|
|
||||||
// of Schemas.
|
|
||||||
|
|
||||||
// SchemaNumber represents a value that can be either an Integer or a Float.
|
|
||||||
type SchemaNumber struct {
|
|
||||||
Integer *int64
|
|
||||||
Float *float64
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaNumberWithInteger creates and returns a new object
|
|
||||||
func NewSchemaNumberWithInteger(i int64) *SchemaNumber {
|
|
||||||
result := &SchemaNumber{}
|
|
||||||
result.Integer = &i
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaNumberWithFloat creates and returns a new object
|
|
||||||
func NewSchemaNumberWithFloat(f float64) *SchemaNumber {
|
|
||||||
result := &SchemaNumber{}
|
|
||||||
result.Float = &f
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchemaOrBoolean represents a value that can be either a Schema or a Boolean.
|
|
||||||
type SchemaOrBoolean struct {
|
|
||||||
Schema *Schema
|
|
||||||
Boolean *bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaOrBooleanWithSchema creates and returns a new object
|
|
||||||
func NewSchemaOrBooleanWithSchema(s *Schema) *SchemaOrBoolean {
|
|
||||||
result := &SchemaOrBoolean{}
|
|
||||||
result.Schema = s
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaOrBooleanWithBoolean creates and returns a new object
|
|
||||||
func NewSchemaOrBooleanWithBoolean(b bool) *SchemaOrBoolean {
|
|
||||||
result := &SchemaOrBoolean{}
|
|
||||||
result.Boolean = &b
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// StringOrStringArray represents a value that can be either
|
|
||||||
// a String or an Array of Strings.
|
|
||||||
type StringOrStringArray struct {
|
|
||||||
String *string
|
|
||||||
StringArray *[]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewStringOrStringArrayWithString creates and returns a new object
|
|
||||||
func NewStringOrStringArrayWithString(s string) *StringOrStringArray {
|
|
||||||
result := &StringOrStringArray{}
|
|
||||||
result.String = &s
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewStringOrStringArrayWithStringArray creates and returns a new object
|
|
||||||
func NewStringOrStringArrayWithStringArray(a []string) *StringOrStringArray {
|
|
||||||
result := &StringOrStringArray{}
|
|
||||||
result.StringArray = &a
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchemaOrStringArray represents a value that can be either
|
|
||||||
// a Schema or an Array of Strings.
|
|
||||||
type SchemaOrStringArray struct {
|
|
||||||
Schema *Schema
|
|
||||||
StringArray *[]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchemaOrSchemaArray represents a value that can be either
|
|
||||||
// a Schema or an Array of Schemas.
|
|
||||||
type SchemaOrSchemaArray struct {
|
|
||||||
Schema *Schema
|
|
||||||
SchemaArray *[]*Schema
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaOrSchemaArrayWithSchema creates and returns a new object
|
|
||||||
func NewSchemaOrSchemaArrayWithSchema(s *Schema) *SchemaOrSchemaArray {
|
|
||||||
result := &SchemaOrSchemaArray{}
|
|
||||||
result.Schema = s
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaOrSchemaArrayWithSchemaArray creates and returns a new object
|
|
||||||
func NewSchemaOrSchemaArrayWithSchemaArray(a []*Schema) *SchemaOrSchemaArray {
|
|
||||||
result := &SchemaOrSchemaArray{}
|
|
||||||
result.SchemaArray = &a
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchemaEnumValue represents a value that can be part of an
|
|
||||||
// enumeration in a Schema.
|
|
||||||
type SchemaEnumValue struct {
|
|
||||||
String *string
|
|
||||||
Bool *bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// NamedSchema is a name-value pair that is used to emulate maps
|
|
||||||
// with ordered keys.
|
|
||||||
type NamedSchema struct {
|
|
||||||
Name string
|
|
||||||
Value *Schema
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewNamedSchema creates and returns a new object
|
|
||||||
func NewNamedSchema(name string, value *Schema) *NamedSchema {
|
|
||||||
return &NamedSchema{Name: name, Value: value}
|
|
||||||
}
|
|
||||||
|
|
||||||
// NamedSchemaOrStringArray is a name-value pair that is used
|
|
||||||
// to emulate maps with ordered keys.
|
|
||||||
type NamedSchemaOrStringArray struct {
|
|
||||||
Name string
|
|
||||||
Value *SchemaOrStringArray
|
|
||||||
}
|
|
||||||
|
|
||||||
// Access named subschemas by name
|
|
||||||
|
|
||||||
func namedSchemaArrayElementWithName(array *[]*NamedSchema, name string) *Schema {
|
|
||||||
if array == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
for _, pair := range *array {
|
|
||||||
if pair.Name == name {
|
|
||||||
return pair.Value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// PropertyWithName returns the selected element.
|
|
||||||
func (s *Schema) PropertyWithName(name string) *Schema {
|
|
||||||
return namedSchemaArrayElementWithName(s.Properties, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PatternPropertyWithName returns the selected element.
|
|
||||||
func (s *Schema) PatternPropertyWithName(name string) *Schema {
|
|
||||||
return namedSchemaArrayElementWithName(s.PatternProperties, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefinitionWithName returns the selected element.
|
|
||||||
func (s *Schema) DefinitionWithName(name string) *Schema {
|
|
||||||
return namedSchemaArrayElementWithName(s.Definitions, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddProperty adds a named property.
|
|
||||||
func (s *Schema) AddProperty(name string, property *Schema) {
|
|
||||||
*s.Properties = append(*s.Properties, NewNamedSchema(name, property))
|
|
||||||
}
|
|
394
vendor/github.com/googleapis/gnostic/jsonschema/operations.go
generated
vendored
394
vendor/github.com/googleapis/gnostic/jsonschema/operations.go
generated
vendored
@ -1,394 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
//
|
|
||||||
// OPERATIONS
|
|
||||||
// The following methods perform operations on Schemas.
|
|
||||||
//
|
|
||||||
|
|
||||||
// IsEmpty returns true if no members of the Schema are specified.
|
|
||||||
func (schema *Schema) IsEmpty() bool {
|
|
||||||
return (schema.Schema == nil) &&
|
|
||||||
(schema.ID == nil) &&
|
|
||||||
(schema.MultipleOf == nil) &&
|
|
||||||
(schema.Maximum == nil) &&
|
|
||||||
(schema.ExclusiveMaximum == nil) &&
|
|
||||||
(schema.Minimum == nil) &&
|
|
||||||
(schema.ExclusiveMinimum == nil) &&
|
|
||||||
(schema.MaxLength == nil) &&
|
|
||||||
(schema.MinLength == nil) &&
|
|
||||||
(schema.Pattern == nil) &&
|
|
||||||
(schema.AdditionalItems == nil) &&
|
|
||||||
(schema.Items == nil) &&
|
|
||||||
(schema.MaxItems == nil) &&
|
|
||||||
(schema.MinItems == nil) &&
|
|
||||||
(schema.UniqueItems == nil) &&
|
|
||||||
(schema.MaxProperties == nil) &&
|
|
||||||
(schema.MinProperties == nil) &&
|
|
||||||
(schema.Required == nil) &&
|
|
||||||
(schema.AdditionalProperties == nil) &&
|
|
||||||
(schema.Properties == nil) &&
|
|
||||||
(schema.PatternProperties == nil) &&
|
|
||||||
(schema.Dependencies == nil) &&
|
|
||||||
(schema.Enumeration == nil) &&
|
|
||||||
(schema.Type == nil) &&
|
|
||||||
(schema.AllOf == nil) &&
|
|
||||||
(schema.AnyOf == nil) &&
|
|
||||||
(schema.OneOf == nil) &&
|
|
||||||
(schema.Not == nil) &&
|
|
||||||
(schema.Definitions == nil) &&
|
|
||||||
(schema.Title == nil) &&
|
|
||||||
(schema.Description == nil) &&
|
|
||||||
(schema.Default == nil) &&
|
|
||||||
(schema.Format == nil) &&
|
|
||||||
(schema.Ref == nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsEqual returns true if two schemas are equal.
|
|
||||||
func (schema *Schema) IsEqual(schema2 *Schema) bool {
|
|
||||||
return schema.String() == schema2.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// SchemaOperation represents a function that can be applied to a Schema.
|
|
||||||
type SchemaOperation func(schema *Schema, context string)
|
|
||||||
|
|
||||||
// Applies a specified function to a Schema and all of the Schemas that it contains.
|
|
||||||
func (schema *Schema) applyToSchemas(operation SchemaOperation, context string) {
|
|
||||||
|
|
||||||
if schema.AdditionalItems != nil {
|
|
||||||
s := schema.AdditionalItems.Schema
|
|
||||||
if s != nil {
|
|
||||||
s.applyToSchemas(operation, "AdditionalItems")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.Items != nil {
|
|
||||||
if schema.Items.SchemaArray != nil {
|
|
||||||
for _, s := range *(schema.Items.SchemaArray) {
|
|
||||||
s.applyToSchemas(operation, "Items.SchemaArray")
|
|
||||||
}
|
|
||||||
} else if schema.Items.Schema != nil {
|
|
||||||
schema.Items.Schema.applyToSchemas(operation, "Items.Schema")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.AdditionalProperties != nil {
|
|
||||||
s := schema.AdditionalProperties.Schema
|
|
||||||
if s != nil {
|
|
||||||
s.applyToSchemas(operation, "AdditionalProperties")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.Properties != nil {
|
|
||||||
for _, pair := range *(schema.Properties) {
|
|
||||||
s := pair.Value
|
|
||||||
s.applyToSchemas(operation, "Properties")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.PatternProperties != nil {
|
|
||||||
for _, pair := range *(schema.PatternProperties) {
|
|
||||||
s := pair.Value
|
|
||||||
s.applyToSchemas(operation, "PatternProperties")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.Dependencies != nil {
|
|
||||||
for _, pair := range *(schema.Dependencies) {
|
|
||||||
schemaOrStringArray := pair.Value
|
|
||||||
s := schemaOrStringArray.Schema
|
|
||||||
if s != nil {
|
|
||||||
s.applyToSchemas(operation, "Dependencies")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.AllOf != nil {
|
|
||||||
for _, s := range *(schema.AllOf) {
|
|
||||||
s.applyToSchemas(operation, "AllOf")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.AnyOf != nil {
|
|
||||||
for _, s := range *(schema.AnyOf) {
|
|
||||||
s.applyToSchemas(operation, "AnyOf")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.OneOf != nil {
|
|
||||||
for _, s := range *(schema.OneOf) {
|
|
||||||
s.applyToSchemas(operation, "OneOf")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if schema.Not != nil {
|
|
||||||
schema.Not.applyToSchemas(operation, "Not")
|
|
||||||
}
|
|
||||||
|
|
||||||
if schema.Definitions != nil {
|
|
||||||
for _, pair := range *(schema.Definitions) {
|
|
||||||
s := pair.Value
|
|
||||||
s.applyToSchemas(operation, "Definitions")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
operation(schema, context)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyProperties copies all non-nil properties from the source Schema to the schema Schema.
|
|
||||||
func (schema *Schema) CopyProperties(source *Schema) {
|
|
||||||
if source.Schema != nil {
|
|
||||||
schema.Schema = source.Schema
|
|
||||||
}
|
|
||||||
if source.ID != nil {
|
|
||||||
schema.ID = source.ID
|
|
||||||
}
|
|
||||||
if source.MultipleOf != nil {
|
|
||||||
schema.MultipleOf = source.MultipleOf
|
|
||||||
}
|
|
||||||
if source.Maximum != nil {
|
|
||||||
schema.Maximum = source.Maximum
|
|
||||||
}
|
|
||||||
if source.ExclusiveMaximum != nil {
|
|
||||||
schema.ExclusiveMaximum = source.ExclusiveMaximum
|
|
||||||
}
|
|
||||||
if source.Minimum != nil {
|
|
||||||
schema.Minimum = source.Minimum
|
|
||||||
}
|
|
||||||
if source.ExclusiveMinimum != nil {
|
|
||||||
schema.ExclusiveMinimum = source.ExclusiveMinimum
|
|
||||||
}
|
|
||||||
if source.MaxLength != nil {
|
|
||||||
schema.MaxLength = source.MaxLength
|
|
||||||
}
|
|
||||||
if source.MinLength != nil {
|
|
||||||
schema.MinLength = source.MinLength
|
|
||||||
}
|
|
||||||
if source.Pattern != nil {
|
|
||||||
schema.Pattern = source.Pattern
|
|
||||||
}
|
|
||||||
if source.AdditionalItems != nil {
|
|
||||||
schema.AdditionalItems = source.AdditionalItems
|
|
||||||
}
|
|
||||||
if source.Items != nil {
|
|
||||||
schema.Items = source.Items
|
|
||||||
}
|
|
||||||
if source.MaxItems != nil {
|
|
||||||
schema.MaxItems = source.MaxItems
|
|
||||||
}
|
|
||||||
if source.MinItems != nil {
|
|
||||||
schema.MinItems = source.MinItems
|
|
||||||
}
|
|
||||||
if source.UniqueItems != nil {
|
|
||||||
schema.UniqueItems = source.UniqueItems
|
|
||||||
}
|
|
||||||
if source.MaxProperties != nil {
|
|
||||||
schema.MaxProperties = source.MaxProperties
|
|
||||||
}
|
|
||||||
if source.MinProperties != nil {
|
|
||||||
schema.MinProperties = source.MinProperties
|
|
||||||
}
|
|
||||||
if source.Required != nil {
|
|
||||||
schema.Required = source.Required
|
|
||||||
}
|
|
||||||
if source.AdditionalProperties != nil {
|
|
||||||
schema.AdditionalProperties = source.AdditionalProperties
|
|
||||||
}
|
|
||||||
if source.Properties != nil {
|
|
||||||
schema.Properties = source.Properties
|
|
||||||
}
|
|
||||||
if source.PatternProperties != nil {
|
|
||||||
schema.PatternProperties = source.PatternProperties
|
|
||||||
}
|
|
||||||
if source.Dependencies != nil {
|
|
||||||
schema.Dependencies = source.Dependencies
|
|
||||||
}
|
|
||||||
if source.Enumeration != nil {
|
|
||||||
schema.Enumeration = source.Enumeration
|
|
||||||
}
|
|
||||||
if source.Type != nil {
|
|
||||||
schema.Type = source.Type
|
|
||||||
}
|
|
||||||
if source.AllOf != nil {
|
|
||||||
schema.AllOf = source.AllOf
|
|
||||||
}
|
|
||||||
if source.AnyOf != nil {
|
|
||||||
schema.AnyOf = source.AnyOf
|
|
||||||
}
|
|
||||||
if source.OneOf != nil {
|
|
||||||
schema.OneOf = source.OneOf
|
|
||||||
}
|
|
||||||
if source.Not != nil {
|
|
||||||
schema.Not = source.Not
|
|
||||||
}
|
|
||||||
if source.Definitions != nil {
|
|
||||||
schema.Definitions = source.Definitions
|
|
||||||
}
|
|
||||||
if source.Title != nil {
|
|
||||||
schema.Title = source.Title
|
|
||||||
}
|
|
||||||
if source.Description != nil {
|
|
||||||
schema.Description = source.Description
|
|
||||||
}
|
|
||||||
if source.Default != nil {
|
|
||||||
schema.Default = source.Default
|
|
||||||
}
|
|
||||||
if source.Format != nil {
|
|
||||||
schema.Format = source.Format
|
|
||||||
}
|
|
||||||
if source.Ref != nil {
|
|
||||||
schema.Ref = source.Ref
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TypeIs returns true if the Type of a Schema includes the specified type
|
|
||||||
func (schema *Schema) TypeIs(typeName string) bool {
|
|
||||||
if schema.Type != nil {
|
|
||||||
// the schema Type is either a string or an array of strings
|
|
||||||
if schema.Type.String != nil {
|
|
||||||
return (*(schema.Type.String) == typeName)
|
|
||||||
} else if schema.Type.StringArray != nil {
|
|
||||||
for _, n := range *(schema.Type.StringArray) {
|
|
||||||
if n == typeName {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResolveRefs resolves "$ref" elements in a Schema and its children.
|
|
||||||
// But if a reference refers to an object type, is inside a oneOf, or contains a oneOf,
|
|
||||||
// the reference is kept and we expect downstream tools to separately model these
|
|
||||||
// referenced schemas.
|
|
||||||
func (schema *Schema) ResolveRefs() {
|
|
||||||
rootSchema := schema
|
|
||||||
count := 1
|
|
||||||
for count > 0 {
|
|
||||||
count = 0
|
|
||||||
schema.applyToSchemas(
|
|
||||||
func(schema *Schema, context string) {
|
|
||||||
if schema.Ref != nil {
|
|
||||||
resolvedRef, err := rootSchema.resolveJSONPointer(*(schema.Ref))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("%+v", err)
|
|
||||||
} else if resolvedRef.TypeIs("object") {
|
|
||||||
// don't substitute for objects, we'll model the referenced schema with a class
|
|
||||||
} else if context == "OneOf" {
|
|
||||||
// don't substitute for references inside oneOf declarations
|
|
||||||
} else if resolvedRef.OneOf != nil {
|
|
||||||
// don't substitute for references that contain oneOf declarations
|
|
||||||
} else if resolvedRef.AdditionalProperties != nil {
|
|
||||||
// don't substitute for references that look like objects
|
|
||||||
} else {
|
|
||||||
schema.Ref = nil
|
|
||||||
schema.CopyProperties(resolvedRef)
|
|
||||||
count++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// resolveJSONPointer resolves JSON pointers.
|
|
||||||
// This current implementation is very crude and custom for OpenAPI 2.0 schemas.
|
|
||||||
// It panics for any pointer that it is unable to resolve.
|
|
||||||
func (schema *Schema) resolveJSONPointer(ref string) (result *Schema, err error) {
|
|
||||||
parts := strings.Split(ref, "#")
|
|
||||||
if len(parts) == 2 {
|
|
||||||
documentName := parts[0] + "#"
|
|
||||||
if documentName == "#" && schema.ID != nil {
|
|
||||||
documentName = *(schema.ID)
|
|
||||||
}
|
|
||||||
path := parts[1]
|
|
||||||
document := schemas[documentName]
|
|
||||||
pathParts := strings.Split(path, "/")
|
|
||||||
|
|
||||||
// we currently do a very limited (hard-coded) resolution of certain paths and log errors for missed cases
|
|
||||||
if len(pathParts) == 1 {
|
|
||||||
return document, nil
|
|
||||||
} else if len(pathParts) == 3 {
|
|
||||||
switch pathParts[1] {
|
|
||||||
case "definitions":
|
|
||||||
dictionary := document.Definitions
|
|
||||||
for _, pair := range *dictionary {
|
|
||||||
if pair.Name == pathParts[2] {
|
|
||||||
result = pair.Value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "properties":
|
|
||||||
dictionary := document.Properties
|
|
||||||
for _, pair := range *dictionary {
|
|
||||||
if pair.Name == pathParts[2] {
|
|
||||||
result = pair.Value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if result == nil {
|
|
||||||
return nil, fmt.Errorf("unresolved pointer: %+v", ref)
|
|
||||||
}
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResolveAllOfs replaces "allOf" elements by merging their properties into the parent Schema.
|
|
||||||
func (schema *Schema) ResolveAllOfs() {
|
|
||||||
schema.applyToSchemas(
|
|
||||||
func(schema *Schema, context string) {
|
|
||||||
if schema.AllOf != nil {
|
|
||||||
for _, allOf := range *(schema.AllOf) {
|
|
||||||
schema.CopyProperties(allOf)
|
|
||||||
}
|
|
||||||
schema.AllOf = nil
|
|
||||||
}
|
|
||||||
}, "resolveAllOfs")
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResolveAnyOfs replaces all "anyOf" elements with "oneOf".
|
|
||||||
func (schema *Schema) ResolveAnyOfs() {
|
|
||||||
schema.applyToSchemas(
|
|
||||||
func(schema *Schema, context string) {
|
|
||||||
if schema.AnyOf != nil {
|
|
||||||
schema.OneOf = schema.AnyOf
|
|
||||||
schema.AnyOf = nil
|
|
||||||
}
|
|
||||||
}, "resolveAnyOfs")
|
|
||||||
}
|
|
||||||
|
|
||||||
// return a pointer to a copy of a passed-in string
|
|
||||||
func stringptr(input string) (output *string) {
|
|
||||||
return &input
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyOfficialSchemaProperty copies a named property from the official JSON Schema definition
|
|
||||||
func (schema *Schema) CopyOfficialSchemaProperty(name string) {
|
|
||||||
*schema.Properties = append(*schema.Properties,
|
|
||||||
NewNamedSchema(name,
|
|
||||||
&Schema{Ref: stringptr("http://json-schema.org/draft-04/schema#/properties/" + name)}))
|
|
||||||
}
|
|
||||||
|
|
||||||
// CopyOfficialSchemaProperties copies named properties from the official JSON Schema definition
|
|
||||||
func (schema *Schema) CopyOfficialSchemaProperties(names []string) {
|
|
||||||
for _, name := range names {
|
|
||||||
schema.CopyOfficialSchemaProperty(name)
|
|
||||||
}
|
|
||||||
}
|
|
442
vendor/github.com/googleapis/gnostic/jsonschema/reader.go
generated
vendored
442
vendor/github.com/googleapis/gnostic/jsonschema/reader.go
generated
vendored
@ -1,442 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
//go:generate go run generate-base.go
|
|
||||||
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
// This is a global map of all known Schemas.
|
|
||||||
// It is initialized when the first Schema is created and inserted.
|
|
||||||
var schemas map[string]*Schema
|
|
||||||
|
|
||||||
// NewBaseSchema builds a schema object from an embedded json representation.
|
|
||||||
func NewBaseSchema() (schema *Schema, err error) {
|
|
||||||
b, err := baseSchemaBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var node yaml.Node
|
|
||||||
err = yaml.Unmarshal(b, &node)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return NewSchemaFromObject(&node), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaFromFile reads a schema from a file.
|
|
||||||
// Currently this assumes that schemas are stored in the source distribution of this project.
|
|
||||||
func NewSchemaFromFile(filename string) (schema *Schema, err error) {
|
|
||||||
file, err := ioutil.ReadFile(filename)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var node yaml.Node
|
|
||||||
err = yaml.Unmarshal(file, &node)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return NewSchemaFromObject(&node), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewSchemaFromObject constructs a schema from a parsed JSON object.
|
|
||||||
// Due to the complexity of the schema representation, this is a
|
|
||||||
// custom reader and not the standard Go JSON reader (encoding/json).
|
|
||||||
func NewSchemaFromObject(jsonData *yaml.Node) *Schema {
|
|
||||||
switch jsonData.Kind {
|
|
||||||
case yaml.DocumentNode:
|
|
||||||
return NewSchemaFromObject(jsonData.Content[0])
|
|
||||||
case yaml.MappingNode:
|
|
||||||
schema := &Schema{}
|
|
||||||
|
|
||||||
for i := 0; i < len(jsonData.Content); i += 2 {
|
|
||||||
k := jsonData.Content[i].Value
|
|
||||||
v := jsonData.Content[i+1]
|
|
||||||
|
|
||||||
switch k {
|
|
||||||
case "$schema":
|
|
||||||
schema.Schema = schema.stringValue(v)
|
|
||||||
case "id":
|
|
||||||
schema.ID = schema.stringValue(v)
|
|
||||||
|
|
||||||
case "multipleOf":
|
|
||||||
schema.MultipleOf = schema.numberValue(v)
|
|
||||||
case "maximum":
|
|
||||||
schema.Maximum = schema.numberValue(v)
|
|
||||||
case "exclusiveMaximum":
|
|
||||||
schema.ExclusiveMaximum = schema.boolValue(v)
|
|
||||||
case "minimum":
|
|
||||||
schema.Minimum = schema.numberValue(v)
|
|
||||||
case "exclusiveMinimum":
|
|
||||||
schema.ExclusiveMinimum = schema.boolValue(v)
|
|
||||||
|
|
||||||
case "maxLength":
|
|
||||||
schema.MaxLength = schema.intValue(v)
|
|
||||||
case "minLength":
|
|
||||||
schema.MinLength = schema.intValue(v)
|
|
||||||
case "pattern":
|
|
||||||
schema.Pattern = schema.stringValue(v)
|
|
||||||
|
|
||||||
case "additionalItems":
|
|
||||||
schema.AdditionalItems = schema.schemaOrBooleanValue(v)
|
|
||||||
case "items":
|
|
||||||
schema.Items = schema.schemaOrSchemaArrayValue(v)
|
|
||||||
case "maxItems":
|
|
||||||
schema.MaxItems = schema.intValue(v)
|
|
||||||
case "minItems":
|
|
||||||
schema.MinItems = schema.intValue(v)
|
|
||||||
case "uniqueItems":
|
|
||||||
schema.UniqueItems = schema.boolValue(v)
|
|
||||||
|
|
||||||
case "maxProperties":
|
|
||||||
schema.MaxProperties = schema.intValue(v)
|
|
||||||
case "minProperties":
|
|
||||||
schema.MinProperties = schema.intValue(v)
|
|
||||||
case "required":
|
|
||||||
schema.Required = schema.arrayOfStringsValue(v)
|
|
||||||
case "additionalProperties":
|
|
||||||
schema.AdditionalProperties = schema.schemaOrBooleanValue(v)
|
|
||||||
case "properties":
|
|
||||||
schema.Properties = schema.mapOfSchemasValue(v)
|
|
||||||
case "patternProperties":
|
|
||||||
schema.PatternProperties = schema.mapOfSchemasValue(v)
|
|
||||||
case "dependencies":
|
|
||||||
schema.Dependencies = schema.mapOfSchemasOrStringArraysValue(v)
|
|
||||||
|
|
||||||
case "enum":
|
|
||||||
schema.Enumeration = schema.arrayOfEnumValuesValue(v)
|
|
||||||
|
|
||||||
case "type":
|
|
||||||
schema.Type = schema.stringOrStringArrayValue(v)
|
|
||||||
case "allOf":
|
|
||||||
schema.AllOf = schema.arrayOfSchemasValue(v)
|
|
||||||
case "anyOf":
|
|
||||||
schema.AnyOf = schema.arrayOfSchemasValue(v)
|
|
||||||
case "oneOf":
|
|
||||||
schema.OneOf = schema.arrayOfSchemasValue(v)
|
|
||||||
case "not":
|
|
||||||
schema.Not = NewSchemaFromObject(v)
|
|
||||||
case "definitions":
|
|
||||||
schema.Definitions = schema.mapOfSchemasValue(v)
|
|
||||||
|
|
||||||
case "title":
|
|
||||||
schema.Title = schema.stringValue(v)
|
|
||||||
case "description":
|
|
||||||
schema.Description = schema.stringValue(v)
|
|
||||||
|
|
||||||
case "default":
|
|
||||||
schema.Default = v
|
|
||||||
|
|
||||||
case "format":
|
|
||||||
schema.Format = schema.stringValue(v)
|
|
||||||
case "$ref":
|
|
||||||
schema.Ref = schema.stringValue(v)
|
|
||||||
default:
|
|
||||||
fmt.Printf("UNSUPPORTED (%s)\n", k)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// insert schema in global map
|
|
||||||
if schema.ID != nil {
|
|
||||||
if schemas == nil {
|
|
||||||
schemas = make(map[string]*Schema, 0)
|
|
||||||
}
|
|
||||||
schemas[*(schema.ID)] = schema
|
|
||||||
}
|
|
||||||
return schema
|
|
||||||
|
|
||||||
default:
|
|
||||||
fmt.Printf("schemaValue: unexpected node %+v\n", jsonData)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// BUILDERS
|
|
||||||
// The following methods build elements of Schemas from interface{} values.
|
|
||||||
// Each returns nil if it is unable to build the desired element.
|
|
||||||
//
|
|
||||||
|
|
||||||
// Gets the string value of an interface{} value if possible.
|
|
||||||
func (schema *Schema) stringValue(v *yaml.Node) *string {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
return &v.Value
|
|
||||||
default:
|
|
||||||
fmt.Printf("stringValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the numeric value of an interface{} value if possible.
|
|
||||||
func (schema *Schema) numberValue(v *yaml.Node) *SchemaNumber {
|
|
||||||
number := &SchemaNumber{}
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch v.Tag {
|
|
||||||
case "!!float":
|
|
||||||
v2, _ := strconv.ParseFloat(v.Value, 64)
|
|
||||||
number.Float = &v2
|
|
||||||
return number
|
|
||||||
case "!!int":
|
|
||||||
v2, _ := strconv.ParseInt(v.Value, 10, 64)
|
|
||||||
number.Integer = &v2
|
|
||||||
return number
|
|
||||||
default:
|
|
||||||
fmt.Printf("stringValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("stringValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the integer value of an interface{} value if possible.
|
|
||||||
func (schema *Schema) intValue(v *yaml.Node) *int64 {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch v.Tag {
|
|
||||||
case "!!float":
|
|
||||||
v2, _ := strconv.ParseFloat(v.Value, 64)
|
|
||||||
v3 := int64(v2)
|
|
||||||
return &v3
|
|
||||||
case "!!int":
|
|
||||||
v2, _ := strconv.ParseInt(v.Value, 10, 64)
|
|
||||||
return &v2
|
|
||||||
default:
|
|
||||||
fmt.Printf("intValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("intValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets the bool value of an interface{} value if possible.
|
|
||||||
func (schema *Schema) boolValue(v *yaml.Node) *bool {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch v.Tag {
|
|
||||||
case "!!bool":
|
|
||||||
v2, _ := strconv.ParseBool(v.Value)
|
|
||||||
return &v2
|
|
||||||
default:
|
|
||||||
fmt.Printf("boolValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("boolValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a map of Schemas from an interface{} value if possible.
|
|
||||||
func (schema *Schema) mapOfSchemasValue(v *yaml.Node) *[]*NamedSchema {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.MappingNode:
|
|
||||||
m := make([]*NamedSchema, 0)
|
|
||||||
for i := 0; i < len(v.Content); i += 2 {
|
|
||||||
k2 := v.Content[i].Value
|
|
||||||
v2 := v.Content[i+1]
|
|
||||||
pair := &NamedSchema{Name: k2, Value: NewSchemaFromObject(v2)}
|
|
||||||
m = append(m, pair)
|
|
||||||
}
|
|
||||||
return &m
|
|
||||||
default:
|
|
||||||
fmt.Printf("mapOfSchemasValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets an array of Schemas from an interface{} value if possible.
|
|
||||||
func (schema *Schema) arrayOfSchemasValue(v *yaml.Node) *[]*Schema {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
m := make([]*Schema, 0)
|
|
||||||
for _, v2 := range v.Content {
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.MappingNode:
|
|
||||||
s := NewSchemaFromObject(v2)
|
|
||||||
m = append(m, s)
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfSchemasValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return &m
|
|
||||||
case yaml.MappingNode:
|
|
||||||
m := make([]*Schema, 0)
|
|
||||||
s := NewSchemaFromObject(v)
|
|
||||||
m = append(m, s)
|
|
||||||
return &m
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfSchemasValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a Schema or an array of Schemas from an interface{} value if possible.
|
|
||||||
func (schema *Schema) schemaOrSchemaArrayValue(v *yaml.Node) *SchemaOrSchemaArray {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
m := make([]*Schema, 0)
|
|
||||||
for _, v2 := range v.Content {
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.MappingNode:
|
|
||||||
s := NewSchemaFromObject(v2)
|
|
||||||
m = append(m, s)
|
|
||||||
default:
|
|
||||||
fmt.Printf("schemaOrSchemaArrayValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return &SchemaOrSchemaArray{SchemaArray: &m}
|
|
||||||
case yaml.MappingNode:
|
|
||||||
s := NewSchemaFromObject(v)
|
|
||||||
return &SchemaOrSchemaArray{Schema: s}
|
|
||||||
default:
|
|
||||||
fmt.Printf("schemaOrSchemaArrayValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets an array of strings from an interface{} value if possible.
|
|
||||||
func (schema *Schema) arrayOfStringsValue(v *yaml.Node) *[]string {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
a := []string{v.Value}
|
|
||||||
return &a
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
a := make([]string, 0)
|
|
||||||
for _, v2 := range v.Content {
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
a = append(a, v2.Value)
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return &a
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a string or an array of strings from an interface{} value if possible.
|
|
||||||
func (schema *Schema) stringOrStringArrayValue(v *yaml.Node) *StringOrStringArray {
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
s := &StringOrStringArray{}
|
|
||||||
s.String = &v.Value
|
|
||||||
return s
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
a := make([]string, 0)
|
|
||||||
for _, v2 := range v.Content {
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
a = append(a, v2.Value)
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s := &StringOrStringArray{}
|
|
||||||
s.StringArray = &a
|
|
||||||
return s
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets an array of enum values from an interface{} value if possible.
|
|
||||||
func (schema *Schema) arrayOfEnumValuesValue(v *yaml.Node) *[]SchemaEnumValue {
|
|
||||||
a := make([]SchemaEnumValue, 0)
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
for _, v2 := range v.Content {
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
switch v2.Tag {
|
|
||||||
case "!!str":
|
|
||||||
a = append(a, SchemaEnumValue{String: &v2.Value})
|
|
||||||
case "!!bool":
|
|
||||||
v3, _ := strconv.ParseBool(v2.Value)
|
|
||||||
a = append(a, SchemaEnumValue{Bool: &v3})
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfEnumValuesValue: unexpected type %s\n", v2.Tag)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfEnumValuesValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("arrayOfEnumValuesValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return &a
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a map of schemas or string arrays from an interface{} value if possible.
|
|
||||||
func (schema *Schema) mapOfSchemasOrStringArraysValue(v *yaml.Node) *[]*NamedSchemaOrStringArray {
|
|
||||||
m := make([]*NamedSchemaOrStringArray, 0)
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.MappingNode:
|
|
||||||
for i := 0; i < len(v.Content); i += 2 {
|
|
||||||
k2 := v.Content[i].Value
|
|
||||||
v2 := v.Content[i+1]
|
|
||||||
switch v2.Kind {
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
a := make([]string, 0)
|
|
||||||
for _, v3 := range v2.Content {
|
|
||||||
switch v3.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
a = append(a, v3.Value)
|
|
||||||
default:
|
|
||||||
fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
s := &SchemaOrStringArray{}
|
|
||||||
s.StringArray = &a
|
|
||||||
pair := &NamedSchemaOrStringArray{Name: k2, Value: s}
|
|
||||||
m = append(m, pair)
|
|
||||||
default:
|
|
||||||
fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return &m
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gets a schema or a boolean value from an interface{} value if possible.
|
|
||||||
func (schema *Schema) schemaOrBooleanValue(v *yaml.Node) *SchemaOrBoolean {
|
|
||||||
schemaOrBoolean := &SchemaOrBoolean{}
|
|
||||||
switch v.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
v2, _ := strconv.ParseBool(v.Value)
|
|
||||||
schemaOrBoolean.Boolean = &v2
|
|
||||||
case yaml.MappingNode:
|
|
||||||
schemaOrBoolean.Schema = NewSchemaFromObject(v)
|
|
||||||
default:
|
|
||||||
fmt.Printf("schemaOrBooleanValue: unexpected node %+v\n", v)
|
|
||||||
}
|
|
||||||
return schemaOrBoolean
|
|
||||||
}
|
|
150
vendor/github.com/googleapis/gnostic/jsonschema/schema.json
generated
vendored
150
vendor/github.com/googleapis/gnostic/jsonschema/schema.json
generated
vendored
@ -1,150 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "http://json-schema.org/draft-04/schema#",
|
|
||||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
|
||||||
"description": "Core schema meta-schema",
|
|
||||||
"definitions": {
|
|
||||||
"schemaArray": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": { "$ref": "#" }
|
|
||||||
},
|
|
||||||
"positiveInteger": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0
|
|
||||||
},
|
|
||||||
"positiveIntegerDefault0": {
|
|
||||||
"allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
|
|
||||||
},
|
|
||||||
"simpleTypes": {
|
|
||||||
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
|
|
||||||
},
|
|
||||||
"stringArray": {
|
|
||||||
"type": "array",
|
|
||||||
"items": { "type": "string" },
|
|
||||||
"minItems": 1,
|
|
||||||
"uniqueItems": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"$schema": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uri"
|
|
||||||
},
|
|
||||||
"title": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"default": {},
|
|
||||||
"multipleOf": {
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0,
|
|
||||||
"exclusiveMinimum": true
|
|
||||||
},
|
|
||||||
"maximum": {
|
|
||||||
"type": "number"
|
|
||||||
},
|
|
||||||
"exclusiveMaximum": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"minimum": {
|
|
||||||
"type": "number"
|
|
||||||
},
|
|
||||||
"exclusiveMinimum": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"maxLength": { "$ref": "#/definitions/positiveInteger" },
|
|
||||||
"minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
||||||
"pattern": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "regex"
|
|
||||||
},
|
|
||||||
"additionalItems": {
|
|
||||||
"anyOf": [
|
|
||||||
{ "type": "boolean" },
|
|
||||||
{ "$ref": "#" }
|
|
||||||
],
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
"anyOf": [
|
|
||||||
{ "$ref": "#" },
|
|
||||||
{ "$ref": "#/definitions/schemaArray" }
|
|
||||||
],
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"maxItems": { "$ref": "#/definitions/positiveInteger" },
|
|
||||||
"minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
||||||
"uniqueItems": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"maxProperties": { "$ref": "#/definitions/positiveInteger" },
|
|
||||||
"minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
|
||||||
"required": { "$ref": "#/definitions/stringArray" },
|
|
||||||
"additionalProperties": {
|
|
||||||
"anyOf": [
|
|
||||||
{ "type": "boolean" },
|
|
||||||
{ "$ref": "#" }
|
|
||||||
],
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"definitions": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": { "$ref": "#" },
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"properties": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": { "$ref": "#" },
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"patternProperties": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": { "$ref": "#" },
|
|
||||||
"default": {}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": {
|
|
||||||
"anyOf": [
|
|
||||||
{ "$ref": "#" },
|
|
||||||
{ "$ref": "#/definitions/stringArray" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enum": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"uniqueItems": true
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
"anyOf": [
|
|
||||||
{ "$ref": "#/definitions/simpleTypes" },
|
|
||||||
{
|
|
||||||
"type": "array",
|
|
||||||
"items": { "$ref": "#/definitions/simpleTypes" },
|
|
||||||
"minItems": 1,
|
|
||||||
"uniqueItems": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"allOf": { "$ref": "#/definitions/schemaArray" },
|
|
||||||
"anyOf": { "$ref": "#/definitions/schemaArray" },
|
|
||||||
"oneOf": { "$ref": "#/definitions/schemaArray" },
|
|
||||||
"not": { "$ref": "#" }
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"exclusiveMaximum": [ "maximum" ],
|
|
||||||
"exclusiveMinimum": [ "minimum" ]
|
|
||||||
},
|
|
||||||
"default": {}
|
|
||||||
}
|
|
369
vendor/github.com/googleapis/gnostic/jsonschema/writer.go
generated
vendored
369
vendor/github.com/googleapis/gnostic/jsonschema/writer.go
generated
vendored
@ -1,369 +0,0 @@
|
|||||||
// Copyright 2017 Google LLC. All Rights Reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package jsonschema
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
const indentation = " "
|
|
||||||
|
|
||||||
func renderMappingNode(node *yaml.Node, indent string) (result string) {
|
|
||||||
result = "{\n"
|
|
||||||
innerIndent := indent + indentation
|
|
||||||
for i := 0; i < len(node.Content); i += 2 {
|
|
||||||
// first print the key
|
|
||||||
key := node.Content[i].Value
|
|
||||||
result += fmt.Sprintf("%s\"%+v\": ", innerIndent, key)
|
|
||||||
// then the value
|
|
||||||
value := node.Content[i+1]
|
|
||||||
switch value.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
result += "\"" + value.Value + "\""
|
|
||||||
case yaml.MappingNode:
|
|
||||||
result += renderMappingNode(value, innerIndent)
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
result += renderSequenceNode(value, innerIndent)
|
|
||||||
default:
|
|
||||||
result += fmt.Sprintf("???MapItem(Key:%+v, Value:%T)", value, value)
|
|
||||||
}
|
|
||||||
if i < len(node.Content)-2 {
|
|
||||||
result += ","
|
|
||||||
}
|
|
||||||
result += "\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
result += indent + "}"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
func renderSequenceNode(node *yaml.Node, indent string) (result string) {
|
|
||||||
result = "[\n"
|
|
||||||
innerIndent := indent + indentation
|
|
||||||
for i := 0; i < len(node.Content); i++ {
|
|
||||||
item := node.Content[i]
|
|
||||||
switch item.Kind {
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
result += innerIndent + "\"" + item.Value + "\""
|
|
||||||
case yaml.MappingNode:
|
|
||||||
result += innerIndent + renderMappingNode(item, innerIndent) + ""
|
|
||||||
default:
|
|
||||||
result += innerIndent + fmt.Sprintf("???ArrayItem(%+v)", item)
|
|
||||||
}
|
|
||||||
if i < len(node.Content)-1 {
|
|
||||||
result += ","
|
|
||||||
}
|
|
||||||
result += "\n"
|
|
||||||
}
|
|
||||||
result += indent + "]"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
func renderStringArray(array []string, indent string) (result string) {
|
|
||||||
result = "[\n"
|
|
||||||
innerIndent := indent + indentation
|
|
||||||
for i, item := range array {
|
|
||||||
result += innerIndent + "\"" + item + "\""
|
|
||||||
if i < len(array)-1 {
|
|
||||||
result += ","
|
|
||||||
}
|
|
||||||
result += "\n"
|
|
||||||
}
|
|
||||||
result += indent + "]"
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render renders a yaml.Node as JSON
|
|
||||||
func Render(node *yaml.Node) string {
|
|
||||||
if node.Kind == yaml.DocumentNode {
|
|
||||||
if len(node.Content) == 1 {
|
|
||||||
return Render(node.Content[0])
|
|
||||||
}
|
|
||||||
} else if node.Kind == yaml.MappingNode {
|
|
||||||
return renderMappingNode(node, "") + "\n"
|
|
||||||
} else if node.Kind == yaml.SequenceNode {
|
|
||||||
return renderSequenceNode(node, "") + "\n"
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *SchemaNumber) nodeValue() *yaml.Node {
|
|
||||||
if object.Integer != nil {
|
|
||||||
return nodeForInt64(*object.Integer)
|
|
||||||
} else if object.Float != nil {
|
|
||||||
return nodeForFloat64(*object.Float)
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *SchemaOrBoolean) nodeValue() *yaml.Node {
|
|
||||||
if object.Schema != nil {
|
|
||||||
return object.Schema.nodeValue()
|
|
||||||
} else if object.Boolean != nil {
|
|
||||||
return nodeForBoolean(*object.Boolean)
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForStringArray(array []string) *yaml.Node {
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
for _, item := range array {
|
|
||||||
content = append(content, nodeForString(item))
|
|
||||||
}
|
|
||||||
return nodeForSequence(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForSchemaArray(array []*Schema) *yaml.Node {
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
for _, item := range array {
|
|
||||||
content = append(content, item.nodeValue())
|
|
||||||
}
|
|
||||||
return nodeForSequence(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *StringOrStringArray) nodeValue() *yaml.Node {
|
|
||||||
if object.String != nil {
|
|
||||||
return nodeForString(*object.String)
|
|
||||||
} else if object.StringArray != nil {
|
|
||||||
return nodeForStringArray(*(object.StringArray))
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *SchemaOrStringArray) nodeValue() *yaml.Node {
|
|
||||||
if object.Schema != nil {
|
|
||||||
return object.Schema.nodeValue()
|
|
||||||
} else if object.StringArray != nil {
|
|
||||||
return nodeForStringArray(*(object.StringArray))
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *SchemaOrSchemaArray) nodeValue() *yaml.Node {
|
|
||||||
if object.Schema != nil {
|
|
||||||
return object.Schema.nodeValue()
|
|
||||||
} else if object.SchemaArray != nil {
|
|
||||||
return nodeForSchemaArray(*(object.SchemaArray))
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (object *SchemaEnumValue) nodeValue() *yaml.Node {
|
|
||||||
if object.String != nil {
|
|
||||||
return nodeForString(*object.String)
|
|
||||||
} else if object.Bool != nil {
|
|
||||||
return nodeForBoolean(*object.Bool)
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForNamedSchemaArray(array *[]*NamedSchema) *yaml.Node {
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
for _, pair := range *(array) {
|
|
||||||
content = appendPair(content, pair.Name, pair.Value.nodeValue())
|
|
||||||
}
|
|
||||||
return nodeForMapping(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForNamedSchemaOrStringArray(array *[]*NamedSchemaOrStringArray) *yaml.Node {
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
for _, pair := range *(array) {
|
|
||||||
content = appendPair(content, pair.Name, pair.Value.nodeValue())
|
|
||||||
}
|
|
||||||
return nodeForMapping(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForSchemaEnumArray(array *[]SchemaEnumValue) *yaml.Node {
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
for _, item := range *array {
|
|
||||||
content = append(content, item.nodeValue())
|
|
||||||
}
|
|
||||||
return nodeForSequence(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForMapping(content []*yaml.Node) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.MappingNode,
|
|
||||||
Content: content,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForSequence(content []*yaml.Node) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.SequenceNode,
|
|
||||||
Content: content,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForString(value string) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!str",
|
|
||||||
Value: value,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForBoolean(value bool) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!bool",
|
|
||||||
Value: fmt.Sprintf("%t", value),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForInt64(value int64) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!int",
|
|
||||||
Value: fmt.Sprintf("%d", value),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func nodeForFloat64(value float64) *yaml.Node {
|
|
||||||
return &yaml.Node{
|
|
||||||
Kind: yaml.ScalarNode,
|
|
||||||
Tag: "!!float",
|
|
||||||
Value: fmt.Sprintf("%f", value),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendPair(nodes []*yaml.Node, name string, value *yaml.Node) []*yaml.Node {
|
|
||||||
nodes = append(nodes, nodeForString(name))
|
|
||||||
nodes = append(nodes, value)
|
|
||||||
return nodes
|
|
||||||
}
|
|
||||||
|
|
||||||
func (schema *Schema) nodeValue() *yaml.Node {
|
|
||||||
n := &yaml.Node{Kind: yaml.MappingNode}
|
|
||||||
content := make([]*yaml.Node, 0)
|
|
||||||
if schema.Title != nil {
|
|
||||||
content = appendPair(content, "title", nodeForString(*schema.Title))
|
|
||||||
}
|
|
||||||
if schema.ID != nil {
|
|
||||||
content = appendPair(content, "id", nodeForString(*schema.ID))
|
|
||||||
}
|
|
||||||
if schema.Schema != nil {
|
|
||||||
content = appendPair(content, "$schema", nodeForString(*schema.Schema))
|
|
||||||
}
|
|
||||||
if schema.Type != nil {
|
|
||||||
content = appendPair(content, "type", schema.Type.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.Items != nil {
|
|
||||||
content = appendPair(content, "items", schema.Items.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.Description != nil {
|
|
||||||
content = appendPair(content, "description", nodeForString(*schema.Description))
|
|
||||||
}
|
|
||||||
if schema.Required != nil {
|
|
||||||
content = appendPair(content, "required", nodeForStringArray(*schema.Required))
|
|
||||||
}
|
|
||||||
if schema.AdditionalProperties != nil {
|
|
||||||
content = appendPair(content, "additionalProperties", schema.AdditionalProperties.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.PatternProperties != nil {
|
|
||||||
content = appendPair(content, "patternProperties", nodeForNamedSchemaArray(schema.PatternProperties))
|
|
||||||
}
|
|
||||||
if schema.Properties != nil {
|
|
||||||
content = appendPair(content, "properties", nodeForNamedSchemaArray(schema.Properties))
|
|
||||||
}
|
|
||||||
if schema.Dependencies != nil {
|
|
||||||
content = appendPair(content, "dependencies", nodeForNamedSchemaOrStringArray(schema.Dependencies))
|
|
||||||
}
|
|
||||||
if schema.Ref != nil {
|
|
||||||
content = appendPair(content, "$ref", nodeForString(*schema.Ref))
|
|
||||||
}
|
|
||||||
if schema.MultipleOf != nil {
|
|
||||||
content = appendPair(content, "multipleOf", schema.MultipleOf.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.Maximum != nil {
|
|
||||||
content = appendPair(content, "maximum", schema.Maximum.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.ExclusiveMaximum != nil {
|
|
||||||
content = appendPair(content, "exclusiveMaximum", nodeForBoolean(*schema.ExclusiveMaximum))
|
|
||||||
}
|
|
||||||
if schema.Minimum != nil {
|
|
||||||
content = appendPair(content, "minimum", schema.Minimum.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.ExclusiveMinimum != nil {
|
|
||||||
content = appendPair(content, "exclusiveMinimum", nodeForBoolean(*schema.ExclusiveMinimum))
|
|
||||||
}
|
|
||||||
if schema.MaxLength != nil {
|
|
||||||
content = appendPair(content, "maxLength", nodeForInt64(*schema.MaxLength))
|
|
||||||
}
|
|
||||||
if schema.MinLength != nil {
|
|
||||||
content = appendPair(content, "minLength", nodeForInt64(*schema.MinLength))
|
|
||||||
}
|
|
||||||
if schema.Pattern != nil {
|
|
||||||
content = appendPair(content, "pattern", nodeForString(*schema.Pattern))
|
|
||||||
}
|
|
||||||
if schema.AdditionalItems != nil {
|
|
||||||
content = appendPair(content, "additionalItems", schema.AdditionalItems.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.MaxItems != nil {
|
|
||||||
content = appendPair(content, "maxItems", nodeForInt64(*schema.MaxItems))
|
|
||||||
}
|
|
||||||
if schema.MinItems != nil {
|
|
||||||
content = appendPair(content, "minItems", nodeForInt64(*schema.MinItems))
|
|
||||||
}
|
|
||||||
if schema.UniqueItems != nil {
|
|
||||||
content = appendPair(content, "uniqueItems", nodeForBoolean(*schema.UniqueItems))
|
|
||||||
}
|
|
||||||
if schema.MaxProperties != nil {
|
|
||||||
content = appendPair(content, "maxProperties", nodeForInt64(*schema.MaxProperties))
|
|
||||||
}
|
|
||||||
if schema.MinProperties != nil {
|
|
||||||
content = appendPair(content, "minProperties", nodeForInt64(*schema.MinProperties))
|
|
||||||
}
|
|
||||||
if schema.Enumeration != nil {
|
|
||||||
content = appendPair(content, "enum", nodeForSchemaEnumArray(schema.Enumeration))
|
|
||||||
}
|
|
||||||
if schema.AllOf != nil {
|
|
||||||
content = appendPair(content, "allOf", nodeForSchemaArray(*schema.AllOf))
|
|
||||||
}
|
|
||||||
if schema.AnyOf != nil {
|
|
||||||
content = appendPair(content, "anyOf", nodeForSchemaArray(*schema.AnyOf))
|
|
||||||
}
|
|
||||||
if schema.OneOf != nil {
|
|
||||||
content = appendPair(content, "oneOf", nodeForSchemaArray(*schema.OneOf))
|
|
||||||
}
|
|
||||||
if schema.Not != nil {
|
|
||||||
content = appendPair(content, "not", schema.Not.nodeValue())
|
|
||||||
}
|
|
||||||
if schema.Definitions != nil {
|
|
||||||
content = appendPair(content, "definitions", nodeForNamedSchemaArray(schema.Definitions))
|
|
||||||
}
|
|
||||||
if schema.Default != nil {
|
|
||||||
// m = append(m, yaml.MapItem{Key: "default", Value: *schema.Default})
|
|
||||||
}
|
|
||||||
if schema.Format != nil {
|
|
||||||
content = appendPair(content, "format", nodeForString(*schema.Format))
|
|
||||||
}
|
|
||||||
n.Content = content
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSONString returns a json representation of a schema.
|
|
||||||
func (schema *Schema) JSONString() string {
|
|
||||||
node := schema.nodeValue()
|
|
||||||
return Render(node)
|
|
||||||
}
|
|
38
vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go
generated
vendored
Normal file
38
vendor/golang.org/x/net/internal/socket/sys_zos_s390x.go
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package socket
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func syscall_syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
func syscall_syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)
|
||||||
|
|
||||||
|
func probeProtocolStack() int {
|
||||||
|
return 4 // sizeof(int) on GOOS=zos GOARCH=s390x
|
||||||
|
}
|
||||||
|
|
||||||
|
func getsockopt(s uintptr, level, name int, b []byte) (int, error) {
|
||||||
|
l := uint32(len(b))
|
||||||
|
_, _, errno := syscall_syscall6(syscall.SYS_GETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(unsafe.Pointer(&l)), 0)
|
||||||
|
return int(l), errnoErr(errno)
|
||||||
|
}
|
||||||
|
|
||||||
|
func setsockopt(s uintptr, level, name int, b []byte) error {
|
||||||
|
_, _, errno := syscall_syscall6(syscall.SYS_SETSOCKOPT, s, uintptr(level), uintptr(name), uintptr(unsafe.Pointer(&b[0])), uintptr(len(b)), 0)
|
||||||
|
return errnoErr(errno)
|
||||||
|
}
|
||||||
|
|
||||||
|
func recvmsg(s uintptr, h *msghdr, flags int) (int, error) {
|
||||||
|
n, _, errno := syscall_syscall(syscall.SYS___RECVMSG_A, s, uintptr(unsafe.Pointer(h)), uintptr(flags))
|
||||||
|
return int(n), errnoErr(errno)
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendmsg(s uintptr, h *msghdr, flags int) (int, error) {
|
||||||
|
n, _, errno := syscall_syscall(syscall.SYS___SENDMSG_A, s, uintptr(unsafe.Pointer(h)), uintptr(flags))
|
||||||
|
return int(n), errnoErr(errno)
|
||||||
|
}
|
11
vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s
generated
vendored
Normal file
11
vendor/golang.org/x/net/internal/socket/sys_zos_s390x.s
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
TEXT ·syscall_syscall(SB),NOSPLIT,$0
|
||||||
|
JMP syscall·_syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·syscall_syscall6(SB),NOSPLIT,$0
|
||||||
|
JMP syscall·_syscall6(SB)
|
50
vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go
generated
vendored
Normal file
50
vendor/golang.org/x/net/internal/socket/zsys_openbsd_mips64.go
generated
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||||
|
// cgo -godefs defs_openbsd.go
|
||||||
|
|
||||||
|
package socket
|
||||||
|
|
||||||
|
type iovec struct {
|
||||||
|
Base *byte
|
||||||
|
Len uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type msghdr struct {
|
||||||
|
Name *byte
|
||||||
|
Namelen uint32
|
||||||
|
Iov *iovec
|
||||||
|
Iovlen uint32
|
||||||
|
Control *byte
|
||||||
|
Controllen uint32
|
||||||
|
Flags int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type cmsghdr struct {
|
||||||
|
Len uint32
|
||||||
|
Level int32
|
||||||
|
Type int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type sockaddrInet struct {
|
||||||
|
Len uint8
|
||||||
|
Family uint8
|
||||||
|
Port uint16
|
||||||
|
Addr [4]byte /* in_addr */
|
||||||
|
Zero [8]int8
|
||||||
|
}
|
||||||
|
|
||||||
|
type sockaddrInet6 struct {
|
||||||
|
Len uint8
|
||||||
|
Family uint8
|
||||||
|
Port uint16
|
||||||
|
Flowinfo uint32
|
||||||
|
Addr [16]byte /* in6_addr */
|
||||||
|
Scope_id uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
sizeofIovec = 0x10
|
||||||
|
sizeofMsghdr = 0x30
|
||||||
|
|
||||||
|
sizeofSockaddrInet = 0x10
|
||||||
|
sizeofSockaddrInet6 = 0x1c
|
||||||
|
)
|
32
vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go
generated
vendored
Normal file
32
vendor/golang.org/x/net/internal/socket/zsys_zos_s390x.go
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package socket
|
||||||
|
|
||||||
|
type iovec struct {
|
||||||
|
Base *byte
|
||||||
|
Len uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
type msghdr struct {
|
||||||
|
Name *byte
|
||||||
|
Iov *iovec
|
||||||
|
Control *byte
|
||||||
|
Flags int32
|
||||||
|
Namelen uint32
|
||||||
|
Iovlen int32
|
||||||
|
Controllen uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type cmsghdr struct {
|
||||||
|
Len int32
|
||||||
|
Level int32
|
||||||
|
Type int32
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
sizeofCmsghdr = 12
|
||||||
|
sizeofSockaddrInet = 16
|
||||||
|
sizeofSockaddrInet6 = 28
|
||||||
|
)
|
86
vendor/golang.org/x/net/ipv4/control_zos.go
generated
vendored
Normal file
86
vendor/golang.org/x/net/ipv4/control_zos.go
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package ipv4
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"golang.org/x/net/internal/iana"
|
||||||
|
"golang.org/x/net/internal/socket"
|
||||||
|
)
|
||||||
|
|
||||||
|
func marshalPacketInfo(b []byte, cm *ControlMessage) []byte {
|
||||||
|
m := socket.ControlMessage(b)
|
||||||
|
m.MarshalHeader(iana.ProtocolIP, sysIP_PKTINFO, sizeofInetPktinfo)
|
||||||
|
if cm != nil {
|
||||||
|
pi := (*inetPktinfo)(unsafe.Pointer(&m.Data(sizeofInetPktinfo)[0]))
|
||||||
|
if ip := cm.Src.To4(); ip != nil {
|
||||||
|
copy(pi.Addr[:], ip)
|
||||||
|
}
|
||||||
|
if cm.IfIndex > 0 {
|
||||||
|
pi.setIfindex(cm.IfIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m.Next(sizeofInetPktinfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parsePacketInfo(cm *ControlMessage, b []byte) {
|
||||||
|
pi := (*inetPktinfo)(unsafe.Pointer(&b[0]))
|
||||||
|
cm.IfIndex = int(pi.Ifindex)
|
||||||
|
if len(cm.Dst) < net.IPv4len {
|
||||||
|
cm.Dst = make(net.IP, net.IPv4len)
|
||||||
|
}
|
||||||
|
copy(cm.Dst, pi.Addr[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
func setControlMessage(c *socket.Conn, opt *rawOpt, cf ControlFlags, on bool) error {
|
||||||
|
opt.Lock()
|
||||||
|
defer opt.Unlock()
|
||||||
|
if so, ok := sockOpts[ssoReceiveTTL]; ok && cf&FlagTTL != 0 {
|
||||||
|
if err := so.SetInt(c, boolint(on)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if on {
|
||||||
|
opt.set(FlagTTL)
|
||||||
|
} else {
|
||||||
|
opt.clear(FlagTTL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if so, ok := sockOpts[ssoPacketInfo]; ok {
|
||||||
|
if cf&(FlagSrc|FlagDst|FlagInterface) != 0 {
|
||||||
|
if err := so.SetInt(c, boolint(on)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if on {
|
||||||
|
opt.set(cf & (FlagSrc | FlagDst | FlagInterface))
|
||||||
|
} else {
|
||||||
|
opt.clear(cf & (FlagSrc | FlagDst | FlagInterface))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if so, ok := sockOpts[ssoReceiveDst]; ok && cf&FlagDst != 0 {
|
||||||
|
if err := so.SetInt(c, boolint(on)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if on {
|
||||||
|
opt.set(FlagDst)
|
||||||
|
} else {
|
||||||
|
opt.clear(FlagDst)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if so, ok := sockOpts[ssoReceiveInterface]; ok && cf&FlagInterface != 0 {
|
||||||
|
if err := so.SetInt(c, boolint(on)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if on {
|
||||||
|
opt.set(FlagInterface)
|
||||||
|
} else {
|
||||||
|
opt.clear(FlagInterface)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
55
vendor/golang.org/x/net/ipv4/sys_zos.go
generated
vendored
Normal file
55
vendor/golang.org/x/net/ipv4/sys_zos.go
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package ipv4
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"golang.org/x/net/internal/iana"
|
||||||
|
"golang.org/x/net/internal/socket"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ctlOpts = [ctlMax]ctlOpt{
|
||||||
|
ctlPacketInfo: {sysIP_PKTINFO, sizeofInetPktinfo, marshalPacketInfo, parsePacketInfo},
|
||||||
|
}
|
||||||
|
|
||||||
|
sockOpts = map[int]*sockOpt{
|
||||||
|
ssoMulticastTTL: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_TTL, Len: 1}},
|
||||||
|
ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_IF, Len: 4}},
|
||||||
|
ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_MULTICAST_LOOP, Len: 1}},
|
||||||
|
ssoPacketInfo: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysIP_RECVPKTINFO, Len: 4}},
|
||||||
|
ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
|
||||||
|
ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
|
||||||
|
ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIP, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (pi *inetPktinfo) setIfindex(i int) {
|
||||||
|
pi.Ifindex = uint32(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gr *groupReq) setGroup(grp net.IP) {
|
||||||
|
sa := (*sockaddrInet4)(unsafe.Pointer(&gr.Group))
|
||||||
|
sa.Family = syscall.AF_INET
|
||||||
|
sa.Len = sizeofSockaddrInet4
|
||||||
|
copy(sa.Addr[:], grp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
|
||||||
|
sa := (*sockaddrInet4)(unsafe.Pointer(&gsr.Group))
|
||||||
|
sa.Family = syscall.AF_INET
|
||||||
|
sa.Len = sizeofSockaddrInet4
|
||||||
|
copy(sa.Addr[:], grp)
|
||||||
|
sa = (*sockaddrInet4)(unsafe.Pointer(&gsr.Source))
|
||||||
|
sa.Family = syscall.AF_INET
|
||||||
|
sa.Len = sizeofSockaddrInet4
|
||||||
|
copy(sa.Addr[:], src)
|
||||||
|
}
|
80
vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go
generated
vendored
Normal file
80
vendor/golang.org/x/net/ipv4/zsys_zos_s390x.go
generated
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Hand edited based on zerrors_zos_s390x.go
|
||||||
|
// TODO(Bill O'Farrell): auto-generate.
|
||||||
|
|
||||||
|
package ipv4
|
||||||
|
|
||||||
|
const (
|
||||||
|
sysIP_ADD_MEMBERSHIP = 5
|
||||||
|
sysIP_ADD_SOURCE_MEMBERSHIP = 12
|
||||||
|
sysIP_BLOCK_SOURCE = 10
|
||||||
|
sysIP_DEFAULT_MULTICAST_LOOP = 1
|
||||||
|
sysIP_DEFAULT_MULTICAST_TTL = 1
|
||||||
|
sysIP_DROP_MEMBERSHIP = 6
|
||||||
|
sysIP_DROP_SOURCE_MEMBERSHIP = 13
|
||||||
|
sysIP_MAX_MEMBERSHIPS = 20
|
||||||
|
sysIP_MULTICAST_IF = 7
|
||||||
|
sysIP_MULTICAST_LOOP = 4
|
||||||
|
sysIP_MULTICAST_TTL = 3
|
||||||
|
sysIP_OPTIONS = 1
|
||||||
|
sysIP_PKTINFO = 101
|
||||||
|
sysIP_RECVPKTINFO = 102
|
||||||
|
sysIP_TOS = 2
|
||||||
|
sysIP_UNBLOCK_SOURCE = 11
|
||||||
|
|
||||||
|
sysMCAST_JOIN_GROUP = 40
|
||||||
|
sysMCAST_LEAVE_GROUP = 41
|
||||||
|
sysMCAST_JOIN_SOURCE_GROUP = 42
|
||||||
|
sysMCAST_LEAVE_SOURCE_GROUP = 43
|
||||||
|
sysMCAST_BLOCK_SOURCE = 44
|
||||||
|
sysMCAST_UNBLOCK_SOURCE = 45
|
||||||
|
|
||||||
|
sizeofIPMreq = 8
|
||||||
|
sizeofSockaddrInet4 = 16
|
||||||
|
sizeofSockaddrStorage = 128
|
||||||
|
sizeofGroupReq = 136
|
||||||
|
sizeofGroupSourceReq = 264
|
||||||
|
sizeofInetPktinfo = 8
|
||||||
|
)
|
||||||
|
|
||||||
|
type sockaddrInet4 struct {
|
||||||
|
Len uint8
|
||||||
|
Family uint8
|
||||||
|
Port uint16
|
||||||
|
Addr [4]byte
|
||||||
|
Zero [8]uint8
|
||||||
|
}
|
||||||
|
|
||||||
|
type inetPktinfo struct {
|
||||||
|
Addr [4]byte
|
||||||
|
Ifindex uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type sockaddrStorage struct {
|
||||||
|
Len uint8
|
||||||
|
Family byte
|
||||||
|
ss_pad1 [6]byte
|
||||||
|
ss_align int64
|
||||||
|
ss_pad2 [112]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type groupReq struct {
|
||||||
|
Interface uint32
|
||||||
|
reserved uint32
|
||||||
|
Group sockaddrStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
type groupSourceReq struct {
|
||||||
|
Interface uint32
|
||||||
|
reserved uint32
|
||||||
|
Group sockaddrStorage
|
||||||
|
Source sockaddrStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
type ipMreq struct {
|
||||||
|
Multiaddr [4]byte /* in_addr */
|
||||||
|
Interface [4]byte /* in_addr */
|
||||||
|
}
|
29
vendor/golang.org/x/net/ipv6/icmp_zos.go
generated
vendored
Normal file
29
vendor/golang.org/x/net/ipv6/icmp_zos.go
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package ipv6
|
||||||
|
|
||||||
|
func (f *icmpv6Filter) accept(typ ICMPType) {
|
||||||
|
f.Filt[typ>>5] |= 1 << (uint32(typ) & 31)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *icmpv6Filter) block(typ ICMPType) {
|
||||||
|
f.Filt[typ>>5] &^= 1 << (uint32(typ) & 31)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *icmpv6Filter) setAll(block bool) {
|
||||||
|
for i := range f.Filt {
|
||||||
|
if block {
|
||||||
|
f.Filt[i] = 0
|
||||||
|
} else {
|
||||||
|
f.Filt[i] = 1<<32 - 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *icmpv6Filter) willBlock(typ ICMPType) bool {
|
||||||
|
return f.Filt[typ>>5]&(1<<(uint32(typ)&31)) == 0
|
||||||
|
}
|
70
vendor/golang.org/x/net/ipv6/sys_zos.go
generated
vendored
Normal file
70
vendor/golang.org/x/net/ipv6/sys_zos.go
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package ipv6
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"golang.org/x/net/internal/iana"
|
||||||
|
"golang.org/x/net/internal/socket"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ctlOpts = [ctlMax]ctlOpt{
|
||||||
|
ctlHopLimit: {sysIPV6_HOPLIMIT, 4, marshalHopLimit, parseHopLimit},
|
||||||
|
ctlPacketInfo: {sysIPV6_PKTINFO, sizeofInet6Pktinfo, marshalPacketInfo, parsePacketInfo},
|
||||||
|
ctlPathMTU: {sysIPV6_PATHMTU, sizeofIPv6Mtuinfo, marshalPathMTU, parsePathMTU},
|
||||||
|
}
|
||||||
|
|
||||||
|
sockOpts = map[int]*sockOpt{
|
||||||
|
ssoTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_TCLASS, Len: 4}},
|
||||||
|
ssoHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_UNICAST_HOPS, Len: 4}},
|
||||||
|
ssoMulticastInterface: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_IF, Len: 4}},
|
||||||
|
ssoMulticastHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_HOPS, Len: 4}},
|
||||||
|
ssoMulticastLoopback: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_MULTICAST_LOOP, Len: 4}},
|
||||||
|
ssoReceiveTrafficClass: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVTCLASS, Len: 4}},
|
||||||
|
ssoReceiveHopLimit: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVHOPLIMIT, Len: 4}},
|
||||||
|
ssoReceivePacketInfo: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPKTINFO, Len: 4}},
|
||||||
|
ssoReceivePathMTU: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_RECVPATHMTU, Len: 4}},
|
||||||
|
ssoChecksum: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysIPV6_CHECKSUM, Len: 4}},
|
||||||
|
ssoICMPFilter: {Option: socket.Option{Level: iana.ProtocolIPv6ICMP, Name: sysICMP6_FILTER, Len: sizeofICMPv6Filter}},
|
||||||
|
ssoJoinGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
|
||||||
|
ssoLeaveGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_GROUP, Len: sizeofGroupReq}, typ: ssoTypeGroupReq},
|
||||||
|
ssoJoinSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_JOIN_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoLeaveSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_LEAVE_SOURCE_GROUP, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoBlockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_BLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
ssoUnblockSourceGroup: {Option: socket.Option{Level: iana.ProtocolIPv6, Name: sysMCAST_UNBLOCK_SOURCE, Len: sizeofGroupSourceReq}, typ: ssoTypeGroupSourceReq},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func (sa *sockaddrInet6) setSockaddr(ip net.IP, i int) {
|
||||||
|
sa.Family = syscall.AF_INET6
|
||||||
|
copy(sa.Addr[:], ip)
|
||||||
|
sa.Scope_id = uint32(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pi *inet6Pktinfo) setIfindex(i int) {
|
||||||
|
pi.Ifindex = uint32(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gr *groupReq) setGroup(grp net.IP) {
|
||||||
|
sa := (*sockaddrInet6)(unsafe.Pointer(&gr.Group))
|
||||||
|
sa.Family = syscall.AF_INET6
|
||||||
|
sa.Len = sizeofSockaddrInet6
|
||||||
|
copy(sa.Addr[:], grp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gsr *groupSourceReq) setSourceGroup(grp, src net.IP) {
|
||||||
|
sa := (*sockaddrInet6)(unsafe.Pointer(&gsr.Group))
|
||||||
|
sa.Family = syscall.AF_INET6
|
||||||
|
sa.Len = sizeofSockaddrInet6
|
||||||
|
copy(sa.Addr[:], grp)
|
||||||
|
sa = (*sockaddrInet6)(unsafe.Pointer(&gsr.Source))
|
||||||
|
sa.Family = syscall.AF_INET6
|
||||||
|
sa.Len = sizeofSockaddrInet6
|
||||||
|
copy(sa.Addr[:], src)
|
||||||
|
}
|
106
vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go
generated
vendored
Normal file
106
vendor/golang.org/x/net/ipv6/zsys_zos_s390x.go
generated
vendored
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Hand edited based on zerrors_zos_s390x.go
|
||||||
|
// TODO(Bill O'Farrell): auto-generate.
|
||||||
|
|
||||||
|
package ipv6
|
||||||
|
|
||||||
|
const (
|
||||||
|
sysIPV6_ADDR_PREFERENCES = 32
|
||||||
|
sysIPV6_CHECKSUM = 19
|
||||||
|
sysIPV6_DONTFRAG = 29
|
||||||
|
sysIPV6_DSTOPTS = 23
|
||||||
|
sysIPV6_HOPLIMIT = 11
|
||||||
|
sysIPV6_HOPOPTS = 22
|
||||||
|
sysIPV6_JOIN_GROUP = 5
|
||||||
|
sysIPV6_LEAVE_GROUP = 6
|
||||||
|
sysIPV6_MULTICAST_HOPS = 9
|
||||||
|
sysIPV6_MULTICAST_IF = 7
|
||||||
|
sysIPV6_MULTICAST_LOOP = 4
|
||||||
|
sysIPV6_NEXTHOP = 20
|
||||||
|
sysIPV6_PATHMTU = 12
|
||||||
|
sysIPV6_PKTINFO = 13
|
||||||
|
sysIPV6_PREFER_SRC_CGA = 0x10
|
||||||
|
sysIPV6_PREFER_SRC_COA = 0x02
|
||||||
|
sysIPV6_PREFER_SRC_HOME = 0x01
|
||||||
|
sysIPV6_PREFER_SRC_NONCGA = 0x20
|
||||||
|
sysIPV6_PREFER_SRC_PUBLIC = 0x08
|
||||||
|
sysIPV6_PREFER_SRC_TMP = 0x04
|
||||||
|
sysIPV6_RECVDSTOPTS = 28
|
||||||
|
sysIPV6_RECVHOPLIMIT = 14
|
||||||
|
sysIPV6_RECVHOPOPTS = 26
|
||||||
|
sysIPV6_RECVPATHMTU = 16
|
||||||
|
sysIPV6_RECVPKTINFO = 15
|
||||||
|
sysIPV6_RECVRTHDR = 25
|
||||||
|
sysIPV6_RECVTCLASS = 31
|
||||||
|
sysIPV6_RTHDR = 21
|
||||||
|
sysIPV6_RTHDRDSTOPTS = 24
|
||||||
|
sysIPV6_RTHDR_TYPE_0 = 0
|
||||||
|
sysIPV6_TCLASS = 30
|
||||||
|
sysIPV6_UNICAST_HOPS = 3
|
||||||
|
sysIPV6_USE_MIN_MTU = 18
|
||||||
|
sysIPV6_V6ONLY = 10
|
||||||
|
|
||||||
|
sysMCAST_JOIN_GROUP = 40
|
||||||
|
sysMCAST_LEAVE_GROUP = 41
|
||||||
|
sysMCAST_JOIN_SOURCE_GROUP = 42
|
||||||
|
sysMCAST_LEAVE_SOURCE_GROUP = 43
|
||||||
|
sysMCAST_BLOCK_SOURCE = 44
|
||||||
|
sysMCAST_UNBLOCK_SOURCE = 45
|
||||||
|
|
||||||
|
sysICMP6_FILTER = 0x1
|
||||||
|
|
||||||
|
sizeofSockaddrStorage = 128
|
||||||
|
sizeofICMPv6Filter = 32
|
||||||
|
sizeofInet6Pktinfo = 20
|
||||||
|
sizeofIPv6Mtuinfo = 32
|
||||||
|
sizeofSockaddrInet6 = 28
|
||||||
|
sizeofGroupReq = 136
|
||||||
|
sizeofGroupSourceReq = 264
|
||||||
|
)
|
||||||
|
|
||||||
|
type sockaddrStorage struct {
|
||||||
|
Len uint8
|
||||||
|
Family byte
|
||||||
|
ss_pad1 [6]byte
|
||||||
|
ss_align int64
|
||||||
|
ss_pad2 [112]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
type sockaddrInet6 struct {
|
||||||
|
Len uint8
|
||||||
|
Family uint8
|
||||||
|
Port uint16
|
||||||
|
Flowinfo uint32
|
||||||
|
Addr [16]byte
|
||||||
|
Scope_id uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type inet6Pktinfo struct {
|
||||||
|
Addr [16]byte
|
||||||
|
Ifindex uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type ipv6Mtuinfo struct {
|
||||||
|
Addr sockaddrInet6
|
||||||
|
Mtu uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type groupReq struct {
|
||||||
|
Interface uint32
|
||||||
|
reserved uint32
|
||||||
|
Group sockaddrStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
type groupSourceReq struct {
|
||||||
|
Interface uint32
|
||||||
|
reserved uint32
|
||||||
|
Group sockaddrStorage
|
||||||
|
Source sockaddrStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
type icmpv6Filter struct {
|
||||||
|
Filt [8]uint32
|
||||||
|
}
|
8
vendor/golang.org/x/sys/plan9/asm.s
generated
vendored
Normal file
8
vendor/golang.org/x/sys/plan9/asm.s
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Copyright 2014 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
TEXT ·use(SB),NOSPLIT,$0
|
||||||
|
RET
|
30
vendor/golang.org/x/sys/plan9/asm_plan9_386.s
generated
vendored
Normal file
30
vendor/golang.org/x/sys/plan9/asm_plan9_386.s
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// System call support for 386, Plan 9
|
||||||
|
//
|
||||||
|
|
||||||
|
// Just jump to package syscall's implementation for all these functions.
|
||||||
|
// The runtime may know about them.
|
||||||
|
|
||||||
|
TEXT ·Syscall(SB),NOSPLIT,$0-32
|
||||||
|
JMP syscall·Syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-44
|
||||||
|
JMP syscall·Syscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
||||||
|
JMP syscall·RawSyscall(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
||||||
|
JMP syscall·RawSyscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·seek(SB),NOSPLIT,$0-36
|
||||||
|
JMP syscall·seek(SB)
|
||||||
|
|
||||||
|
TEXT ·exit(SB),NOSPLIT,$4-4
|
||||||
|
JMP syscall·exit(SB)
|
30
vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s
generated
vendored
Normal file
30
vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// System call support for amd64, Plan 9
|
||||||
|
//
|
||||||
|
|
||||||
|
// Just jump to package syscall's implementation for all these functions.
|
||||||
|
// The runtime may know about them.
|
||||||
|
|
||||||
|
TEXT ·Syscall(SB),NOSPLIT,$0-64
|
||||||
|
JMP syscall·Syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-88
|
||||||
|
JMP syscall·Syscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP syscall·RawSyscall(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP syscall·RawSyscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·seek(SB),NOSPLIT,$0-56
|
||||||
|
JMP syscall·seek(SB)
|
||||||
|
|
||||||
|
TEXT ·exit(SB),NOSPLIT,$8-8
|
||||||
|
JMP syscall·exit(SB)
|
25
vendor/golang.org/x/sys/plan9/asm_plan9_arm.s
generated
vendored
Normal file
25
vendor/golang.org/x/sys/plan9/asm_plan9_arm.s
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
// System call support for plan9 on arm
|
||||||
|
|
||||||
|
// Just jump to package syscall's implementation for all these functions.
|
||||||
|
// The runtime may know about them.
|
||||||
|
|
||||||
|
TEXT ·Syscall(SB),NOSPLIT,$0-32
|
||||||
|
JMP syscall·Syscall(SB)
|
||||||
|
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-44
|
||||||
|
JMP syscall·Syscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-28
|
||||||
|
JMP syscall·RawSyscall(SB)
|
||||||
|
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-40
|
||||||
|
JMP syscall·RawSyscall6(SB)
|
||||||
|
|
||||||
|
TEXT ·seek(SB),NOSPLIT,$0-36
|
||||||
|
JMP syscall·exit(SB)
|
70
vendor/golang.org/x/sys/plan9/const_plan9.go
generated
vendored
Normal file
70
vendor/golang.org/x/sys/plan9/const_plan9.go
generated
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package plan9
|
||||||
|
|
||||||
|
// Plan 9 Constants
|
||||||
|
|
||||||
|
// Open modes
|
||||||
|
const (
|
||||||
|
O_RDONLY = 0
|
||||||
|
O_WRONLY = 1
|
||||||
|
O_RDWR = 2
|
||||||
|
O_TRUNC = 16
|
||||||
|
O_CLOEXEC = 32
|
||||||
|
O_EXCL = 0x1000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Rfork flags
|
||||||
|
const (
|
||||||
|
RFNAMEG = 1 << 0
|
||||||
|
RFENVG = 1 << 1
|
||||||
|
RFFDG = 1 << 2
|
||||||
|
RFNOTEG = 1 << 3
|
||||||
|
RFPROC = 1 << 4
|
||||||
|
RFMEM = 1 << 5
|
||||||
|
RFNOWAIT = 1 << 6
|
||||||
|
RFCNAMEG = 1 << 10
|
||||||
|
RFCENVG = 1 << 11
|
||||||
|
RFCFDG = 1 << 12
|
||||||
|
RFREND = 1 << 13
|
||||||
|
RFNOMNT = 1 << 14
|
||||||
|
)
|
||||||
|
|
||||||
|
// Qid.Type bits
|
||||||
|
const (
|
||||||
|
QTDIR = 0x80
|
||||||
|
QTAPPEND = 0x40
|
||||||
|
QTEXCL = 0x20
|
||||||
|
QTMOUNT = 0x10
|
||||||
|
QTAUTH = 0x08
|
||||||
|
QTTMP = 0x04
|
||||||
|
QTFILE = 0x00
|
||||||
|
)
|
||||||
|
|
||||||
|
// Dir.Mode bits
|
||||||
|
const (
|
||||||
|
DMDIR = 0x80000000
|
||||||
|
DMAPPEND = 0x40000000
|
||||||
|
DMEXCL = 0x20000000
|
||||||
|
DMMOUNT = 0x10000000
|
||||||
|
DMAUTH = 0x08000000
|
||||||
|
DMTMP = 0x04000000
|
||||||
|
DMREAD = 0x4
|
||||||
|
DMWRITE = 0x2
|
||||||
|
DMEXEC = 0x1
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
STATMAX = 65535
|
||||||
|
ERRMAX = 128
|
||||||
|
STATFIXLEN = 49
|
||||||
|
)
|
||||||
|
|
||||||
|
// Mount and bind flags
|
||||||
|
const (
|
||||||
|
MREPL = 0x0000
|
||||||
|
MBEFORE = 0x0001
|
||||||
|
MAFTER = 0x0002
|
||||||
|
MORDER = 0x0003
|
||||||
|
MCREATE = 0x0004
|
||||||
|
MCACHE = 0x0010
|
||||||
|
MMASK = 0x0017
|
||||||
|
)
|
212
vendor/golang.org/x/sys/plan9/dir_plan9.go
generated
vendored
Normal file
212
vendor/golang.org/x/sys/plan9/dir_plan9.go
generated
vendored
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Plan 9 directory marshalling. See intro(5).
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrShortStat = errors.New("stat buffer too short")
|
||||||
|
ErrBadStat = errors.New("malformed stat buffer")
|
||||||
|
ErrBadName = errors.New("bad character in file name")
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Qid represents a 9P server's unique identification for a file.
|
||||||
|
type Qid struct {
|
||||||
|
Path uint64 // the file server's unique identification for the file
|
||||||
|
Vers uint32 // version number for given Path
|
||||||
|
Type uint8 // the type of the file (plan9.QTDIR for example)
|
||||||
|
}
|
||||||
|
|
||||||
|
// A Dir contains the metadata for a file.
|
||||||
|
type Dir struct {
|
||||||
|
// system-modified data
|
||||||
|
Type uint16 // server type
|
||||||
|
Dev uint32 // server subtype
|
||||||
|
|
||||||
|
// file data
|
||||||
|
Qid Qid // unique id from server
|
||||||
|
Mode uint32 // permissions
|
||||||
|
Atime uint32 // last read time
|
||||||
|
Mtime uint32 // last write time
|
||||||
|
Length int64 // file length
|
||||||
|
Name string // last element of path
|
||||||
|
Uid string // owner name
|
||||||
|
Gid string // group name
|
||||||
|
Muid string // last modifier name
|
||||||
|
}
|
||||||
|
|
||||||
|
var nullDir = Dir{
|
||||||
|
Type: ^uint16(0),
|
||||||
|
Dev: ^uint32(0),
|
||||||
|
Qid: Qid{
|
||||||
|
Path: ^uint64(0),
|
||||||
|
Vers: ^uint32(0),
|
||||||
|
Type: ^uint8(0),
|
||||||
|
},
|
||||||
|
Mode: ^uint32(0),
|
||||||
|
Atime: ^uint32(0),
|
||||||
|
Mtime: ^uint32(0),
|
||||||
|
Length: ^int64(0),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Null assigns special "don't touch" values to members of d to
|
||||||
|
// avoid modifying them during plan9.Wstat.
|
||||||
|
func (d *Dir) Null() { *d = nullDir }
|
||||||
|
|
||||||
|
// Marshal encodes a 9P stat message corresponding to d into b
|
||||||
|
//
|
||||||
|
// If there isn't enough space in b for a stat message, ErrShortStat is returned.
|
||||||
|
func (d *Dir) Marshal(b []byte) (n int, err error) {
|
||||||
|
n = STATFIXLEN + len(d.Name) + len(d.Uid) + len(d.Gid) + len(d.Muid)
|
||||||
|
if n > len(b) {
|
||||||
|
return n, ErrShortStat
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range d.Name {
|
||||||
|
if c == '/' {
|
||||||
|
return n, ErrBadName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
b = pbit16(b, uint16(n)-2)
|
||||||
|
b = pbit16(b, d.Type)
|
||||||
|
b = pbit32(b, d.Dev)
|
||||||
|
b = pbit8(b, d.Qid.Type)
|
||||||
|
b = pbit32(b, d.Qid.Vers)
|
||||||
|
b = pbit64(b, d.Qid.Path)
|
||||||
|
b = pbit32(b, d.Mode)
|
||||||
|
b = pbit32(b, d.Atime)
|
||||||
|
b = pbit32(b, d.Mtime)
|
||||||
|
b = pbit64(b, uint64(d.Length))
|
||||||
|
b = pstring(b, d.Name)
|
||||||
|
b = pstring(b, d.Uid)
|
||||||
|
b = pstring(b, d.Gid)
|
||||||
|
b = pstring(b, d.Muid)
|
||||||
|
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalDir decodes a single 9P stat message from b and returns the resulting Dir.
|
||||||
|
//
|
||||||
|
// If b is too small to hold a valid stat message, ErrShortStat is returned.
|
||||||
|
//
|
||||||
|
// If the stat message itself is invalid, ErrBadStat is returned.
|
||||||
|
func UnmarshalDir(b []byte) (*Dir, error) {
|
||||||
|
if len(b) < STATFIXLEN {
|
||||||
|
return nil, ErrShortStat
|
||||||
|
}
|
||||||
|
size, buf := gbit16(b)
|
||||||
|
if len(b) != int(size)+2 {
|
||||||
|
return nil, ErrBadStat
|
||||||
|
}
|
||||||
|
b = buf
|
||||||
|
|
||||||
|
var d Dir
|
||||||
|
d.Type, b = gbit16(b)
|
||||||
|
d.Dev, b = gbit32(b)
|
||||||
|
d.Qid.Type, b = gbit8(b)
|
||||||
|
d.Qid.Vers, b = gbit32(b)
|
||||||
|
d.Qid.Path, b = gbit64(b)
|
||||||
|
d.Mode, b = gbit32(b)
|
||||||
|
d.Atime, b = gbit32(b)
|
||||||
|
d.Mtime, b = gbit32(b)
|
||||||
|
|
||||||
|
n, b := gbit64(b)
|
||||||
|
d.Length = int64(n)
|
||||||
|
|
||||||
|
var ok bool
|
||||||
|
if d.Name, b, ok = gstring(b); !ok {
|
||||||
|
return nil, ErrBadStat
|
||||||
|
}
|
||||||
|
if d.Uid, b, ok = gstring(b); !ok {
|
||||||
|
return nil, ErrBadStat
|
||||||
|
}
|
||||||
|
if d.Gid, b, ok = gstring(b); !ok {
|
||||||
|
return nil, ErrBadStat
|
||||||
|
}
|
||||||
|
if d.Muid, b, ok = gstring(b); !ok {
|
||||||
|
return nil, ErrBadStat
|
||||||
|
}
|
||||||
|
|
||||||
|
return &d, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// pbit8 copies the 8-bit number v to b and returns the remaining slice of b.
|
||||||
|
func pbit8(b []byte, v uint8) []byte {
|
||||||
|
b[0] = byte(v)
|
||||||
|
return b[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// pbit16 copies the 16-bit number v to b in little-endian order and returns the remaining slice of b.
|
||||||
|
func pbit16(b []byte, v uint16) []byte {
|
||||||
|
b[0] = byte(v)
|
||||||
|
b[1] = byte(v >> 8)
|
||||||
|
return b[2:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// pbit32 copies the 32-bit number v to b in little-endian order and returns the remaining slice of b.
|
||||||
|
func pbit32(b []byte, v uint32) []byte {
|
||||||
|
b[0] = byte(v)
|
||||||
|
b[1] = byte(v >> 8)
|
||||||
|
b[2] = byte(v >> 16)
|
||||||
|
b[3] = byte(v >> 24)
|
||||||
|
return b[4:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// pbit64 copies the 64-bit number v to b in little-endian order and returns the remaining slice of b.
|
||||||
|
func pbit64(b []byte, v uint64) []byte {
|
||||||
|
b[0] = byte(v)
|
||||||
|
b[1] = byte(v >> 8)
|
||||||
|
b[2] = byte(v >> 16)
|
||||||
|
b[3] = byte(v >> 24)
|
||||||
|
b[4] = byte(v >> 32)
|
||||||
|
b[5] = byte(v >> 40)
|
||||||
|
b[6] = byte(v >> 48)
|
||||||
|
b[7] = byte(v >> 56)
|
||||||
|
return b[8:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// pstring copies the string s to b, prepending it with a 16-bit length in little-endian order, and
|
||||||
|
// returning the remaining slice of b..
|
||||||
|
func pstring(b []byte, s string) []byte {
|
||||||
|
b = pbit16(b, uint16(len(s)))
|
||||||
|
n := copy(b, s)
|
||||||
|
return b[n:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// gbit8 reads an 8-bit number from b and returns it with the remaining slice of b.
|
||||||
|
func gbit8(b []byte) (uint8, []byte) {
|
||||||
|
return uint8(b[0]), b[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// gbit16 reads a 16-bit number in little-endian order from b and returns it with the remaining slice of b.
|
||||||
|
func gbit16(b []byte) (uint16, []byte) {
|
||||||
|
return uint16(b[0]) | uint16(b[1])<<8, b[2:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// gbit32 reads a 32-bit number in little-endian order from b and returns it with the remaining slice of b.
|
||||||
|
func gbit32(b []byte) (uint32, []byte) {
|
||||||
|
return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, b[4:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// gbit64 reads a 64-bit number in little-endian order from b and returns it with the remaining slice of b.
|
||||||
|
func gbit64(b []byte) (uint64, []byte) {
|
||||||
|
lo := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24
|
||||||
|
hi := uint32(b[4]) | uint32(b[5])<<8 | uint32(b[6])<<16 | uint32(b[7])<<24
|
||||||
|
return uint64(lo) | uint64(hi)<<32, b[8:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// gstring reads a string from b, prefixed with a 16-bit length in little-endian order.
|
||||||
|
// It returns the string with the remaining slice of b and a boolean. If the length is
|
||||||
|
// greater than the number of bytes in b, the boolean will be false.
|
||||||
|
func gstring(b []byte) (string, []byte, bool) {
|
||||||
|
n, b := gbit16(b)
|
||||||
|
if int(n) > len(b) {
|
||||||
|
return "", b, false
|
||||||
|
}
|
||||||
|
return string(b[:n]), b[n:], true
|
||||||
|
}
|
31
vendor/golang.org/x/sys/plan9/env_plan9.go
generated
vendored
Normal file
31
vendor/golang.org/x/sys/plan9/env_plan9.go
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Plan 9 environment variables.
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Getenv(key string) (value string, found bool) {
|
||||||
|
return syscall.Getenv(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Setenv(key, value string) error {
|
||||||
|
return syscall.Setenv(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Clearenv() {
|
||||||
|
syscall.Clearenv()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Environ() []string {
|
||||||
|
return syscall.Environ()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Unsetenv(key string) error {
|
||||||
|
return syscall.Unsetenv(key)
|
||||||
|
}
|
50
vendor/golang.org/x/sys/plan9/errors_plan9.go
generated
vendored
Normal file
50
vendor/golang.org/x/sys/plan9/errors_plan9.go
generated
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
const (
|
||||||
|
// Invented values to support what package os expects.
|
||||||
|
O_CREAT = 0x02000
|
||||||
|
O_APPEND = 0x00400
|
||||||
|
O_NOCTTY = 0x00000
|
||||||
|
O_NONBLOCK = 0x00000
|
||||||
|
O_SYNC = 0x00000
|
||||||
|
O_ASYNC = 0x00000
|
||||||
|
|
||||||
|
S_IFMT = 0x1f000
|
||||||
|
S_IFIFO = 0x1000
|
||||||
|
S_IFCHR = 0x2000
|
||||||
|
S_IFDIR = 0x4000
|
||||||
|
S_IFBLK = 0x6000
|
||||||
|
S_IFREG = 0x8000
|
||||||
|
S_IFLNK = 0xa000
|
||||||
|
S_IFSOCK = 0xc000
|
||||||
|
)
|
||||||
|
|
||||||
|
// Errors
|
||||||
|
var (
|
||||||
|
EINVAL = syscall.NewError("bad arg in system call")
|
||||||
|
ENOTDIR = syscall.NewError("not a directory")
|
||||||
|
EISDIR = syscall.NewError("file is a directory")
|
||||||
|
ENOENT = syscall.NewError("file does not exist")
|
||||||
|
EEXIST = syscall.NewError("file already exists")
|
||||||
|
EMFILE = syscall.NewError("no free file descriptors")
|
||||||
|
EIO = syscall.NewError("i/o error")
|
||||||
|
ENAMETOOLONG = syscall.NewError("file name too long")
|
||||||
|
EINTR = syscall.NewError("interrupted")
|
||||||
|
EPERM = syscall.NewError("permission denied")
|
||||||
|
EBUSY = syscall.NewError("no free devices")
|
||||||
|
ETIMEDOUT = syscall.NewError("connection timed out")
|
||||||
|
EPLAN9 = syscall.NewError("not supported by plan 9")
|
||||||
|
|
||||||
|
// The following errors do not correspond to any
|
||||||
|
// Plan 9 system messages. Invented to support
|
||||||
|
// what package os and others expect.
|
||||||
|
EACCES = syscall.NewError("access permission denied")
|
||||||
|
EAFNOSUPPORT = syscall.NewError("address family not supported by protocol")
|
||||||
|
)
|
150
vendor/golang.org/x/sys/plan9/mkall.sh
generated
vendored
Normal file
150
vendor/golang.org/x/sys/plan9/mkall.sh
generated
vendored
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
# The plan9 package provides access to the raw system call
|
||||||
|
# interface of the underlying operating system. Porting Go to
|
||||||
|
# a new architecture/operating system combination requires
|
||||||
|
# some manual effort, though there are tools that automate
|
||||||
|
# much of the process. The auto-generated files have names
|
||||||
|
# beginning with z.
|
||||||
|
#
|
||||||
|
# This script runs or (given -n) prints suggested commands to generate z files
|
||||||
|
# for the current system. Running those commands is not automatic.
|
||||||
|
# This script is documentation more than anything else.
|
||||||
|
#
|
||||||
|
# * asm_${GOOS}_${GOARCH}.s
|
||||||
|
#
|
||||||
|
# This hand-written assembly file implements system call dispatch.
|
||||||
|
# There are three entry points:
|
||||||
|
#
|
||||||
|
# func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);
|
||||||
|
# func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr);
|
||||||
|
# func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr);
|
||||||
|
#
|
||||||
|
# The first and second are the standard ones; they differ only in
|
||||||
|
# how many arguments can be passed to the kernel.
|
||||||
|
# The third is for low-level use by the ForkExec wrapper;
|
||||||
|
# unlike the first two, it does not call into the scheduler to
|
||||||
|
# let it know that a system call is running.
|
||||||
|
#
|
||||||
|
# * syscall_${GOOS}.go
|
||||||
|
#
|
||||||
|
# This hand-written Go file implements system calls that need
|
||||||
|
# special handling and lists "//sys" comments giving prototypes
|
||||||
|
# for ones that can be auto-generated. Mksyscall reads those
|
||||||
|
# comments to generate the stubs.
|
||||||
|
#
|
||||||
|
# * syscall_${GOOS}_${GOARCH}.go
|
||||||
|
#
|
||||||
|
# Same as syscall_${GOOS}.go except that it contains code specific
|
||||||
|
# to ${GOOS} on one particular architecture.
|
||||||
|
#
|
||||||
|
# * types_${GOOS}.c
|
||||||
|
#
|
||||||
|
# This hand-written C file includes standard C headers and then
|
||||||
|
# creates typedef or enum names beginning with a dollar sign
|
||||||
|
# (use of $ in variable names is a gcc extension). The hardest
|
||||||
|
# part about preparing this file is figuring out which headers to
|
||||||
|
# include and which symbols need to be #defined to get the
|
||||||
|
# actual data structures that pass through to the kernel system calls.
|
||||||
|
# Some C libraries present alternate versions for binary compatibility
|
||||||
|
# and translate them on the way in and out of system calls, but
|
||||||
|
# there is almost always a #define that can get the real ones.
|
||||||
|
# See types_darwin.c and types_linux.c for examples.
|
||||||
|
#
|
||||||
|
# * zerror_${GOOS}_${GOARCH}.go
|
||||||
|
#
|
||||||
|
# This machine-generated file defines the system's error numbers,
|
||||||
|
# error strings, and signal numbers. The generator is "mkerrors.sh".
|
||||||
|
# Usually no arguments are needed, but mkerrors.sh will pass its
|
||||||
|
# arguments on to godefs.
|
||||||
|
#
|
||||||
|
# * zsyscall_${GOOS}_${GOARCH}.go
|
||||||
|
#
|
||||||
|
# Generated by mksyscall.pl; see syscall_${GOOS}.go above.
|
||||||
|
#
|
||||||
|
# * zsysnum_${GOOS}_${GOARCH}.go
|
||||||
|
#
|
||||||
|
# Generated by mksysnum_${GOOS}.
|
||||||
|
#
|
||||||
|
# * ztypes_${GOOS}_${GOARCH}.go
|
||||||
|
#
|
||||||
|
# Generated by godefs; see types_${GOOS}.c above.
|
||||||
|
|
||||||
|
GOOSARCH="${GOOS}_${GOARCH}"
|
||||||
|
|
||||||
|
# defaults
|
||||||
|
mksyscall="go run mksyscall.go"
|
||||||
|
mkerrors="./mkerrors.sh"
|
||||||
|
zerrors="zerrors_$GOOSARCH.go"
|
||||||
|
mksysctl=""
|
||||||
|
zsysctl="zsysctl_$GOOSARCH.go"
|
||||||
|
mksysnum=
|
||||||
|
mktypes=
|
||||||
|
run="sh"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
-syscalls)
|
||||||
|
for i in zsyscall*go
|
||||||
|
do
|
||||||
|
sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i
|
||||||
|
rm _$i
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
run="cat"
|
||||||
|
shift
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$#" in
|
||||||
|
0)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'usage: mkall.sh [-n]' 1>&2
|
||||||
|
exit 2
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$GOOSARCH" in
|
||||||
|
_* | *_ | _)
|
||||||
|
echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
plan9_386)
|
||||||
|
mkerrors=
|
||||||
|
mksyscall="go run mksyscall.go -l32 -plan9 -tags plan9,386"
|
||||||
|
mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h"
|
||||||
|
mktypes="XXX"
|
||||||
|
;;
|
||||||
|
plan9_amd64)
|
||||||
|
mkerrors=
|
||||||
|
mksyscall="go run mksyscall.go -l32 -plan9 -tags plan9,amd64"
|
||||||
|
mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h"
|
||||||
|
mktypes="XXX"
|
||||||
|
;;
|
||||||
|
plan9_arm)
|
||||||
|
mkerrors=
|
||||||
|
mksyscall="go run mksyscall.go -l32 -plan9 -tags plan9,arm"
|
||||||
|
mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h"
|
||||||
|
mktypes="XXX"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
(
|
||||||
|
if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi
|
||||||
|
case "$GOOS" in
|
||||||
|
plan9)
|
||||||
|
syscall_goos="syscall_$GOOS.go"
|
||||||
|
if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos |gofmt >zsyscall_$GOOSARCH.go"; fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
||||||
|
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
||||||
|
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go |gofmt >ztypes_$GOOSARCH.go"; fi
|
||||||
|
) | $run
|
246
vendor/golang.org/x/sys/plan9/mkerrors.sh
generated
vendored
Normal file
246
vendor/golang.org/x/sys/plan9/mkerrors.sh
generated
vendored
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
# Generate Go code listing errors and other #defined constant
|
||||||
|
# values (ENAMETOOLONG etc.), by asking the preprocessor
|
||||||
|
# about the definitions.
|
||||||
|
|
||||||
|
unset LANG
|
||||||
|
export LC_ALL=C
|
||||||
|
export LC_CTYPE=C
|
||||||
|
|
||||||
|
CC=${CC:-gcc}
|
||||||
|
|
||||||
|
uname=$(uname)
|
||||||
|
|
||||||
|
includes='
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/file.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/ip6.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/signal.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
'
|
||||||
|
|
||||||
|
ccflags="$@"
|
||||||
|
|
||||||
|
# Write go tool cgo -godefs input.
|
||||||
|
(
|
||||||
|
echo package plan9
|
||||||
|
echo
|
||||||
|
echo '/*'
|
||||||
|
indirect="includes_$(uname)"
|
||||||
|
echo "${!indirect} $includes"
|
||||||
|
echo '*/'
|
||||||
|
echo 'import "C"'
|
||||||
|
echo
|
||||||
|
echo 'const ('
|
||||||
|
|
||||||
|
# The gcc command line prints all the #defines
|
||||||
|
# it encounters while processing the input
|
||||||
|
echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '
|
||||||
|
$1 != "#define" || $2 ~ /\(/ || $3 == "" {next}
|
||||||
|
|
||||||
|
$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers
|
||||||
|
$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}
|
||||||
|
$2 ~ /^(SCM_SRCRT)$/ {next}
|
||||||
|
$2 ~ /^(MAP_FAILED)$/ {next}
|
||||||
|
|
||||||
|
$2 !~ /^ETH_/ &&
|
||||||
|
$2 !~ /^EPROC_/ &&
|
||||||
|
$2 !~ /^EQUIV_/ &&
|
||||||
|
$2 !~ /^EXPR_/ &&
|
||||||
|
$2 ~ /^E[A-Z0-9_]+$/ ||
|
||||||
|
$2 ~ /^B[0-9_]+$/ ||
|
||||||
|
$2 ~ /^V[A-Z0-9]+$/ ||
|
||||||
|
$2 ~ /^CS[A-Z0-9]/ ||
|
||||||
|
$2 ~ /^I(SIG|CANON|CRNL|EXTEN|MAXBEL|STRIP|UTF8)$/ ||
|
||||||
|
$2 ~ /^IGN/ ||
|
||||||
|
$2 ~ /^IX(ON|ANY|OFF)$/ ||
|
||||||
|
$2 ~ /^IN(LCR|PCK)$/ ||
|
||||||
|
$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||
|
||||||
|
$2 ~ /^C(LOCAL|READ)$/ ||
|
||||||
|
$2 == "BRKINT" ||
|
||||||
|
$2 == "HUPCL" ||
|
||||||
|
$2 == "PENDIN" ||
|
||||||
|
$2 == "TOSTOP" ||
|
||||||
|
$2 ~ /^PAR/ ||
|
||||||
|
$2 ~ /^SIG[^_]/ ||
|
||||||
|
$2 ~ /^O[CNPFP][A-Z]+[^_][A-Z]+$/ ||
|
||||||
|
$2 ~ /^IN_/ ||
|
||||||
|
$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||
|
||||||
|
$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ ||
|
||||||
|
$2 == "ICMPV6_FILTER" ||
|
||||||
|
$2 == "SOMAXCONN" ||
|
||||||
|
$2 == "NAME_MAX" ||
|
||||||
|
$2 == "IFNAMSIZ" ||
|
||||||
|
$2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ ||
|
||||||
|
$2 ~ /^SYSCTL_VERS/ ||
|
||||||
|
$2 ~ /^(MS|MNT)_/ ||
|
||||||
|
$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||
|
||||||
|
$2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ ||
|
||||||
|
$2 ~ /^LINUX_REBOOT_CMD_/ ||
|
||||||
|
$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||
|
||||||
|
$2 !~ "NLA_TYPE_MASK" &&
|
||||||
|
$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ ||
|
||||||
|
$2 ~ /^SIOC/ ||
|
||||||
|
$2 ~ /^TIOC/ ||
|
||||||
|
$2 !~ "RTF_BITS" &&
|
||||||
|
$2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ ||
|
||||||
|
$2 ~ /^BIOC/ ||
|
||||||
|
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
||||||
|
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ ||
|
||||||
|
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
||||||
|
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||||
|
$2 !~ /^(BPF_TIMEVAL)$/ &&
|
||||||
|
$2 ~ /^(BPF|DLT)_/ ||
|
||||||
|
$2 !~ "WMESGLEN" &&
|
||||||
|
$2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)}
|
||||||
|
$2 ~ /^__WCOREFLAG$/ {next}
|
||||||
|
$2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)}
|
||||||
|
|
||||||
|
{next}
|
||||||
|
' | sort
|
||||||
|
|
||||||
|
echo ')'
|
||||||
|
) >_const.go
|
||||||
|
|
||||||
|
# Pull out the error names for later.
|
||||||
|
errors=$(
|
||||||
|
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |
|
||||||
|
sort
|
||||||
|
)
|
||||||
|
|
||||||
|
# Pull out the signal names for later.
|
||||||
|
signals=$(
|
||||||
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |
|
||||||
|
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' |
|
||||||
|
sort
|
||||||
|
)
|
||||||
|
|
||||||
|
# Again, writing regexps to a file.
|
||||||
|
echo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
|
sort >_error.grep
|
||||||
|
echo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |
|
||||||
|
awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' |
|
||||||
|
egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' |
|
||||||
|
sort >_signal.grep
|
||||||
|
|
||||||
|
echo '// mkerrors.sh' "$@"
|
||||||
|
echo '// Code generated by the command above; DO NOT EDIT.'
|
||||||
|
echo
|
||||||
|
go tool cgo -godefs -- "$@" _const.go >_error.out
|
||||||
|
cat _error.out | grep -vf _error.grep | grep -vf _signal.grep
|
||||||
|
echo
|
||||||
|
echo '// Errors'
|
||||||
|
echo 'const ('
|
||||||
|
cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= Errno(\1)/'
|
||||||
|
echo ')'
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '// Signals'
|
||||||
|
echo 'const ('
|
||||||
|
cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= Signal(\1)/'
|
||||||
|
echo ')'
|
||||||
|
|
||||||
|
# Run C program to print error and syscall strings.
|
||||||
|
(
|
||||||
|
echo -E "
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#define nelem(x) (sizeof(x)/sizeof((x)[0]))
|
||||||
|
|
||||||
|
enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below
|
||||||
|
|
||||||
|
int errors[] = {
|
||||||
|
"
|
||||||
|
for i in $errors
|
||||||
|
do
|
||||||
|
echo -E ' '$i,
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -E "
|
||||||
|
};
|
||||||
|
|
||||||
|
int signals[] = {
|
||||||
|
"
|
||||||
|
for i in $signals
|
||||||
|
do
|
||||||
|
echo -E ' '$i,
|
||||||
|
done
|
||||||
|
|
||||||
|
# Use -E because on some systems bash builtin interprets \n itself.
|
||||||
|
echo -E '
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
intcmp(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return *(int*)a - *(int*)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
int i, j, e;
|
||||||
|
char buf[1024], *p;
|
||||||
|
|
||||||
|
printf("\n\n// Error table\n");
|
||||||
|
printf("var errors = [...]string {\n");
|
||||||
|
qsort(errors, nelem(errors), sizeof errors[0], intcmp);
|
||||||
|
for(i=0; i<nelem(errors); i++) {
|
||||||
|
e = errors[i];
|
||||||
|
if(i > 0 && errors[i-1] == e)
|
||||||
|
continue;
|
||||||
|
strcpy(buf, strerror(e));
|
||||||
|
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
||||||
|
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
||||||
|
buf[0] += a - A;
|
||||||
|
printf("\t%d: \"%s\",\n", e, buf);
|
||||||
|
}
|
||||||
|
printf("}\n\n");
|
||||||
|
|
||||||
|
printf("\n\n// Signal table\n");
|
||||||
|
printf("var signals = [...]string {\n");
|
||||||
|
qsort(signals, nelem(signals), sizeof signals[0], intcmp);
|
||||||
|
for(i=0; i<nelem(signals); i++) {
|
||||||
|
e = signals[i];
|
||||||
|
if(i > 0 && signals[i-1] == e)
|
||||||
|
continue;
|
||||||
|
strcpy(buf, strsignal(e));
|
||||||
|
// lowercase first letter: Bad -> bad, but STREAM -> STREAM.
|
||||||
|
if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)
|
||||||
|
buf[0] += a - A;
|
||||||
|
// cut trailing : number.
|
||||||
|
p = strrchr(buf, ":"[0]);
|
||||||
|
if(p)
|
||||||
|
*p = '\0';
|
||||||
|
printf("\t%d: \"%s\",\n", e, buf);
|
||||||
|
}
|
||||||
|
printf("}\n\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
'
|
||||||
|
) >_errors.c
|
||||||
|
|
||||||
|
$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out
|
23
vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh
generated
vendored
Normal file
23
vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
COMMAND="mksysnum_plan9.sh $@"
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
// $COMMAND
|
||||||
|
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
const(
|
||||||
|
EOF
|
||||||
|
|
||||||
|
SP='[ ]' # space or tab
|
||||||
|
sed "s/^#define${SP}\\([A-Z0-9_][A-Z0-9_]*\\)${SP}${SP}*\\([0-9][0-9]*\\)/SYS_\\1=\\2/g" \
|
||||||
|
< $1 | grep -v SYS__
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
)
|
||||||
|
EOF
|
21
vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
generated
vendored
Normal file
21
vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build go1.5
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "syscall"
|
||||||
|
|
||||||
|
func fixwd() {
|
||||||
|
syscall.Fixwd()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getwd() (wd string, err error) {
|
||||||
|
return syscall.Getwd()
|
||||||
|
}
|
||||||
|
|
||||||
|
func Chdir(path string) error {
|
||||||
|
return syscall.Chdir(path)
|
||||||
|
}
|
23
vendor/golang.org/x/sys/plan9/pwd_plan9.go
generated
vendored
Normal file
23
vendor/golang.org/x/sys/plan9/pwd_plan9.go
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2015 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build !go1.5
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
func fixwd() {
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getwd() (wd string, err error) {
|
||||||
|
fd, err := open(".", O_RDONLY)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer Close(fd)
|
||||||
|
return Fd2path(fd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Chdir(path string) error {
|
||||||
|
return chdir(path)
|
||||||
|
}
|
30
vendor/golang.org/x/sys/plan9/race.go
generated
vendored
Normal file
30
vendor/golang.org/x/sys/plan9/race.go
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build plan9,race
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import (
|
||||||
|
"runtime"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
const raceenabled = true
|
||||||
|
|
||||||
|
func raceAcquire(addr unsafe.Pointer) {
|
||||||
|
runtime.RaceAcquire(addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceReleaseMerge(addr unsafe.Pointer) {
|
||||||
|
runtime.RaceReleaseMerge(addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceReadRange(addr unsafe.Pointer, len int) {
|
||||||
|
runtime.RaceReadRange(addr, len)
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceWriteRange(addr unsafe.Pointer, len int) {
|
||||||
|
runtime.RaceWriteRange(addr, len)
|
||||||
|
}
|
25
vendor/golang.org/x/sys/plan9/race0.go
generated
vendored
Normal file
25
vendor/golang.org/x/sys/plan9/race0.go
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build plan9,!race
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
const raceenabled = false
|
||||||
|
|
||||||
|
func raceAcquire(addr unsafe.Pointer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceReleaseMerge(addr unsafe.Pointer) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceReadRange(addr unsafe.Pointer, len int) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func raceWriteRange(addr unsafe.Pointer, len int) {
|
||||||
|
}
|
22
vendor/golang.org/x/sys/plan9/str.go
generated
vendored
Normal file
22
vendor/golang.org/x/sys/plan9/str.go
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build plan9
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
func itoa(val int) string { // do it here rather than with fmt to avoid dependency
|
||||||
|
if val < 0 {
|
||||||
|
return "-" + itoa(-val)
|
||||||
|
}
|
||||||
|
var buf [32]byte // big enough for int64
|
||||||
|
i := len(buf) - 1
|
||||||
|
for val >= 10 {
|
||||||
|
buf[i] = byte(val%10 + '0')
|
||||||
|
i--
|
||||||
|
val /= 10
|
||||||
|
}
|
||||||
|
buf[i] = byte(val + '0')
|
||||||
|
return string(buf[i:])
|
||||||
|
}
|
116
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
Normal file
116
vendor/golang.org/x/sys/plan9/syscall.go
generated
vendored
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build plan9
|
||||||
|
|
||||||
|
// Package plan9 contains an interface to the low-level operating system
|
||||||
|
// primitives. OS details vary depending on the underlying system, and
|
||||||
|
// by default, godoc will display the OS-specific documentation for the current
|
||||||
|
// system. If you want godoc to display documentation for another
|
||||||
|
// system, set $GOOS and $GOARCH to the desired system. For example, if
|
||||||
|
// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS
|
||||||
|
// to freebsd and $GOARCH to arm.
|
||||||
|
//
|
||||||
|
// The primary use of this package is inside other packages that provide a more
|
||||||
|
// portable interface to the system, such as "os", "time" and "net". Use
|
||||||
|
// those packages rather than this one if you can.
|
||||||
|
//
|
||||||
|
// For details of the functions and data types in this package consult
|
||||||
|
// the manuals for the appropriate operating system.
|
||||||
|
//
|
||||||
|
// These calls return err == nil to indicate success; otherwise
|
||||||
|
// err represents an operating system error describing the failure and
|
||||||
|
// holds a value of type syscall.ErrorString.
|
||||||
|
package plan9 // import "golang.org/x/sys/plan9"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"strings"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"golang.org/x/sys/internal/unsafeheader"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ByteSliceFromString returns a NUL-terminated slice of bytes
|
||||||
|
// containing the text of s. If s contains a NUL byte at any
|
||||||
|
// location, it returns (nil, EINVAL).
|
||||||
|
func ByteSliceFromString(s string) ([]byte, error) {
|
||||||
|
if strings.IndexByte(s, 0) != -1 {
|
||||||
|
return nil, EINVAL
|
||||||
|
}
|
||||||
|
a := make([]byte, len(s)+1)
|
||||||
|
copy(a, s)
|
||||||
|
return a, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytePtrFromString returns a pointer to a NUL-terminated array of
|
||||||
|
// bytes containing the text of s. If s contains a NUL byte at any
|
||||||
|
// location, it returns (nil, EINVAL).
|
||||||
|
func BytePtrFromString(s string) (*byte, error) {
|
||||||
|
a, err := ByteSliceFromString(s)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &a[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any
|
||||||
|
// bytes after the NUL removed.
|
||||||
|
func ByteSliceToString(s []byte) string {
|
||||||
|
if i := bytes.IndexByte(s, 0); i != -1 {
|
||||||
|
s = s[:i]
|
||||||
|
}
|
||||||
|
return string(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.
|
||||||
|
// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated
|
||||||
|
// at a zero byte; if the zero byte is not present, the program may crash.
|
||||||
|
func BytePtrToString(p *byte) string {
|
||||||
|
if p == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if *p == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find NUL terminator.
|
||||||
|
n := 0
|
||||||
|
for ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {
|
||||||
|
ptr = unsafe.Pointer(uintptr(ptr) + 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
var s []byte
|
||||||
|
h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
|
||||||
|
h.Data = unsafe.Pointer(p)
|
||||||
|
h.Len = n
|
||||||
|
h.Cap = n
|
||||||
|
|
||||||
|
return string(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Single-word zero for use when we need a valid pointer to 0 bytes.
|
||||||
|
// See mksyscall.pl.
|
||||||
|
var _zero uintptr
|
||||||
|
|
||||||
|
func (ts *Timespec) Unix() (sec int64, nsec int64) {
|
||||||
|
return int64(ts.Sec), int64(ts.Nsec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tv *Timeval) Unix() (sec int64, nsec int64) {
|
||||||
|
return int64(tv.Sec), int64(tv.Usec) * 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ts *Timespec) Nano() int64 {
|
||||||
|
return int64(ts.Sec)*1e9 + int64(ts.Nsec)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tv *Timeval) Nano() int64 {
|
||||||
|
return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000
|
||||||
|
}
|
||||||
|
|
||||||
|
// use is a no-op, but the compiler cannot see that it is.
|
||||||
|
// Calling use(p) ensures that p is kept live until that point.
|
||||||
|
//go:noescape
|
||||||
|
func use(p unsafe.Pointer)
|
349
vendor/golang.org/x/sys/plan9/syscall_plan9.go
generated
vendored
Normal file
349
vendor/golang.org/x/sys/plan9/syscall_plan9.go
generated
vendored
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
// Copyright 2011 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Plan 9 system calls.
|
||||||
|
// This file is compiled as ordinary Go code,
|
||||||
|
// but it is also input to mksyscall,
|
||||||
|
// which parses the //sys lines and generates system call stubs.
|
||||||
|
// Note that sometimes we use a lowercase //sys name and
|
||||||
|
// wrap it in our own nicer implementation.
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Note is a string describing a process note.
|
||||||
|
// It implements the os.Signal interface.
|
||||||
|
type Note string
|
||||||
|
|
||||||
|
func (n Note) Signal() {}
|
||||||
|
|
||||||
|
func (n Note) String() string {
|
||||||
|
return string(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
Stdin = 0
|
||||||
|
Stdout = 1
|
||||||
|
Stderr = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
// For testing: clients can set this flag to force
|
||||||
|
// creation of IPv6 sockets to return EAFNOSUPPORT.
|
||||||
|
var SocketDisableIPv6 bool
|
||||||
|
|
||||||
|
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.ErrorString)
|
||||||
|
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.ErrorString)
|
||||||
|
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)
|
||||||
|
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
|
||||||
|
|
||||||
|
func atoi(b []byte) (n uint) {
|
||||||
|
n = 0
|
||||||
|
for i := 0; i < len(b); i++ {
|
||||||
|
n = n*10 + uint(b[i]-'0')
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func cstring(s []byte) string {
|
||||||
|
i := bytes.IndexByte(s, 0)
|
||||||
|
if i == -1 {
|
||||||
|
i = len(s)
|
||||||
|
}
|
||||||
|
return string(s[:i])
|
||||||
|
}
|
||||||
|
|
||||||
|
func errstr() string {
|
||||||
|
var buf [ERRMAX]byte
|
||||||
|
|
||||||
|
RawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0)
|
||||||
|
|
||||||
|
buf[len(buf)-1] = 0
|
||||||
|
return cstring(buf[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implemented in assembly to import from runtime.
|
||||||
|
func exit(code int)
|
||||||
|
|
||||||
|
func Exit(code int) { exit(code) }
|
||||||
|
|
||||||
|
func readnum(path string) (uint, error) {
|
||||||
|
var b [12]byte
|
||||||
|
|
||||||
|
fd, e := Open(path, O_RDONLY)
|
||||||
|
if e != nil {
|
||||||
|
return 0, e
|
||||||
|
}
|
||||||
|
defer Close(fd)
|
||||||
|
|
||||||
|
n, e := Pread(fd, b[:], 0)
|
||||||
|
|
||||||
|
if e != nil {
|
||||||
|
return 0, e
|
||||||
|
}
|
||||||
|
|
||||||
|
m := 0
|
||||||
|
for ; m < n && b[m] == ' '; m++ {
|
||||||
|
}
|
||||||
|
|
||||||
|
return atoi(b[m : n-1]), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getpid() (pid int) {
|
||||||
|
n, _ := readnum("#c/pid")
|
||||||
|
return int(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getppid() (ppid int) {
|
||||||
|
n, _ := readnum("#c/ppid")
|
||||||
|
return int(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Read(fd int, p []byte) (n int, err error) {
|
||||||
|
return Pread(fd, p, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Write(fd int, p []byte) (n int, err error) {
|
||||||
|
return Pwrite(fd, p, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ioSync int64
|
||||||
|
|
||||||
|
//sys fd2path(fd int, buf []byte) (err error)
|
||||||
|
func Fd2path(fd int) (path string, err error) {
|
||||||
|
var buf [512]byte
|
||||||
|
|
||||||
|
e := fd2path(fd, buf[:])
|
||||||
|
if e != nil {
|
||||||
|
return "", e
|
||||||
|
}
|
||||||
|
return cstring(buf[:]), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys pipe(p *[2]int32) (err error)
|
||||||
|
func Pipe(p []int) (err error) {
|
||||||
|
if len(p) != 2 {
|
||||||
|
return syscall.ErrorString("bad arg in system call")
|
||||||
|
}
|
||||||
|
var pp [2]int32
|
||||||
|
err = pipe(&pp)
|
||||||
|
p[0] = int(pp[0])
|
||||||
|
p[1] = int(pp[1])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Underlying system call writes to newoffset via pointer.
|
||||||
|
// Implemented in assembly to avoid allocation.
|
||||||
|
func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
|
||||||
|
|
||||||
|
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
||||||
|
newoffset, e := seek(0, fd, offset, whence)
|
||||||
|
|
||||||
|
if newoffset == -1 {
|
||||||
|
err = syscall.ErrorString(e)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Mkdir(path string, mode uint32) (err error) {
|
||||||
|
fd, err := Create(path, O_RDONLY, DMDIR|mode)
|
||||||
|
|
||||||
|
if fd != -1 {
|
||||||
|
Close(fd)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type Waitmsg struct {
|
||||||
|
Pid int
|
||||||
|
Time [3]uint32
|
||||||
|
Msg string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w Waitmsg) Exited() bool { return true }
|
||||||
|
func (w Waitmsg) Signaled() bool { return false }
|
||||||
|
|
||||||
|
func (w Waitmsg) ExitStatus() int {
|
||||||
|
if len(w.Msg) == 0 {
|
||||||
|
// a normal exit returns no message
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys await(s []byte) (n int, err error)
|
||||||
|
func Await(w *Waitmsg) (err error) {
|
||||||
|
var buf [512]byte
|
||||||
|
var f [5][]byte
|
||||||
|
|
||||||
|
n, err := await(buf[:])
|
||||||
|
|
||||||
|
if err != nil || w == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
nf := 0
|
||||||
|
p := 0
|
||||||
|
for i := 0; i < n && nf < len(f)-1; i++ {
|
||||||
|
if buf[i] == ' ' {
|
||||||
|
f[nf] = buf[p:i]
|
||||||
|
p = i + 1
|
||||||
|
nf++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
f[nf] = buf[p:]
|
||||||
|
nf++
|
||||||
|
|
||||||
|
if nf != len(f) {
|
||||||
|
return syscall.ErrorString("invalid wait message")
|
||||||
|
}
|
||||||
|
w.Pid = int(atoi(f[0]))
|
||||||
|
w.Time[0] = uint32(atoi(f[1]))
|
||||||
|
w.Time[1] = uint32(atoi(f[2]))
|
||||||
|
w.Time[2] = uint32(atoi(f[3]))
|
||||||
|
w.Msg = cstring(f[4])
|
||||||
|
if w.Msg == "''" {
|
||||||
|
// await() returns '' for no error
|
||||||
|
w.Msg = ""
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Unmount(name, old string) (err error) {
|
||||||
|
fixwd()
|
||||||
|
oldp, err := BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
oldptr := uintptr(unsafe.Pointer(oldp))
|
||||||
|
|
||||||
|
var r0 uintptr
|
||||||
|
var e syscall.ErrorString
|
||||||
|
|
||||||
|
// bind(2) man page: If name is zero, everything bound or mounted upon old is unbound or unmounted.
|
||||||
|
if name == "" {
|
||||||
|
r0, _, e = Syscall(SYS_UNMOUNT, _zero, oldptr, 0)
|
||||||
|
} else {
|
||||||
|
namep, err := BytePtrFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
r0, _, e = Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(namep)), oldptr, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Fchdir(fd int) (err error) {
|
||||||
|
path, err := Fd2path(fd)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return Chdir(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Timespec struct {
|
||||||
|
Sec int32
|
||||||
|
Nsec int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Timeval struct {
|
||||||
|
Sec int32
|
||||||
|
Usec int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func NsecToTimeval(nsec int64) (tv Timeval) {
|
||||||
|
nsec += 999 // round up to microsecond
|
||||||
|
tv.Usec = int32(nsec % 1e9 / 1e3)
|
||||||
|
tv.Sec = int32(nsec / 1e9)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func nsec() int64 {
|
||||||
|
var scratch int64
|
||||||
|
|
||||||
|
r0, _, _ := Syscall(SYS_NSEC, uintptr(unsafe.Pointer(&scratch)), 0, 0)
|
||||||
|
// TODO(aram): remove hack after I fix _nsec in the pc64 kernel.
|
||||||
|
if r0 == 0 {
|
||||||
|
return scratch
|
||||||
|
}
|
||||||
|
return int64(r0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Gettimeofday(tv *Timeval) error {
|
||||||
|
nsec := nsec()
|
||||||
|
*tv = NsecToTimeval(nsec)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getpagesize() int { return 0x1000 }
|
||||||
|
|
||||||
|
func Getegid() (egid int) { return -1 }
|
||||||
|
func Geteuid() (euid int) { return -1 }
|
||||||
|
func Getgid() (gid int) { return -1 }
|
||||||
|
func Getuid() (uid int) { return -1 }
|
||||||
|
|
||||||
|
func Getgroups() (gids []int, err error) {
|
||||||
|
return make([]int, 0), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys open(path string, mode int) (fd int, err error)
|
||||||
|
func Open(path string, mode int) (fd int, err error) {
|
||||||
|
fixwd()
|
||||||
|
return open(path, mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys create(path string, mode int, perm uint32) (fd int, err error)
|
||||||
|
func Create(path string, mode int, perm uint32) (fd int, err error) {
|
||||||
|
fixwd()
|
||||||
|
return create(path, mode, perm)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys remove(path string) (err error)
|
||||||
|
func Remove(path string) error {
|
||||||
|
fixwd()
|
||||||
|
return remove(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys stat(path string, edir []byte) (n int, err error)
|
||||||
|
func Stat(path string, edir []byte) (n int, err error) {
|
||||||
|
fixwd()
|
||||||
|
return stat(path, edir)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys bind(name string, old string, flag int) (err error)
|
||||||
|
func Bind(name string, old string, flag int) (err error) {
|
||||||
|
fixwd()
|
||||||
|
return bind(name, old, flag)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys mount(fd int, afd int, old string, flag int, aname string) (err error)
|
||||||
|
func Mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
||||||
|
fixwd()
|
||||||
|
return mount(fd, afd, old, flag, aname)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys wstat(path string, edir []byte) (err error)
|
||||||
|
func Wstat(path string, edir []byte) (err error) {
|
||||||
|
fixwd()
|
||||||
|
return wstat(path, edir)
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys chdir(path string) (err error)
|
||||||
|
//sys Dup(oldfd int, newfd int) (fd int, err error)
|
||||||
|
//sys Pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
|
//sys Pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
|
//sys Close(fd int) (err error)
|
||||||
|
//sys Fstat(fd int, edir []byte) (n int, err error)
|
||||||
|
//sys Fwstat(fd int, edir []byte) (err error)
|
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
generated
vendored
Normal file
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go
generated
vendored
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
// go run mksyscall.go -l32 -plan9 -tags plan9,386 syscall_plan9.go
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
// +build plan9,386
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fd2path(fd int, buf []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(buf) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&buf[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pipe(p *[2]int32) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func await(s []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(s) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&s[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func open(path string, mode int) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func create(path string, mode int, perm uint32) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func remove(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func stat(path string, edir []byte) (n int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func bind(name string, old string, flag int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(aname)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func wstat(path string, edir []byte) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func chdir(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Dup(oldfd int, newfd int) (fd int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Close(fd int) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstat(fd int, edir []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fwstat(fd int, edir []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
generated
vendored
Normal file
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go
generated
vendored
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
// go run mksyscall.go -l32 -plan9 -tags plan9,amd64 syscall_plan9.go
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
// +build plan9,amd64
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fd2path(fd int, buf []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(buf) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&buf[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pipe(p *[2]int32) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func await(s []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(s) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&s[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func open(path string, mode int) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func create(path string, mode int, perm uint32) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func remove(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func stat(path string, edir []byte) (n int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func bind(name string, old string, flag int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(aname)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func wstat(path string, edir []byte) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func chdir(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Dup(oldfd int, newfd int) (fd int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Close(fd int) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstat(fd int, edir []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fwstat(fd int, edir []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
generated
vendored
Normal file
284
vendor/golang.org/x/sys/plan9/zsyscall_plan9_arm.go
generated
vendored
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
// go run mksyscall.go -l32 -plan9 -tags plan9,arm syscall_plan9.go
|
||||||
|
// Code generated by the command above; see README.md. DO NOT EDIT.
|
||||||
|
|
||||||
|
// +build plan9,arm
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func fd2path(fd int, buf []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(buf) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&buf[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pipe(p *[2]int32) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func await(s []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(s) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&s[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func open(path string, mode int) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func create(path string, mode int, perm uint32) (fd int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func remove(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func stat(path string, edir []byte) (n int, err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func bind(name string, old string, flag int) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(name)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func mount(fd int, afd int, old string, flag int, aname string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(old)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 *byte
|
||||||
|
_p1, err = BytePtrFromString(aname)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func wstat(path string, edir []byte) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var _p1 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p1 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p1 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func chdir(path string) (err error) {
|
||||||
|
var _p0 *byte
|
||||||
|
_p0, err = BytePtrFromString(path)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Dup(oldfd int, newfd int) (fd int, err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0)
|
||||||
|
fd = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pread(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Pwrite(fd int, p []byte, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(p) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&p[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Close(fd int) (err error) {
|
||||||
|
r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fstat(fd int, edir []byte) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
n = int(r0)
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func Fwstat(fd int, edir []byte) (err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(edir) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&edir[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir)))
|
||||||
|
if int32(r0) == -1 {
|
||||||
|
err = e1
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
49
vendor/golang.org/x/sys/plan9/zsysnum_plan9.go
generated
vendored
Normal file
49
vendor/golang.org/x/sys/plan9/zsysnum_plan9.go
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h
|
||||||
|
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
||||||
|
|
||||||
|
package plan9
|
||||||
|
|
||||||
|
const (
|
||||||
|
SYS_SYSR1 = 0
|
||||||
|
SYS_BIND = 2
|
||||||
|
SYS_CHDIR = 3
|
||||||
|
SYS_CLOSE = 4
|
||||||
|
SYS_DUP = 5
|
||||||
|
SYS_ALARM = 6
|
||||||
|
SYS_EXEC = 7
|
||||||
|
SYS_EXITS = 8
|
||||||
|
SYS_FAUTH = 10
|
||||||
|
SYS_SEGBRK = 12
|
||||||
|
SYS_OPEN = 14
|
||||||
|
SYS_OSEEK = 16
|
||||||
|
SYS_SLEEP = 17
|
||||||
|
SYS_RFORK = 19
|
||||||
|
SYS_PIPE = 21
|
||||||
|
SYS_CREATE = 22
|
||||||
|
SYS_FD2PATH = 23
|
||||||
|
SYS_BRK_ = 24
|
||||||
|
SYS_REMOVE = 25
|
||||||
|
SYS_NOTIFY = 28
|
||||||
|
SYS_NOTED = 29
|
||||||
|
SYS_SEGATTACH = 30
|
||||||
|
SYS_SEGDETACH = 31
|
||||||
|
SYS_SEGFREE = 32
|
||||||
|
SYS_SEGFLUSH = 33
|
||||||
|
SYS_RENDEZVOUS = 34
|
||||||
|
SYS_UNMOUNT = 35
|
||||||
|
SYS_SEMACQUIRE = 37
|
||||||
|
SYS_SEMRELEASE = 38
|
||||||
|
SYS_SEEK = 39
|
||||||
|
SYS_FVERSION = 40
|
||||||
|
SYS_ERRSTR = 41
|
||||||
|
SYS_STAT = 42
|
||||||
|
SYS_FSTAT = 43
|
||||||
|
SYS_WSTAT = 44
|
||||||
|
SYS_FWSTAT = 45
|
||||||
|
SYS_MOUNT = 46
|
||||||
|
SYS_AWAIT = 47
|
||||||
|
SYS_PREAD = 50
|
||||||
|
SYS_PWRITE = 51
|
||||||
|
SYS_TSEMACQUIRE = 52
|
||||||
|
SYS_NSEC = 53
|
||||||
|
)
|
11
vendor/golang.org/x/sys/unix/ptrace_darwin.go
generated
vendored
Normal file
11
vendor/golang.org/x/sys/unix/ptrace_darwin.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build darwin,!ios
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
func ptrace(request int, pid int, addr uintptr, data uintptr) error {
|
||||||
|
return ptrace1(request, pid, addr, data)
|
||||||
|
}
|
11
vendor/golang.org/x/sys/unix/ptrace_ios.go
generated
vendored
Normal file
11
vendor/golang.org/x/sys/unix/ptrace_ios.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build ios
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
|
||||||
|
return ENOTSUP
|
||||||
|
}
|
17
vendor/gopkg.in/yaml.v3/.travis.yml
generated
vendored
17
vendor/gopkg.in/yaml.v3/.travis.yml
generated
vendored
@ -1,17 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- "1.4.x"
|
|
||||||
- "1.5.x"
|
|
||||||
- "1.6.x"
|
|
||||||
- "1.7.x"
|
|
||||||
- "1.8.x"
|
|
||||||
- "1.9.x"
|
|
||||||
- "1.10.x"
|
|
||||||
- "1.11.x"
|
|
||||||
- "1.12.x"
|
|
||||||
- "1.13.x"
|
|
||||||
- "1.14.x"
|
|
||||||
- "tip"
|
|
||||||
|
|
||||||
go_import_path: gopkg.in/yaml.v3
|
|
50
vendor/gopkg.in/yaml.v3/LICENSE
generated
vendored
50
vendor/gopkg.in/yaml.v3/LICENSE
generated
vendored
@ -1,50 +0,0 @@
|
|||||||
|
|
||||||
This project is covered by two different licenses: MIT and Apache.
|
|
||||||
|
|
||||||
#### MIT License ####
|
|
||||||
|
|
||||||
The following files were ported to Go from C files of libyaml, and thus
|
|
||||||
are still covered by their original MIT license, with the additional
|
|
||||||
copyright staring in 2011 when the project was ported over:
|
|
||||||
|
|
||||||
apic.go emitterc.go parserc.go readerc.go scannerc.go
|
|
||||||
writerc.go yamlh.go yamlprivateh.go
|
|
||||||
|
|
||||||
Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
Copyright (c) 2006-2011 Kirill Simonov
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
### Apache License ###
|
|
||||||
|
|
||||||
All the remaining project files are covered by the Apache license:
|
|
||||||
|
|
||||||
Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
13
vendor/gopkg.in/yaml.v3/NOTICE
generated
vendored
13
vendor/gopkg.in/yaml.v3/NOTICE
generated
vendored
@ -1,13 +0,0 @@
|
|||||||
Copyright 2011-2016 Canonical Ltd.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
150
vendor/gopkg.in/yaml.v3/README.md
generated
vendored
150
vendor/gopkg.in/yaml.v3/README.md
generated
vendored
@ -1,150 +0,0 @@
|
|||||||
# YAML support for the Go language
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
------------
|
|
||||||
|
|
||||||
The yaml package enables Go programs to comfortably encode and decode YAML
|
|
||||||
values. It was developed within [Canonical](https://www.canonical.com) as
|
|
||||||
part of the [juju](https://juju.ubuntu.com) project, and is based on a
|
|
||||||
pure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)
|
|
||||||
C library to parse and generate YAML data quickly and reliably.
|
|
||||||
|
|
||||||
Compatibility
|
|
||||||
-------------
|
|
||||||
|
|
||||||
The yaml package supports most of YAML 1.2, but preserves some behavior
|
|
||||||
from 1.1 for backwards compatibility.
|
|
||||||
|
|
||||||
Specifically, as of v3 of the yaml package:
|
|
||||||
|
|
||||||
- YAML 1.1 bools (_yes/no, on/off_) are supported as long as they are being
|
|
||||||
decoded into a typed bool value. Otherwise they behave as a string. Booleans
|
|
||||||
in YAML 1.2 are _true/false_ only.
|
|
||||||
- Octals encode and decode as _0777_ per YAML 1.1, rather than _0o777_
|
|
||||||
as specified in YAML 1.2, because most parsers still use the old format.
|
|
||||||
Octals in the _0o777_ format are supported though, so new files work.
|
|
||||||
- Does not support base-60 floats. These are gone from YAML 1.2, and were
|
|
||||||
actually never supported by this package as it's clearly a poor choice.
|
|
||||||
|
|
||||||
and offers backwards
|
|
||||||
compatibility with YAML 1.1 in some cases.
|
|
||||||
1.2, including support for
|
|
||||||
anchors, tags, map merging, etc. Multi-document unmarshalling is not yet
|
|
||||||
implemented, and base-60 floats from YAML 1.1 are purposefully not
|
|
||||||
supported since they're a poor design and are gone in YAML 1.2.
|
|
||||||
|
|
||||||
Installation and usage
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
The import path for the package is *gopkg.in/yaml.v3*.
|
|
||||||
|
|
||||||
To install it, run:
|
|
||||||
|
|
||||||
go get gopkg.in/yaml.v3
|
|
||||||
|
|
||||||
API documentation
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
If opened in a browser, the import path itself leads to the API documentation:
|
|
||||||
|
|
||||||
- [https://gopkg.in/yaml.v3](https://gopkg.in/yaml.v3)
|
|
||||||
|
|
||||||
API stability
|
|
||||||
-------------
|
|
||||||
|
|
||||||
The package API for yaml v3 will remain stable as described in [gopkg.in](https://gopkg.in).
|
|
||||||
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
The yaml package is licensed under the MIT and Apache License 2.0 licenses.
|
|
||||||
Please see the LICENSE file for details.
|
|
||||||
|
|
||||||
|
|
||||||
Example
|
|
||||||
-------
|
|
||||||
|
|
||||||
```Go
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
|
||||||
)
|
|
||||||
|
|
||||||
var data = `
|
|
||||||
a: Easy!
|
|
||||||
b:
|
|
||||||
c: 2
|
|
||||||
d: [3, 4]
|
|
||||||
`
|
|
||||||
|
|
||||||
// Note: struct fields must be public in order for unmarshal to
|
|
||||||
// correctly populate the data.
|
|
||||||
type T struct {
|
|
||||||
A string
|
|
||||||
B struct {
|
|
||||||
RenamedC int `yaml:"c"`
|
|
||||||
D []int `yaml:",flow"`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
t := T{}
|
|
||||||
|
|
||||||
err := yaml.Unmarshal([]byte(data), &t)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Printf("--- t:\n%v\n\n", t)
|
|
||||||
|
|
||||||
d, err := yaml.Marshal(&t)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Printf("--- t dump:\n%s\n\n", string(d))
|
|
||||||
|
|
||||||
m := make(map[interface{}]interface{})
|
|
||||||
|
|
||||||
err = yaml.Unmarshal([]byte(data), &m)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Printf("--- m:\n%v\n\n", m)
|
|
||||||
|
|
||||||
d, err = yaml.Marshal(&m)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error: %v", err)
|
|
||||||
}
|
|
||||||
fmt.Printf("--- m dump:\n%s\n\n", string(d))
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This example will generate the following output:
|
|
||||||
|
|
||||||
```
|
|
||||||
--- t:
|
|
||||||
{Easy! {2 [3 4]}}
|
|
||||||
|
|
||||||
--- t dump:
|
|
||||||
a: Easy!
|
|
||||||
b:
|
|
||||||
c: 2
|
|
||||||
d: [3, 4]
|
|
||||||
|
|
||||||
|
|
||||||
--- m:
|
|
||||||
map[a:Easy! b:map[c:2 d:[3 4]]]
|
|
||||||
|
|
||||||
--- m dump:
|
|
||||||
a: Easy!
|
|
||||||
b:
|
|
||||||
c: 2
|
|
||||||
d:
|
|
||||||
- 3
|
|
||||||
- 4
|
|
||||||
```
|
|
||||||
|
|
747
vendor/gopkg.in/yaml.v3/apic.go
generated
vendored
747
vendor/gopkg.in/yaml.v3/apic.go
generated
vendored
@ -1,747 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
// Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
// this software and associated documentation files (the "Software"), to deal in
|
|
||||||
// the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
// of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
func yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {
|
|
||||||
//fmt.Println("yaml_insert_token", "pos:", pos, "typ:", token.typ, "head:", parser.tokens_head, "len:", len(parser.tokens))
|
|
||||||
|
|
||||||
// Check if we can move the queue at the beginning of the buffer.
|
|
||||||
if parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {
|
|
||||||
if parser.tokens_head != len(parser.tokens) {
|
|
||||||
copy(parser.tokens, parser.tokens[parser.tokens_head:])
|
|
||||||
}
|
|
||||||
parser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]
|
|
||||||
parser.tokens_head = 0
|
|
||||||
}
|
|
||||||
parser.tokens = append(parser.tokens, *token)
|
|
||||||
if pos < 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
copy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])
|
|
||||||
parser.tokens[parser.tokens_head+pos] = *token
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new parser object.
|
|
||||||
func yaml_parser_initialize(parser *yaml_parser_t) bool {
|
|
||||||
*parser = yaml_parser_t{
|
|
||||||
raw_buffer: make([]byte, 0, input_raw_buffer_size),
|
|
||||||
buffer: make([]byte, 0, input_buffer_size),
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Destroy a parser object.
|
|
||||||
func yaml_parser_delete(parser *yaml_parser_t) {
|
|
||||||
*parser = yaml_parser_t{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// String read handler.
|
|
||||||
func yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
|
|
||||||
if parser.input_pos == len(parser.input) {
|
|
||||||
return 0, io.EOF
|
|
||||||
}
|
|
||||||
n = copy(buffer, parser.input[parser.input_pos:])
|
|
||||||
parser.input_pos += n
|
|
||||||
return n, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reader read handler.
|
|
||||||
func yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {
|
|
||||||
return parser.input_reader.Read(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set a string input.
|
|
||||||
func yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {
|
|
||||||
if parser.read_handler != nil {
|
|
||||||
panic("must set the input source only once")
|
|
||||||
}
|
|
||||||
parser.read_handler = yaml_string_read_handler
|
|
||||||
parser.input = input
|
|
||||||
parser.input_pos = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set a file input.
|
|
||||||
func yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {
|
|
||||||
if parser.read_handler != nil {
|
|
||||||
panic("must set the input source only once")
|
|
||||||
}
|
|
||||||
parser.read_handler = yaml_reader_read_handler
|
|
||||||
parser.input_reader = r
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the source encoding.
|
|
||||||
func yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {
|
|
||||||
if parser.encoding != yaml_ANY_ENCODING {
|
|
||||||
panic("must set the encoding only once")
|
|
||||||
}
|
|
||||||
parser.encoding = encoding
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a new emitter object.
|
|
||||||
func yaml_emitter_initialize(emitter *yaml_emitter_t) {
|
|
||||||
*emitter = yaml_emitter_t{
|
|
||||||
buffer: make([]byte, output_buffer_size),
|
|
||||||
raw_buffer: make([]byte, 0, output_raw_buffer_size),
|
|
||||||
states: make([]yaml_emitter_state_t, 0, initial_stack_size),
|
|
||||||
events: make([]yaml_event_t, 0, initial_queue_size),
|
|
||||||
best_width: -1,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Destroy an emitter object.
|
|
||||||
func yaml_emitter_delete(emitter *yaml_emitter_t) {
|
|
||||||
*emitter = yaml_emitter_t{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// String write handler.
|
|
||||||
func yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
|
|
||||||
*emitter.output_buffer = append(*emitter.output_buffer, buffer...)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// yaml_writer_write_handler uses emitter.output_writer to write the
|
|
||||||
// emitted text.
|
|
||||||
func yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {
|
|
||||||
_, err := emitter.output_writer.Write(buffer)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set a string output.
|
|
||||||
func yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {
|
|
||||||
if emitter.write_handler != nil {
|
|
||||||
panic("must set the output target only once")
|
|
||||||
}
|
|
||||||
emitter.write_handler = yaml_string_write_handler
|
|
||||||
emitter.output_buffer = output_buffer
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set a file output.
|
|
||||||
func yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {
|
|
||||||
if emitter.write_handler != nil {
|
|
||||||
panic("must set the output target only once")
|
|
||||||
}
|
|
||||||
emitter.write_handler = yaml_writer_write_handler
|
|
||||||
emitter.output_writer = w
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the output encoding.
|
|
||||||
func yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {
|
|
||||||
if emitter.encoding != yaml_ANY_ENCODING {
|
|
||||||
panic("must set the output encoding only once")
|
|
||||||
}
|
|
||||||
emitter.encoding = encoding
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the canonical output style.
|
|
||||||
func yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {
|
|
||||||
emitter.canonical = canonical
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the indentation increment.
|
|
||||||
func yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {
|
|
||||||
if indent < 2 || indent > 9 {
|
|
||||||
indent = 2
|
|
||||||
}
|
|
||||||
emitter.best_indent = indent
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the preferred line width.
|
|
||||||
func yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {
|
|
||||||
if width < 0 {
|
|
||||||
width = -1
|
|
||||||
}
|
|
||||||
emitter.best_width = width
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set if unescaped non-ASCII characters are allowed.
|
|
||||||
func yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {
|
|
||||||
emitter.unicode = unicode
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the preferred line break character.
|
|
||||||
func yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {
|
|
||||||
emitter.line_break = line_break
|
|
||||||
}
|
|
||||||
|
|
||||||
///*
|
|
||||||
// * Destroy a token object.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(void)
|
|
||||||
//yaml_token_delete(yaml_token_t *token)
|
|
||||||
//{
|
|
||||||
// assert(token); // Non-NULL token object expected.
|
|
||||||
//
|
|
||||||
// switch (token.type)
|
|
||||||
// {
|
|
||||||
// case YAML_TAG_DIRECTIVE_TOKEN:
|
|
||||||
// yaml_free(token.data.tag_directive.handle);
|
|
||||||
// yaml_free(token.data.tag_directive.prefix);
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// case YAML_ALIAS_TOKEN:
|
|
||||||
// yaml_free(token.data.alias.value);
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// case YAML_ANCHOR_TOKEN:
|
|
||||||
// yaml_free(token.data.anchor.value);
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// case YAML_TAG_TOKEN:
|
|
||||||
// yaml_free(token.data.tag.handle);
|
|
||||||
// yaml_free(token.data.tag.suffix);
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// case YAML_SCALAR_TOKEN:
|
|
||||||
// yaml_free(token.data.scalar.value);
|
|
||||||
// break;
|
|
||||||
//
|
|
||||||
// default:
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// memset(token, 0, sizeof(yaml_token_t));
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Check if a string is a valid UTF-8 sequence.
|
|
||||||
// *
|
|
||||||
// * Check 'reader.c' for more details on UTF-8 encoding.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//static int
|
|
||||||
//yaml_check_utf8(yaml_char_t *start, size_t length)
|
|
||||||
//{
|
|
||||||
// yaml_char_t *end = start+length;
|
|
||||||
// yaml_char_t *pointer = start;
|
|
||||||
//
|
|
||||||
// while (pointer < end) {
|
|
||||||
// unsigned char octet;
|
|
||||||
// unsigned int width;
|
|
||||||
// unsigned int value;
|
|
||||||
// size_t k;
|
|
||||||
//
|
|
||||||
// octet = pointer[0];
|
|
||||||
// width = (octet & 0x80) == 0x00 ? 1 :
|
|
||||||
// (octet & 0xE0) == 0xC0 ? 2 :
|
|
||||||
// (octet & 0xF0) == 0xE0 ? 3 :
|
|
||||||
// (octet & 0xF8) == 0xF0 ? 4 : 0;
|
|
||||||
// value = (octet & 0x80) == 0x00 ? octet & 0x7F :
|
|
||||||
// (octet & 0xE0) == 0xC0 ? octet & 0x1F :
|
|
||||||
// (octet & 0xF0) == 0xE0 ? octet & 0x0F :
|
|
||||||
// (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;
|
|
||||||
// if (!width) return 0;
|
|
||||||
// if (pointer+width > end) return 0;
|
|
||||||
// for (k = 1; k < width; k ++) {
|
|
||||||
// octet = pointer[k];
|
|
||||||
// if ((octet & 0xC0) != 0x80) return 0;
|
|
||||||
// value = (value << 6) + (octet & 0x3F);
|
|
||||||
// }
|
|
||||||
// if (!((width == 1) ||
|
|
||||||
// (width == 2 && value >= 0x80) ||
|
|
||||||
// (width == 3 && value >= 0x800) ||
|
|
||||||
// (width == 4 && value >= 0x10000))) return 0;
|
|
||||||
//
|
|
||||||
// pointer += width;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return 1;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
|
|
||||||
// Create STREAM-START.
|
|
||||||
func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_STREAM_START_EVENT,
|
|
||||||
encoding: encoding,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create STREAM-END.
|
|
||||||
func yaml_stream_end_event_initialize(event *yaml_event_t) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_STREAM_END_EVENT,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create DOCUMENT-START.
|
|
||||||
func yaml_document_start_event_initialize(
|
|
||||||
event *yaml_event_t,
|
|
||||||
version_directive *yaml_version_directive_t,
|
|
||||||
tag_directives []yaml_tag_directive_t,
|
|
||||||
implicit bool,
|
|
||||||
) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_DOCUMENT_START_EVENT,
|
|
||||||
version_directive: version_directive,
|
|
||||||
tag_directives: tag_directives,
|
|
||||||
implicit: implicit,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create DOCUMENT-END.
|
|
||||||
func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_DOCUMENT_END_EVENT,
|
|
||||||
implicit: implicit,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create ALIAS.
|
|
||||||
func yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_ALIAS_EVENT,
|
|
||||||
anchor: anchor,
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create SCALAR.
|
|
||||||
func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_SCALAR_EVENT,
|
|
||||||
anchor: anchor,
|
|
||||||
tag: tag,
|
|
||||||
value: value,
|
|
||||||
implicit: plain_implicit,
|
|
||||||
quoted_implicit: quoted_implicit,
|
|
||||||
style: yaml_style_t(style),
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create SEQUENCE-START.
|
|
||||||
func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_SEQUENCE_START_EVENT,
|
|
||||||
anchor: anchor,
|
|
||||||
tag: tag,
|
|
||||||
implicit: implicit,
|
|
||||||
style: yaml_style_t(style),
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create SEQUENCE-END.
|
|
||||||
func yaml_sequence_end_event_initialize(event *yaml_event_t) bool {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_SEQUENCE_END_EVENT,
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create MAPPING-START.
|
|
||||||
func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_MAPPING_START_EVENT,
|
|
||||||
anchor: anchor,
|
|
||||||
tag: tag,
|
|
||||||
implicit: implicit,
|
|
||||||
style: yaml_style_t(style),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create MAPPING-END.
|
|
||||||
func yaml_mapping_end_event_initialize(event *yaml_event_t) {
|
|
||||||
*event = yaml_event_t{
|
|
||||||
typ: yaml_MAPPING_END_EVENT,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Destroy an event object.
|
|
||||||
func yaml_event_delete(event *yaml_event_t) {
|
|
||||||
*event = yaml_event_t{}
|
|
||||||
}
|
|
||||||
|
|
||||||
///*
|
|
||||||
// * Create a document object.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_initialize(document *yaml_document_t,
|
|
||||||
// version_directive *yaml_version_directive_t,
|
|
||||||
// tag_directives_start *yaml_tag_directive_t,
|
|
||||||
// tag_directives_end *yaml_tag_directive_t,
|
|
||||||
// start_implicit int, end_implicit int)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
// struct {
|
|
||||||
// start *yaml_node_t
|
|
||||||
// end *yaml_node_t
|
|
||||||
// top *yaml_node_t
|
|
||||||
// } nodes = { NULL, NULL, NULL }
|
|
||||||
// version_directive_copy *yaml_version_directive_t = NULL
|
|
||||||
// struct {
|
|
||||||
// start *yaml_tag_directive_t
|
|
||||||
// end *yaml_tag_directive_t
|
|
||||||
// top *yaml_tag_directive_t
|
|
||||||
// } tag_directives_copy = { NULL, NULL, NULL }
|
|
||||||
// value yaml_tag_directive_t = { NULL, NULL }
|
|
||||||
// mark yaml_mark_t = { 0, 0, 0 }
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
// assert((tag_directives_start && tag_directives_end) ||
|
|
||||||
// (tag_directives_start == tag_directives_end))
|
|
||||||
// // Valid tag directives are expected.
|
|
||||||
//
|
|
||||||
// if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error
|
|
||||||
//
|
|
||||||
// if (version_directive) {
|
|
||||||
// version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))
|
|
||||||
// if (!version_directive_copy) goto error
|
|
||||||
// version_directive_copy.major = version_directive.major
|
|
||||||
// version_directive_copy.minor = version_directive.minor
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (tag_directives_start != tag_directives_end) {
|
|
||||||
// tag_directive *yaml_tag_directive_t
|
|
||||||
// if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))
|
|
||||||
// goto error
|
|
||||||
// for (tag_directive = tag_directives_start
|
|
||||||
// tag_directive != tag_directives_end; tag_directive ++) {
|
|
||||||
// assert(tag_directive.handle)
|
|
||||||
// assert(tag_directive.prefix)
|
|
||||||
// if (!yaml_check_utf8(tag_directive.handle,
|
|
||||||
// strlen((char *)tag_directive.handle)))
|
|
||||||
// goto error
|
|
||||||
// if (!yaml_check_utf8(tag_directive.prefix,
|
|
||||||
// strlen((char *)tag_directive.prefix)))
|
|
||||||
// goto error
|
|
||||||
// value.handle = yaml_strdup(tag_directive.handle)
|
|
||||||
// value.prefix = yaml_strdup(tag_directive.prefix)
|
|
||||||
// if (!value.handle || !value.prefix) goto error
|
|
||||||
// if (!PUSH(&context, tag_directives_copy, value))
|
|
||||||
// goto error
|
|
||||||
// value.handle = NULL
|
|
||||||
// value.prefix = NULL
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,
|
|
||||||
// tag_directives_copy.start, tag_directives_copy.top,
|
|
||||||
// start_implicit, end_implicit, mark, mark)
|
|
||||||
//
|
|
||||||
// return 1
|
|
||||||
//
|
|
||||||
//error:
|
|
||||||
// STACK_DEL(&context, nodes)
|
|
||||||
// yaml_free(version_directive_copy)
|
|
||||||
// while (!STACK_EMPTY(&context, tag_directives_copy)) {
|
|
||||||
// value yaml_tag_directive_t = POP(&context, tag_directives_copy)
|
|
||||||
// yaml_free(value.handle)
|
|
||||||
// yaml_free(value.prefix)
|
|
||||||
// }
|
|
||||||
// STACK_DEL(&context, tag_directives_copy)
|
|
||||||
// yaml_free(value.handle)
|
|
||||||
// yaml_free(value.prefix)
|
|
||||||
//
|
|
||||||
// return 0
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Destroy a document object.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(void)
|
|
||||||
//yaml_document_delete(document *yaml_document_t)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
// tag_directive *yaml_tag_directive_t
|
|
||||||
//
|
|
||||||
// context.error = YAML_NO_ERROR // Eliminate a compiler warning.
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
//
|
|
||||||
// while (!STACK_EMPTY(&context, document.nodes)) {
|
|
||||||
// node yaml_node_t = POP(&context, document.nodes)
|
|
||||||
// yaml_free(node.tag)
|
|
||||||
// switch (node.type) {
|
|
||||||
// case YAML_SCALAR_NODE:
|
|
||||||
// yaml_free(node.data.scalar.value)
|
|
||||||
// break
|
|
||||||
// case YAML_SEQUENCE_NODE:
|
|
||||||
// STACK_DEL(&context, node.data.sequence.items)
|
|
||||||
// break
|
|
||||||
// case YAML_MAPPING_NODE:
|
|
||||||
// STACK_DEL(&context, node.data.mapping.pairs)
|
|
||||||
// break
|
|
||||||
// default:
|
|
||||||
// assert(0) // Should not happen.
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// STACK_DEL(&context, document.nodes)
|
|
||||||
//
|
|
||||||
// yaml_free(document.version_directive)
|
|
||||||
// for (tag_directive = document.tag_directives.start
|
|
||||||
// tag_directive != document.tag_directives.end
|
|
||||||
// tag_directive++) {
|
|
||||||
// yaml_free(tag_directive.handle)
|
|
||||||
// yaml_free(tag_directive.prefix)
|
|
||||||
// }
|
|
||||||
// yaml_free(document.tag_directives.start)
|
|
||||||
//
|
|
||||||
// memset(document, 0, sizeof(yaml_document_t))
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * Get a document node.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(yaml_node_t *)
|
|
||||||
//yaml_document_get_node(document *yaml_document_t, index int)
|
|
||||||
//{
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
//
|
|
||||||
// if (index > 0 && document.nodes.start + index <= document.nodes.top) {
|
|
||||||
// return document.nodes.start + index - 1
|
|
||||||
// }
|
|
||||||
// return NULL
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///**
|
|
||||||
// * Get the root object.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(yaml_node_t *)
|
|
||||||
//yaml_document_get_root_node(document *yaml_document_t)
|
|
||||||
//{
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
//
|
|
||||||
// if (document.nodes.top != document.nodes.start) {
|
|
||||||
// return document.nodes.start
|
|
||||||
// }
|
|
||||||
// return NULL
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Add a scalar node to a document.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_add_scalar(document *yaml_document_t,
|
|
||||||
// tag *yaml_char_t, value *yaml_char_t, length int,
|
|
||||||
// style yaml_scalar_style_t)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
// mark yaml_mark_t = { 0, 0, 0 }
|
|
||||||
// tag_copy *yaml_char_t = NULL
|
|
||||||
// value_copy *yaml_char_t = NULL
|
|
||||||
// node yaml_node_t
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
// assert(value) // Non-NULL value is expected.
|
|
||||||
//
|
|
||||||
// if (!tag) {
|
|
||||||
// tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
|
|
||||||
// tag_copy = yaml_strdup(tag)
|
|
||||||
// if (!tag_copy) goto error
|
|
||||||
//
|
|
||||||
// if (length < 0) {
|
|
||||||
// length = strlen((char *)value)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!yaml_check_utf8(value, length)) goto error
|
|
||||||
// value_copy = yaml_malloc(length+1)
|
|
||||||
// if (!value_copy) goto error
|
|
||||||
// memcpy(value_copy, value, length)
|
|
||||||
// value_copy[length] = '\0'
|
|
||||||
//
|
|
||||||
// SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)
|
|
||||||
// if (!PUSH(&context, document.nodes, node)) goto error
|
|
||||||
//
|
|
||||||
// return document.nodes.top - document.nodes.start
|
|
||||||
//
|
|
||||||
//error:
|
|
||||||
// yaml_free(tag_copy)
|
|
||||||
// yaml_free(value_copy)
|
|
||||||
//
|
|
||||||
// return 0
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Add a sequence node to a document.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_add_sequence(document *yaml_document_t,
|
|
||||||
// tag *yaml_char_t, style yaml_sequence_style_t)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
// mark yaml_mark_t = { 0, 0, 0 }
|
|
||||||
// tag_copy *yaml_char_t = NULL
|
|
||||||
// struct {
|
|
||||||
// start *yaml_node_item_t
|
|
||||||
// end *yaml_node_item_t
|
|
||||||
// top *yaml_node_item_t
|
|
||||||
// } items = { NULL, NULL, NULL }
|
|
||||||
// node yaml_node_t
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
//
|
|
||||||
// if (!tag) {
|
|
||||||
// tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
|
|
||||||
// tag_copy = yaml_strdup(tag)
|
|
||||||
// if (!tag_copy) goto error
|
|
||||||
//
|
|
||||||
// if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error
|
|
||||||
//
|
|
||||||
// SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,
|
|
||||||
// style, mark, mark)
|
|
||||||
// if (!PUSH(&context, document.nodes, node)) goto error
|
|
||||||
//
|
|
||||||
// return document.nodes.top - document.nodes.start
|
|
||||||
//
|
|
||||||
//error:
|
|
||||||
// STACK_DEL(&context, items)
|
|
||||||
// yaml_free(tag_copy)
|
|
||||||
//
|
|
||||||
// return 0
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Add a mapping node to a document.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_add_mapping(document *yaml_document_t,
|
|
||||||
// tag *yaml_char_t, style yaml_mapping_style_t)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
// mark yaml_mark_t = { 0, 0, 0 }
|
|
||||||
// tag_copy *yaml_char_t = NULL
|
|
||||||
// struct {
|
|
||||||
// start *yaml_node_pair_t
|
|
||||||
// end *yaml_node_pair_t
|
|
||||||
// top *yaml_node_pair_t
|
|
||||||
// } pairs = { NULL, NULL, NULL }
|
|
||||||
// node yaml_node_t
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document object is expected.
|
|
||||||
//
|
|
||||||
// if (!tag) {
|
|
||||||
// tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error
|
|
||||||
// tag_copy = yaml_strdup(tag)
|
|
||||||
// if (!tag_copy) goto error
|
|
||||||
//
|
|
||||||
// if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error
|
|
||||||
//
|
|
||||||
// MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,
|
|
||||||
// style, mark, mark)
|
|
||||||
// if (!PUSH(&context, document.nodes, node)) goto error
|
|
||||||
//
|
|
||||||
// return document.nodes.top - document.nodes.start
|
|
||||||
//
|
|
||||||
//error:
|
|
||||||
// STACK_DEL(&context, pairs)
|
|
||||||
// yaml_free(tag_copy)
|
|
||||||
//
|
|
||||||
// return 0
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Append an item to a sequence node.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_append_sequence_item(document *yaml_document_t,
|
|
||||||
// sequence int, item int)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document is required.
|
|
||||||
// assert(sequence > 0
|
|
||||||
// && document.nodes.start + sequence <= document.nodes.top)
|
|
||||||
// // Valid sequence id is required.
|
|
||||||
// assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)
|
|
||||||
// // A sequence node is required.
|
|
||||||
// assert(item > 0 && document.nodes.start + item <= document.nodes.top)
|
|
||||||
// // Valid item id is required.
|
|
||||||
//
|
|
||||||
// if (!PUSH(&context,
|
|
||||||
// document.nodes.start[sequence-1].data.sequence.items, item))
|
|
||||||
// return 0
|
|
||||||
//
|
|
||||||
// return 1
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
///*
|
|
||||||
// * Append a pair of a key and a value to a mapping node.
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//YAML_DECLARE(int)
|
|
||||||
//yaml_document_append_mapping_pair(document *yaml_document_t,
|
|
||||||
// mapping int, key int, value int)
|
|
||||||
//{
|
|
||||||
// struct {
|
|
||||||
// error yaml_error_type_t
|
|
||||||
// } context
|
|
||||||
//
|
|
||||||
// pair yaml_node_pair_t
|
|
||||||
//
|
|
||||||
// assert(document) // Non-NULL document is required.
|
|
||||||
// assert(mapping > 0
|
|
||||||
// && document.nodes.start + mapping <= document.nodes.top)
|
|
||||||
// // Valid mapping id is required.
|
|
||||||
// assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)
|
|
||||||
// // A mapping node is required.
|
|
||||||
// assert(key > 0 && document.nodes.start + key <= document.nodes.top)
|
|
||||||
// // Valid key id is required.
|
|
||||||
// assert(value > 0 && document.nodes.start + value <= document.nodes.top)
|
|
||||||
// // Valid value id is required.
|
|
||||||
//
|
|
||||||
// pair.key = key
|
|
||||||
// pair.value = value
|
|
||||||
//
|
|
||||||
// if (!PUSH(&context,
|
|
||||||
// document.nodes.start[mapping-1].data.mapping.pairs, pair))
|
|
||||||
// return 0
|
|
||||||
//
|
|
||||||
// return 1
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//
|
|
948
vendor/gopkg.in/yaml.v3/decode.go
generated
vendored
948
vendor/gopkg.in/yaml.v3/decode.go
generated
vendored
@ -1,948 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding"
|
|
||||||
"encoding/base64"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"math"
|
|
||||||
"reflect"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// Parser, produces a node tree out of a libyaml event stream.
|
|
||||||
|
|
||||||
type parser struct {
|
|
||||||
parser yaml_parser_t
|
|
||||||
event yaml_event_t
|
|
||||||
doc *Node
|
|
||||||
anchors map[string]*Node
|
|
||||||
doneInit bool
|
|
||||||
textless bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func newParser(b []byte) *parser {
|
|
||||||
p := parser{}
|
|
||||||
if !yaml_parser_initialize(&p.parser) {
|
|
||||||
panic("failed to initialize YAML emitter")
|
|
||||||
}
|
|
||||||
if len(b) == 0 {
|
|
||||||
b = []byte{'\n'}
|
|
||||||
}
|
|
||||||
yaml_parser_set_input_string(&p.parser, b)
|
|
||||||
return &p
|
|
||||||
}
|
|
||||||
|
|
||||||
func newParserFromReader(r io.Reader) *parser {
|
|
||||||
p := parser{}
|
|
||||||
if !yaml_parser_initialize(&p.parser) {
|
|
||||||
panic("failed to initialize YAML emitter")
|
|
||||||
}
|
|
||||||
yaml_parser_set_input_reader(&p.parser, r)
|
|
||||||
return &p
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) init() {
|
|
||||||
if p.doneInit {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
p.anchors = make(map[string]*Node)
|
|
||||||
p.expect(yaml_STREAM_START_EVENT)
|
|
||||||
p.doneInit = true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) destroy() {
|
|
||||||
if p.event.typ != yaml_NO_EVENT {
|
|
||||||
yaml_event_delete(&p.event)
|
|
||||||
}
|
|
||||||
yaml_parser_delete(&p.parser)
|
|
||||||
}
|
|
||||||
|
|
||||||
// expect consumes an event from the event stream and
|
|
||||||
// checks that it's of the expected type.
|
|
||||||
func (p *parser) expect(e yaml_event_type_t) {
|
|
||||||
if p.event.typ == yaml_NO_EVENT {
|
|
||||||
if !yaml_parser_parse(&p.parser, &p.event) {
|
|
||||||
p.fail()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if p.event.typ == yaml_STREAM_END_EVENT {
|
|
||||||
failf("attempted to go past the end of stream; corrupted value?")
|
|
||||||
}
|
|
||||||
if p.event.typ != e {
|
|
||||||
p.parser.problem = fmt.Sprintf("expected %s event but got %s", e, p.event.typ)
|
|
||||||
p.fail()
|
|
||||||
}
|
|
||||||
yaml_event_delete(&p.event)
|
|
||||||
p.event.typ = yaml_NO_EVENT
|
|
||||||
}
|
|
||||||
|
|
||||||
// peek peeks at the next event in the event stream,
|
|
||||||
// puts the results into p.event and returns the event type.
|
|
||||||
func (p *parser) peek() yaml_event_type_t {
|
|
||||||
if p.event.typ != yaml_NO_EVENT {
|
|
||||||
return p.event.typ
|
|
||||||
}
|
|
||||||
if !yaml_parser_parse(&p.parser, &p.event) {
|
|
||||||
p.fail()
|
|
||||||
}
|
|
||||||
return p.event.typ
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) fail() {
|
|
||||||
var where string
|
|
||||||
var line int
|
|
||||||
if p.parser.context_mark.line != 0 {
|
|
||||||
line = p.parser.context_mark.line
|
|
||||||
// Scanner errors don't iterate line before returning error
|
|
||||||
if p.parser.error == yaml_SCANNER_ERROR {
|
|
||||||
line++
|
|
||||||
}
|
|
||||||
} else if p.parser.problem_mark.line != 0 {
|
|
||||||
line = p.parser.problem_mark.line
|
|
||||||
// Scanner errors don't iterate line before returning error
|
|
||||||
if p.parser.error == yaml_SCANNER_ERROR {
|
|
||||||
line++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if line != 0 {
|
|
||||||
where = "line " + strconv.Itoa(line) + ": "
|
|
||||||
}
|
|
||||||
var msg string
|
|
||||||
if len(p.parser.problem) > 0 {
|
|
||||||
msg = p.parser.problem
|
|
||||||
} else {
|
|
||||||
msg = "unknown problem parsing YAML content"
|
|
||||||
}
|
|
||||||
failf("%s%s", where, msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) anchor(n *Node, anchor []byte) {
|
|
||||||
if anchor != nil {
|
|
||||||
n.Anchor = string(anchor)
|
|
||||||
p.anchors[n.Anchor] = n
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) parse() *Node {
|
|
||||||
p.init()
|
|
||||||
switch p.peek() {
|
|
||||||
case yaml_SCALAR_EVENT:
|
|
||||||
return p.scalar()
|
|
||||||
case yaml_ALIAS_EVENT:
|
|
||||||
return p.alias()
|
|
||||||
case yaml_MAPPING_START_EVENT:
|
|
||||||
return p.mapping()
|
|
||||||
case yaml_SEQUENCE_START_EVENT:
|
|
||||||
return p.sequence()
|
|
||||||
case yaml_DOCUMENT_START_EVENT:
|
|
||||||
return p.document()
|
|
||||||
case yaml_STREAM_END_EVENT:
|
|
||||||
// Happens when attempting to decode an empty buffer.
|
|
||||||
return nil
|
|
||||||
case yaml_TAIL_COMMENT_EVENT:
|
|
||||||
panic("internal error: unexpected tail comment event (please report)")
|
|
||||||
default:
|
|
||||||
panic("internal error: attempted to parse unknown event (please report): " + p.event.typ.String())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) node(kind Kind, defaultTag, tag, value string) *Node {
|
|
||||||
var style Style
|
|
||||||
if tag != "" && tag != "!" {
|
|
||||||
tag = shortTag(tag)
|
|
||||||
style = TaggedStyle
|
|
||||||
} else if defaultTag != "" {
|
|
||||||
tag = defaultTag
|
|
||||||
} else if kind == ScalarNode {
|
|
||||||
tag, _ = resolve("", value)
|
|
||||||
}
|
|
||||||
n := &Node{
|
|
||||||
Kind: kind,
|
|
||||||
Tag: tag,
|
|
||||||
Value: value,
|
|
||||||
Style: style,
|
|
||||||
}
|
|
||||||
if !p.textless {
|
|
||||||
n.Line = p.event.start_mark.line + 1
|
|
||||||
n.Column = p.event.start_mark.column + 1
|
|
||||||
n.HeadComment = string(p.event.head_comment)
|
|
||||||
n.LineComment = string(p.event.line_comment)
|
|
||||||
n.FootComment = string(p.event.foot_comment)
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) parseChild(parent *Node) *Node {
|
|
||||||
child := p.parse()
|
|
||||||
parent.Content = append(parent.Content, child)
|
|
||||||
return child
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) document() *Node {
|
|
||||||
n := p.node(DocumentNode, "", "", "")
|
|
||||||
p.doc = n
|
|
||||||
p.expect(yaml_DOCUMENT_START_EVENT)
|
|
||||||
p.parseChild(n)
|
|
||||||
if p.peek() == yaml_DOCUMENT_END_EVENT {
|
|
||||||
n.FootComment = string(p.event.foot_comment)
|
|
||||||
}
|
|
||||||
p.expect(yaml_DOCUMENT_END_EVENT)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) alias() *Node {
|
|
||||||
n := p.node(AliasNode, "", "", string(p.event.anchor))
|
|
||||||
n.Alias = p.anchors[n.Value]
|
|
||||||
if n.Alias == nil {
|
|
||||||
failf("unknown anchor '%s' referenced", n.Value)
|
|
||||||
}
|
|
||||||
p.expect(yaml_ALIAS_EVENT)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) scalar() *Node {
|
|
||||||
var parsedStyle = p.event.scalar_style()
|
|
||||||
var nodeStyle Style
|
|
||||||
switch {
|
|
||||||
case parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0:
|
|
||||||
nodeStyle = DoubleQuotedStyle
|
|
||||||
case parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0:
|
|
||||||
nodeStyle = SingleQuotedStyle
|
|
||||||
case parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0:
|
|
||||||
nodeStyle = LiteralStyle
|
|
||||||
case parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0:
|
|
||||||
nodeStyle = FoldedStyle
|
|
||||||
}
|
|
||||||
var nodeValue = string(p.event.value)
|
|
||||||
var nodeTag = string(p.event.tag)
|
|
||||||
var defaultTag string
|
|
||||||
if nodeStyle == 0 {
|
|
||||||
if nodeValue == "<<" {
|
|
||||||
defaultTag = mergeTag
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
defaultTag = strTag
|
|
||||||
}
|
|
||||||
n := p.node(ScalarNode, defaultTag, nodeTag, nodeValue)
|
|
||||||
n.Style |= nodeStyle
|
|
||||||
p.anchor(n, p.event.anchor)
|
|
||||||
p.expect(yaml_SCALAR_EVENT)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) sequence() *Node {
|
|
||||||
n := p.node(SequenceNode, seqTag, string(p.event.tag), "")
|
|
||||||
if p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 {
|
|
||||||
n.Style |= FlowStyle
|
|
||||||
}
|
|
||||||
p.anchor(n, p.event.anchor)
|
|
||||||
p.expect(yaml_SEQUENCE_START_EVENT)
|
|
||||||
for p.peek() != yaml_SEQUENCE_END_EVENT {
|
|
||||||
p.parseChild(n)
|
|
||||||
}
|
|
||||||
n.LineComment = string(p.event.line_comment)
|
|
||||||
n.FootComment = string(p.event.foot_comment)
|
|
||||||
p.expect(yaml_SEQUENCE_END_EVENT)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) mapping() *Node {
|
|
||||||
n := p.node(MappingNode, mapTag, string(p.event.tag), "")
|
|
||||||
block := true
|
|
||||||
if p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 {
|
|
||||||
block = false
|
|
||||||
n.Style |= FlowStyle
|
|
||||||
}
|
|
||||||
p.anchor(n, p.event.anchor)
|
|
||||||
p.expect(yaml_MAPPING_START_EVENT)
|
|
||||||
for p.peek() != yaml_MAPPING_END_EVENT {
|
|
||||||
k := p.parseChild(n)
|
|
||||||
if block && k.FootComment != "" {
|
|
||||||
// Must be a foot comment for the prior value when being dedented.
|
|
||||||
if len(n.Content) > 2 {
|
|
||||||
n.Content[len(n.Content)-3].FootComment = k.FootComment
|
|
||||||
k.FootComment = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
v := p.parseChild(n)
|
|
||||||
if k.FootComment == "" && v.FootComment != "" {
|
|
||||||
k.FootComment = v.FootComment
|
|
||||||
v.FootComment = ""
|
|
||||||
}
|
|
||||||
if p.peek() == yaml_TAIL_COMMENT_EVENT {
|
|
||||||
if k.FootComment == "" {
|
|
||||||
k.FootComment = string(p.event.foot_comment)
|
|
||||||
}
|
|
||||||
p.expect(yaml_TAIL_COMMENT_EVENT)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
n.LineComment = string(p.event.line_comment)
|
|
||||||
n.FootComment = string(p.event.foot_comment)
|
|
||||||
if n.Style&FlowStyle == 0 && n.FootComment != "" && len(n.Content) > 1 {
|
|
||||||
n.Content[len(n.Content)-2].FootComment = n.FootComment
|
|
||||||
n.FootComment = ""
|
|
||||||
}
|
|
||||||
p.expect(yaml_MAPPING_END_EVENT)
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// Decoder, unmarshals a node into a provided value.
|
|
||||||
|
|
||||||
type decoder struct {
|
|
||||||
doc *Node
|
|
||||||
aliases map[*Node]bool
|
|
||||||
terrors []string
|
|
||||||
|
|
||||||
stringMapType reflect.Type
|
|
||||||
generalMapType reflect.Type
|
|
||||||
|
|
||||||
knownFields bool
|
|
||||||
uniqueKeys bool
|
|
||||||
decodeCount int
|
|
||||||
aliasCount int
|
|
||||||
aliasDepth int
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
nodeType = reflect.TypeOf(Node{})
|
|
||||||
durationType = reflect.TypeOf(time.Duration(0))
|
|
||||||
stringMapType = reflect.TypeOf(map[string]interface{}{})
|
|
||||||
generalMapType = reflect.TypeOf(map[interface{}]interface{}{})
|
|
||||||
ifaceType = generalMapType.Elem()
|
|
||||||
timeType = reflect.TypeOf(time.Time{})
|
|
||||||
ptrTimeType = reflect.TypeOf(&time.Time{})
|
|
||||||
)
|
|
||||||
|
|
||||||
func newDecoder() *decoder {
|
|
||||||
d := &decoder{
|
|
||||||
stringMapType: stringMapType,
|
|
||||||
generalMapType: generalMapType,
|
|
||||||
uniqueKeys: true,
|
|
||||||
}
|
|
||||||
d.aliases = make(map[*Node]bool)
|
|
||||||
return d
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) terror(n *Node, tag string, out reflect.Value) {
|
|
||||||
if n.Tag != "" {
|
|
||||||
tag = n.Tag
|
|
||||||
}
|
|
||||||
value := n.Value
|
|
||||||
if tag != seqTag && tag != mapTag {
|
|
||||||
if len(value) > 10 {
|
|
||||||
value = " `" + value[:7] + "...`"
|
|
||||||
} else {
|
|
||||||
value = " `" + value + "`"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
d.terrors = append(d.terrors, fmt.Sprintf("line %d: cannot unmarshal %s%s into %s", n.Line, shortTag(tag), value, out.Type()))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) {
|
|
||||||
err := u.UnmarshalYAML(n)
|
|
||||||
if e, ok := err.(*TypeError); ok {
|
|
||||||
d.terrors = append(d.terrors, e.Errors...)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
fail(err)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) {
|
|
||||||
terrlen := len(d.terrors)
|
|
||||||
err := u.UnmarshalYAML(func(v interface{}) (err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
d.unmarshal(n, reflect.ValueOf(v))
|
|
||||||
if len(d.terrors) > terrlen {
|
|
||||||
issues := d.terrors[terrlen:]
|
|
||||||
d.terrors = d.terrors[:terrlen]
|
|
||||||
return &TypeError{issues}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if e, ok := err.(*TypeError); ok {
|
|
||||||
d.terrors = append(d.terrors, e.Errors...)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
fail(err)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// d.prepare initializes and dereferences pointers and calls UnmarshalYAML
|
|
||||||
// if a value is found to implement it.
|
|
||||||
// It returns the initialized and dereferenced out value, whether
|
|
||||||
// unmarshalling was already done by UnmarshalYAML, and if so whether
|
|
||||||
// its types unmarshalled appropriately.
|
|
||||||
//
|
|
||||||
// If n holds a null value, prepare returns before doing anything.
|
|
||||||
func (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
|
|
||||||
if n.ShortTag() == nullTag || n.Kind == 0 && n.IsZero() {
|
|
||||||
return out, false, false
|
|
||||||
}
|
|
||||||
again := true
|
|
||||||
for again {
|
|
||||||
again = false
|
|
||||||
if out.Kind() == reflect.Ptr {
|
|
||||||
if out.IsNil() {
|
|
||||||
out.Set(reflect.New(out.Type().Elem()))
|
|
||||||
}
|
|
||||||
out = out.Elem()
|
|
||||||
again = true
|
|
||||||
}
|
|
||||||
if out.CanAddr() {
|
|
||||||
outi := out.Addr().Interface()
|
|
||||||
if u, ok := outi.(Unmarshaler); ok {
|
|
||||||
good = d.callUnmarshaler(n, u)
|
|
||||||
return out, true, good
|
|
||||||
}
|
|
||||||
if u, ok := outi.(obsoleteUnmarshaler); ok {
|
|
||||||
good = d.callObsoleteUnmarshaler(n, u)
|
|
||||||
return out, true, good
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return out, false, false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) {
|
|
||||||
if n.ShortTag() == nullTag {
|
|
||||||
return reflect.Value{}
|
|
||||||
}
|
|
||||||
for _, num := range index {
|
|
||||||
for {
|
|
||||||
if v.Kind() == reflect.Ptr {
|
|
||||||
if v.IsNil() {
|
|
||||||
v.Set(reflect.New(v.Type().Elem()))
|
|
||||||
}
|
|
||||||
v = v.Elem()
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
v = v.Field(num)
|
|
||||||
}
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
// 400,000 decode operations is ~500kb of dense object declarations, or
|
|
||||||
// ~5kb of dense object declarations with 10000% alias expansion
|
|
||||||
alias_ratio_range_low = 400000
|
|
||||||
|
|
||||||
// 4,000,000 decode operations is ~5MB of dense object declarations, or
|
|
||||||
// ~4.5MB of dense object declarations with 10% alias expansion
|
|
||||||
alias_ratio_range_high = 4000000
|
|
||||||
|
|
||||||
// alias_ratio_range is the range over which we scale allowed alias ratios
|
|
||||||
alias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low)
|
|
||||||
)
|
|
||||||
|
|
||||||
func allowedAliasRatio(decodeCount int) float64 {
|
|
||||||
switch {
|
|
||||||
case decodeCount <= alias_ratio_range_low:
|
|
||||||
// allow 99% to come from alias expansion for small-to-medium documents
|
|
||||||
return 0.99
|
|
||||||
case decodeCount >= alias_ratio_range_high:
|
|
||||||
// allow 10% to come from alias expansion for very large documents
|
|
||||||
return 0.10
|
|
||||||
default:
|
|
||||||
// scale smoothly from 99% down to 10% over the range.
|
|
||||||
// this maps to 396,000 - 400,000 allowed alias-driven decodes over the range.
|
|
||||||
// 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps).
|
|
||||||
return 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) {
|
|
||||||
d.decodeCount++
|
|
||||||
if d.aliasDepth > 0 {
|
|
||||||
d.aliasCount++
|
|
||||||
}
|
|
||||||
if d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) {
|
|
||||||
failf("document contains excessive aliasing")
|
|
||||||
}
|
|
||||||
if out.Type() == nodeType {
|
|
||||||
out.Set(reflect.ValueOf(n).Elem())
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
switch n.Kind {
|
|
||||||
case DocumentNode:
|
|
||||||
return d.document(n, out)
|
|
||||||
case AliasNode:
|
|
||||||
return d.alias(n, out)
|
|
||||||
}
|
|
||||||
out, unmarshaled, good := d.prepare(n, out)
|
|
||||||
if unmarshaled {
|
|
||||||
return good
|
|
||||||
}
|
|
||||||
switch n.Kind {
|
|
||||||
case ScalarNode:
|
|
||||||
good = d.scalar(n, out)
|
|
||||||
case MappingNode:
|
|
||||||
good = d.mapping(n, out)
|
|
||||||
case SequenceNode:
|
|
||||||
good = d.sequence(n, out)
|
|
||||||
case 0:
|
|
||||||
if n.IsZero() {
|
|
||||||
return d.null(out)
|
|
||||||
}
|
|
||||||
fallthrough
|
|
||||||
default:
|
|
||||||
failf("cannot decode node with unknown kind %d", n.Kind)
|
|
||||||
}
|
|
||||||
return good
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) document(n *Node, out reflect.Value) (good bool) {
|
|
||||||
if len(n.Content) == 1 {
|
|
||||||
d.doc = n
|
|
||||||
d.unmarshal(n.Content[0], out)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) alias(n *Node, out reflect.Value) (good bool) {
|
|
||||||
if d.aliases[n] {
|
|
||||||
// TODO this could actually be allowed in some circumstances.
|
|
||||||
failf("anchor '%s' value contains itself", n.Value)
|
|
||||||
}
|
|
||||||
d.aliases[n] = true
|
|
||||||
d.aliasDepth++
|
|
||||||
good = d.unmarshal(n.Alias, out)
|
|
||||||
d.aliasDepth--
|
|
||||||
delete(d.aliases, n)
|
|
||||||
return good
|
|
||||||
}
|
|
||||||
|
|
||||||
var zeroValue reflect.Value
|
|
||||||
|
|
||||||
func resetMap(out reflect.Value) {
|
|
||||||
for _, k := range out.MapKeys() {
|
|
||||||
out.SetMapIndex(k, zeroValue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) null(out reflect.Value) bool {
|
|
||||||
if out.CanAddr() {
|
|
||||||
switch out.Kind() {
|
|
||||||
case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice:
|
|
||||||
out.Set(reflect.Zero(out.Type()))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) scalar(n *Node, out reflect.Value) bool {
|
|
||||||
var tag string
|
|
||||||
var resolved interface{}
|
|
||||||
if n.indicatedString() {
|
|
||||||
tag = strTag
|
|
||||||
resolved = n.Value
|
|
||||||
} else {
|
|
||||||
tag, resolved = resolve(n.Tag, n.Value)
|
|
||||||
if tag == binaryTag {
|
|
||||||
data, err := base64.StdEncoding.DecodeString(resolved.(string))
|
|
||||||
if err != nil {
|
|
||||||
failf("!!binary value contains invalid base64 data")
|
|
||||||
}
|
|
||||||
resolved = string(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resolved == nil {
|
|
||||||
return d.null(out)
|
|
||||||
}
|
|
||||||
if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
|
|
||||||
// We've resolved to exactly the type we want, so use that.
|
|
||||||
out.Set(resolvedv)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
// Perhaps we can use the value as a TextUnmarshaler to
|
|
||||||
// set its value.
|
|
||||||
if out.CanAddr() {
|
|
||||||
u, ok := out.Addr().Interface().(encoding.TextUnmarshaler)
|
|
||||||
if ok {
|
|
||||||
var text []byte
|
|
||||||
if tag == binaryTag {
|
|
||||||
text = []byte(resolved.(string))
|
|
||||||
} else {
|
|
||||||
// We let any value be unmarshaled into TextUnmarshaler.
|
|
||||||
// That might be more lax than we'd like, but the
|
|
||||||
// TextUnmarshaler itself should bowl out any dubious values.
|
|
||||||
text = []byte(n.Value)
|
|
||||||
}
|
|
||||||
err := u.UnmarshalText(text)
|
|
||||||
if err != nil {
|
|
||||||
fail(err)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch out.Kind() {
|
|
||||||
case reflect.String:
|
|
||||||
if tag == binaryTag {
|
|
||||||
out.SetString(resolved.(string))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
out.SetString(n.Value)
|
|
||||||
return true
|
|
||||||
case reflect.Interface:
|
|
||||||
out.Set(reflect.ValueOf(resolved))
|
|
||||||
return true
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
// This used to work in v2, but it's very unfriendly.
|
|
||||||
isDuration := out.Type() == durationType
|
|
||||||
|
|
||||||
switch resolved := resolved.(type) {
|
|
||||||
case int:
|
|
||||||
if !isDuration && !out.OverflowInt(int64(resolved)) {
|
|
||||||
out.SetInt(int64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case int64:
|
|
||||||
if !isDuration && !out.OverflowInt(resolved) {
|
|
||||||
out.SetInt(resolved)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case uint64:
|
|
||||||
if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
|
|
||||||
out.SetInt(int64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case float64:
|
|
||||||
if !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {
|
|
||||||
out.SetInt(int64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case string:
|
|
||||||
if out.Type() == durationType {
|
|
||||||
d, err := time.ParseDuration(resolved)
|
|
||||||
if err == nil {
|
|
||||||
out.SetInt(int64(d))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
switch resolved := resolved.(type) {
|
|
||||||
case int:
|
|
||||||
if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
|
|
||||||
out.SetUint(uint64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case int64:
|
|
||||||
if resolved >= 0 && !out.OverflowUint(uint64(resolved)) {
|
|
||||||
out.SetUint(uint64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case uint64:
|
|
||||||
if !out.OverflowUint(uint64(resolved)) {
|
|
||||||
out.SetUint(uint64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case float64:
|
|
||||||
if resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {
|
|
||||||
out.SetUint(uint64(resolved))
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case reflect.Bool:
|
|
||||||
switch resolved := resolved.(type) {
|
|
||||||
case bool:
|
|
||||||
out.SetBool(resolved)
|
|
||||||
return true
|
|
||||||
case string:
|
|
||||||
// This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html).
|
|
||||||
// It only works if explicitly attempting to unmarshal into a typed bool value.
|
|
||||||
switch resolved {
|
|
||||||
case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON":
|
|
||||||
out.SetBool(true)
|
|
||||||
return true
|
|
||||||
case "n", "N", "no", "No", "NO", "off", "Off", "OFF":
|
|
||||||
out.SetBool(false)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
switch resolved := resolved.(type) {
|
|
||||||
case int:
|
|
||||||
out.SetFloat(float64(resolved))
|
|
||||||
return true
|
|
||||||
case int64:
|
|
||||||
out.SetFloat(float64(resolved))
|
|
||||||
return true
|
|
||||||
case uint64:
|
|
||||||
out.SetFloat(float64(resolved))
|
|
||||||
return true
|
|
||||||
case float64:
|
|
||||||
out.SetFloat(resolved)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case reflect.Struct:
|
|
||||||
if resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {
|
|
||||||
out.Set(resolvedv)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
case reflect.Ptr:
|
|
||||||
panic("yaml internal error: please report the issue")
|
|
||||||
}
|
|
||||||
d.terror(n, tag, out)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func settableValueOf(i interface{}) reflect.Value {
|
|
||||||
v := reflect.ValueOf(i)
|
|
||||||
sv := reflect.New(v.Type()).Elem()
|
|
||||||
sv.Set(v)
|
|
||||||
return sv
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) sequence(n *Node, out reflect.Value) (good bool) {
|
|
||||||
l := len(n.Content)
|
|
||||||
|
|
||||||
var iface reflect.Value
|
|
||||||
switch out.Kind() {
|
|
||||||
case reflect.Slice:
|
|
||||||
out.Set(reflect.MakeSlice(out.Type(), l, l))
|
|
||||||
case reflect.Array:
|
|
||||||
if l != out.Len() {
|
|
||||||
failf("invalid array: want %d elements but got %d", out.Len(), l)
|
|
||||||
}
|
|
||||||
case reflect.Interface:
|
|
||||||
// No type hints. Will have to use a generic sequence.
|
|
||||||
iface = out
|
|
||||||
out = settableValueOf(make([]interface{}, l))
|
|
||||||
default:
|
|
||||||
d.terror(n, seqTag, out)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
et := out.Type().Elem()
|
|
||||||
|
|
||||||
j := 0
|
|
||||||
for i := 0; i < l; i++ {
|
|
||||||
e := reflect.New(et).Elem()
|
|
||||||
if ok := d.unmarshal(n.Content[i], e); ok {
|
|
||||||
out.Index(j).Set(e)
|
|
||||||
j++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if out.Kind() != reflect.Array {
|
|
||||||
out.Set(out.Slice(0, j))
|
|
||||||
}
|
|
||||||
if iface.IsValid() {
|
|
||||||
iface.Set(out)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) {
|
|
||||||
l := len(n.Content)
|
|
||||||
if d.uniqueKeys {
|
|
||||||
nerrs := len(d.terrors)
|
|
||||||
for i := 0; i < l; i += 2 {
|
|
||||||
ni := n.Content[i]
|
|
||||||
for j := i + 2; j < l; j += 2 {
|
|
||||||
nj := n.Content[j]
|
|
||||||
if ni.Kind == nj.Kind && ni.Value == nj.Value {
|
|
||||||
d.terrors = append(d.terrors, fmt.Sprintf("line %d: mapping key %#v already defined at line %d", nj.Line, nj.Value, ni.Line))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(d.terrors) > nerrs {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch out.Kind() {
|
|
||||||
case reflect.Struct:
|
|
||||||
return d.mappingStruct(n, out)
|
|
||||||
case reflect.Map:
|
|
||||||
// okay
|
|
||||||
case reflect.Interface:
|
|
||||||
iface := out
|
|
||||||
if isStringMap(n) {
|
|
||||||
out = reflect.MakeMap(d.stringMapType)
|
|
||||||
} else {
|
|
||||||
out = reflect.MakeMap(d.generalMapType)
|
|
||||||
}
|
|
||||||
iface.Set(out)
|
|
||||||
default:
|
|
||||||
d.terror(n, mapTag, out)
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
outt := out.Type()
|
|
||||||
kt := outt.Key()
|
|
||||||
et := outt.Elem()
|
|
||||||
|
|
||||||
stringMapType := d.stringMapType
|
|
||||||
generalMapType := d.generalMapType
|
|
||||||
if outt.Elem() == ifaceType {
|
|
||||||
if outt.Key().Kind() == reflect.String {
|
|
||||||
d.stringMapType = outt
|
|
||||||
} else if outt.Key() == ifaceType {
|
|
||||||
d.generalMapType = outt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if out.IsNil() {
|
|
||||||
out.Set(reflect.MakeMap(outt))
|
|
||||||
}
|
|
||||||
for i := 0; i < l; i += 2 {
|
|
||||||
if isMerge(n.Content[i]) {
|
|
||||||
d.merge(n.Content[i+1], out)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
k := reflect.New(kt).Elem()
|
|
||||||
if d.unmarshal(n.Content[i], k) {
|
|
||||||
kkind := k.Kind()
|
|
||||||
if kkind == reflect.Interface {
|
|
||||||
kkind = k.Elem().Kind()
|
|
||||||
}
|
|
||||||
if kkind == reflect.Map || kkind == reflect.Slice {
|
|
||||||
failf("invalid map key: %#v", k.Interface())
|
|
||||||
}
|
|
||||||
e := reflect.New(et).Elem()
|
|
||||||
if d.unmarshal(n.Content[i+1], e) {
|
|
||||||
out.SetMapIndex(k, e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
d.stringMapType = stringMapType
|
|
||||||
d.generalMapType = generalMapType
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func isStringMap(n *Node) bool {
|
|
||||||
if n.Kind != MappingNode {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
l := len(n.Content)
|
|
||||||
for i := 0; i < l; i += 2 {
|
|
||||||
if n.Content[i].ShortTag() != strTag {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) {
|
|
||||||
sinfo, err := getStructInfo(out.Type())
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var inlineMap reflect.Value
|
|
||||||
var elemType reflect.Type
|
|
||||||
if sinfo.InlineMap != -1 {
|
|
||||||
inlineMap = out.Field(sinfo.InlineMap)
|
|
||||||
inlineMap.Set(reflect.New(inlineMap.Type()).Elem())
|
|
||||||
elemType = inlineMap.Type().Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, index := range sinfo.InlineUnmarshalers {
|
|
||||||
field := d.fieldByIndex(n, out, index)
|
|
||||||
d.prepare(n, field)
|
|
||||||
}
|
|
||||||
|
|
||||||
var doneFields []bool
|
|
||||||
if d.uniqueKeys {
|
|
||||||
doneFields = make([]bool, len(sinfo.FieldsList))
|
|
||||||
}
|
|
||||||
name := settableValueOf("")
|
|
||||||
l := len(n.Content)
|
|
||||||
for i := 0; i < l; i += 2 {
|
|
||||||
ni := n.Content[i]
|
|
||||||
if isMerge(ni) {
|
|
||||||
d.merge(n.Content[i+1], out)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if !d.unmarshal(ni, name) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if info, ok := sinfo.FieldsMap[name.String()]; ok {
|
|
||||||
if d.uniqueKeys {
|
|
||||||
if doneFields[info.Id] {
|
|
||||||
d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type()))
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
doneFields[info.Id] = true
|
|
||||||
}
|
|
||||||
var field reflect.Value
|
|
||||||
if info.Inline == nil {
|
|
||||||
field = out.Field(info.Num)
|
|
||||||
} else {
|
|
||||||
field = d.fieldByIndex(n, out, info.Inline)
|
|
||||||
}
|
|
||||||
d.unmarshal(n.Content[i+1], field)
|
|
||||||
} else if sinfo.InlineMap != -1 {
|
|
||||||
if inlineMap.IsNil() {
|
|
||||||
inlineMap.Set(reflect.MakeMap(inlineMap.Type()))
|
|
||||||
}
|
|
||||||
value := reflect.New(elemType).Elem()
|
|
||||||
d.unmarshal(n.Content[i+1], value)
|
|
||||||
inlineMap.SetMapIndex(name, value)
|
|
||||||
} else if d.knownFields {
|
|
||||||
d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func failWantMap() {
|
|
||||||
failf("map merge requires map or sequence of maps as the value")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *decoder) merge(n *Node, out reflect.Value) {
|
|
||||||
switch n.Kind {
|
|
||||||
case MappingNode:
|
|
||||||
d.unmarshal(n, out)
|
|
||||||
case AliasNode:
|
|
||||||
if n.Alias != nil && n.Alias.Kind != MappingNode {
|
|
||||||
failWantMap()
|
|
||||||
}
|
|
||||||
d.unmarshal(n, out)
|
|
||||||
case SequenceNode:
|
|
||||||
// Step backwards as earlier nodes take precedence.
|
|
||||||
for i := len(n.Content) - 1; i >= 0; i-- {
|
|
||||||
ni := n.Content[i]
|
|
||||||
if ni.Kind == AliasNode {
|
|
||||||
if ni.Alias != nil && ni.Alias.Kind != MappingNode {
|
|
||||||
failWantMap()
|
|
||||||
}
|
|
||||||
} else if ni.Kind != MappingNode {
|
|
||||||
failWantMap()
|
|
||||||
}
|
|
||||||
d.unmarshal(ni, out)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
failWantMap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isMerge(n *Node) bool {
|
|
||||||
return n.Kind == ScalarNode && n.Value == "<<" && (n.Tag == "" || n.Tag == "!" || shortTag(n.Tag) == mergeTag)
|
|
||||||
}
|
|
2022
vendor/gopkg.in/yaml.v3/emitterc.go
generated
vendored
2022
vendor/gopkg.in/yaml.v3/emitterc.go
generated
vendored
File diff suppressed because it is too large
Load Diff
572
vendor/gopkg.in/yaml.v3/encode.go
generated
vendored
572
vendor/gopkg.in/yaml.v3/encode.go
generated
vendored
@ -1,572 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"reflect"
|
|
||||||
"regexp"
|
|
||||||
"sort"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
"unicode/utf8"
|
|
||||||
)
|
|
||||||
|
|
||||||
type encoder struct {
|
|
||||||
emitter yaml_emitter_t
|
|
||||||
event yaml_event_t
|
|
||||||
out []byte
|
|
||||||
flow bool
|
|
||||||
indent int
|
|
||||||
doneInit bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func newEncoder() *encoder {
|
|
||||||
e := &encoder{}
|
|
||||||
yaml_emitter_initialize(&e.emitter)
|
|
||||||
yaml_emitter_set_output_string(&e.emitter, &e.out)
|
|
||||||
yaml_emitter_set_unicode(&e.emitter, true)
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
|
|
||||||
func newEncoderWithWriter(w io.Writer) *encoder {
|
|
||||||
e := &encoder{}
|
|
||||||
yaml_emitter_initialize(&e.emitter)
|
|
||||||
yaml_emitter_set_output_writer(&e.emitter, w)
|
|
||||||
yaml_emitter_set_unicode(&e.emitter, true)
|
|
||||||
return e
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) init() {
|
|
||||||
if e.doneInit {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if e.indent == 0 {
|
|
||||||
e.indent = 4
|
|
||||||
}
|
|
||||||
e.emitter.best_indent = e.indent
|
|
||||||
yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)
|
|
||||||
e.emit()
|
|
||||||
e.doneInit = true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) finish() {
|
|
||||||
e.emitter.open_ended = false
|
|
||||||
yaml_stream_end_event_initialize(&e.event)
|
|
||||||
e.emit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) destroy() {
|
|
||||||
yaml_emitter_delete(&e.emitter)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) emit() {
|
|
||||||
// This will internally delete the e.event value.
|
|
||||||
e.must(yaml_emitter_emit(&e.emitter, &e.event))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) must(ok bool) {
|
|
||||||
if !ok {
|
|
||||||
msg := e.emitter.problem
|
|
||||||
if msg == "" {
|
|
||||||
msg = "unknown problem generating YAML content"
|
|
||||||
}
|
|
||||||
failf("%s", msg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) marshalDoc(tag string, in reflect.Value) {
|
|
||||||
e.init()
|
|
||||||
var node *Node
|
|
||||||
if in.IsValid() {
|
|
||||||
node, _ = in.Interface().(*Node)
|
|
||||||
}
|
|
||||||
if node != nil && node.Kind == DocumentNode {
|
|
||||||
e.nodev(in)
|
|
||||||
} else {
|
|
||||||
yaml_document_start_event_initialize(&e.event, nil, nil, true)
|
|
||||||
e.emit()
|
|
||||||
e.marshal(tag, in)
|
|
||||||
yaml_document_end_event_initialize(&e.event, true)
|
|
||||||
e.emit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) marshal(tag string, in reflect.Value) {
|
|
||||||
tag = shortTag(tag)
|
|
||||||
if !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() {
|
|
||||||
e.nilv()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
iface := in.Interface()
|
|
||||||
switch value := iface.(type) {
|
|
||||||
case *Node:
|
|
||||||
e.nodev(in)
|
|
||||||
return
|
|
||||||
case Node:
|
|
||||||
e.nodev(in.Addr())
|
|
||||||
return
|
|
||||||
case time.Time:
|
|
||||||
e.timev(tag, in)
|
|
||||||
return
|
|
||||||
case *time.Time:
|
|
||||||
e.timev(tag, in.Elem())
|
|
||||||
return
|
|
||||||
case time.Duration:
|
|
||||||
e.stringv(tag, reflect.ValueOf(value.String()))
|
|
||||||
return
|
|
||||||
case Marshaler:
|
|
||||||
v, err := value.MarshalYAML()
|
|
||||||
if err != nil {
|
|
||||||
fail(err)
|
|
||||||
}
|
|
||||||
if v == nil {
|
|
||||||
e.nilv()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
e.marshal(tag, reflect.ValueOf(v))
|
|
||||||
return
|
|
||||||
case encoding.TextMarshaler:
|
|
||||||
text, err := value.MarshalText()
|
|
||||||
if err != nil {
|
|
||||||
fail(err)
|
|
||||||
}
|
|
||||||
in = reflect.ValueOf(string(text))
|
|
||||||
case nil:
|
|
||||||
e.nilv()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
switch in.Kind() {
|
|
||||||
case reflect.Interface:
|
|
||||||
e.marshal(tag, in.Elem())
|
|
||||||
case reflect.Map:
|
|
||||||
e.mapv(tag, in)
|
|
||||||
case reflect.Ptr:
|
|
||||||
e.marshal(tag, in.Elem())
|
|
||||||
case reflect.Struct:
|
|
||||||
e.structv(tag, in)
|
|
||||||
case reflect.Slice, reflect.Array:
|
|
||||||
e.slicev(tag, in)
|
|
||||||
case reflect.String:
|
|
||||||
e.stringv(tag, in)
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
e.intv(tag, in)
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
e.uintv(tag, in)
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
e.floatv(tag, in)
|
|
||||||
case reflect.Bool:
|
|
||||||
e.boolv(tag, in)
|
|
||||||
default:
|
|
||||||
panic("cannot marshal type: " + in.Type().String())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) mapv(tag string, in reflect.Value) {
|
|
||||||
e.mappingv(tag, func() {
|
|
||||||
keys := keyList(in.MapKeys())
|
|
||||||
sort.Sort(keys)
|
|
||||||
for _, k := range keys {
|
|
||||||
e.marshal("", k)
|
|
||||||
e.marshal("", in.MapIndex(k))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) {
|
|
||||||
for _, num := range index {
|
|
||||||
for {
|
|
||||||
if v.Kind() == reflect.Ptr {
|
|
||||||
if v.IsNil() {
|
|
||||||
return reflect.Value{}
|
|
||||||
}
|
|
||||||
v = v.Elem()
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
v = v.Field(num)
|
|
||||||
}
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) structv(tag string, in reflect.Value) {
|
|
||||||
sinfo, err := getStructInfo(in.Type())
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
e.mappingv(tag, func() {
|
|
||||||
for _, info := range sinfo.FieldsList {
|
|
||||||
var value reflect.Value
|
|
||||||
if info.Inline == nil {
|
|
||||||
value = in.Field(info.Num)
|
|
||||||
} else {
|
|
||||||
value = e.fieldByIndex(in, info.Inline)
|
|
||||||
if !value.IsValid() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if info.OmitEmpty && isZero(value) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
e.marshal("", reflect.ValueOf(info.Key))
|
|
||||||
e.flow = info.Flow
|
|
||||||
e.marshal("", value)
|
|
||||||
}
|
|
||||||
if sinfo.InlineMap >= 0 {
|
|
||||||
m := in.Field(sinfo.InlineMap)
|
|
||||||
if m.Len() > 0 {
|
|
||||||
e.flow = false
|
|
||||||
keys := keyList(m.MapKeys())
|
|
||||||
sort.Sort(keys)
|
|
||||||
for _, k := range keys {
|
|
||||||
if _, found := sinfo.FieldsMap[k.String()]; found {
|
|
||||||
panic(fmt.Sprintf("cannot have key %q in inlined map: conflicts with struct field", k.String()))
|
|
||||||
}
|
|
||||||
e.marshal("", k)
|
|
||||||
e.flow = false
|
|
||||||
e.marshal("", m.MapIndex(k))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) mappingv(tag string, f func()) {
|
|
||||||
implicit := tag == ""
|
|
||||||
style := yaml_BLOCK_MAPPING_STYLE
|
|
||||||
if e.flow {
|
|
||||||
e.flow = false
|
|
||||||
style = yaml_FLOW_MAPPING_STYLE
|
|
||||||
}
|
|
||||||
yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)
|
|
||||||
e.emit()
|
|
||||||
f()
|
|
||||||
yaml_mapping_end_event_initialize(&e.event)
|
|
||||||
e.emit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) slicev(tag string, in reflect.Value) {
|
|
||||||
implicit := tag == ""
|
|
||||||
style := yaml_BLOCK_SEQUENCE_STYLE
|
|
||||||
if e.flow {
|
|
||||||
e.flow = false
|
|
||||||
style = yaml_FLOW_SEQUENCE_STYLE
|
|
||||||
}
|
|
||||||
e.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))
|
|
||||||
e.emit()
|
|
||||||
n := in.Len()
|
|
||||||
for i := 0; i < n; i++ {
|
|
||||||
e.marshal("", in.Index(i))
|
|
||||||
}
|
|
||||||
e.must(yaml_sequence_end_event_initialize(&e.event))
|
|
||||||
e.emit()
|
|
||||||
}
|
|
||||||
|
|
||||||
// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.
|
|
||||||
//
|
|
||||||
// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported
|
|
||||||
// in YAML 1.2 and by this package, but these should be marshalled quoted for
|
|
||||||
// the time being for compatibility with other parsers.
|
|
||||||
func isBase60Float(s string) (result bool) {
|
|
||||||
// Fast path.
|
|
||||||
if s == "" {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
c := s[0]
|
|
||||||
if !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
// Do the full match.
|
|
||||||
return base60float.MatchString(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
// From http://yaml.org/type/float.html, except the regular expression there
|
|
||||||
// is bogus. In practice parsers do not enforce the "\.[0-9_]*" suffix.
|
|
||||||
var base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\.[0-9_]*)?$`)
|
|
||||||
|
|
||||||
// isOldBool returns whether s is bool notation as defined in YAML 1.1.
|
|
||||||
//
|
|
||||||
// We continue to force strings that YAML 1.1 would interpret as booleans to be
|
|
||||||
// rendered as quotes strings so that the marshalled output valid for YAML 1.1
|
|
||||||
// parsing.
|
|
||||||
func isOldBool(s string) (result bool) {
|
|
||||||
switch s {
|
|
||||||
case "y", "Y", "yes", "Yes", "YES", "on", "On", "ON",
|
|
||||||
"n", "N", "no", "No", "NO", "off", "Off", "OFF":
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) stringv(tag string, in reflect.Value) {
|
|
||||||
var style yaml_scalar_style_t
|
|
||||||
s := in.String()
|
|
||||||
canUsePlain := true
|
|
||||||
switch {
|
|
||||||
case !utf8.ValidString(s):
|
|
||||||
if tag == binaryTag {
|
|
||||||
failf("explicitly tagged !!binary data must be base64-encoded")
|
|
||||||
}
|
|
||||||
if tag != "" {
|
|
||||||
failf("cannot marshal invalid UTF-8 data as %s", shortTag(tag))
|
|
||||||
}
|
|
||||||
// It can't be encoded directly as YAML so use a binary tag
|
|
||||||
// and encode it as base64.
|
|
||||||
tag = binaryTag
|
|
||||||
s = encodeBase64(s)
|
|
||||||
case tag == "":
|
|
||||||
// Check to see if it would resolve to a specific
|
|
||||||
// tag when encoded unquoted. If it doesn't,
|
|
||||||
// there's no need to quote it.
|
|
||||||
rtag, _ := resolve("", s)
|
|
||||||
canUsePlain = rtag == strTag && !(isBase60Float(s) || isOldBool(s))
|
|
||||||
}
|
|
||||||
// Note: it's possible for user code to emit invalid YAML
|
|
||||||
// if they explicitly specify a tag and a string containing
|
|
||||||
// text that's incompatible with that tag.
|
|
||||||
switch {
|
|
||||||
case strings.Contains(s, "\n"):
|
|
||||||
if e.flow {
|
|
||||||
style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
|
|
||||||
} else {
|
|
||||||
style = yaml_LITERAL_SCALAR_STYLE
|
|
||||||
}
|
|
||||||
case canUsePlain:
|
|
||||||
style = yaml_PLAIN_SCALAR_STYLE
|
|
||||||
default:
|
|
||||||
style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
|
|
||||||
}
|
|
||||||
e.emitScalar(s, "", tag, style, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) boolv(tag string, in reflect.Value) {
|
|
||||||
var s string
|
|
||||||
if in.Bool() {
|
|
||||||
s = "true"
|
|
||||||
} else {
|
|
||||||
s = "false"
|
|
||||||
}
|
|
||||||
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) intv(tag string, in reflect.Value) {
|
|
||||||
s := strconv.FormatInt(in.Int(), 10)
|
|
||||||
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) uintv(tag string, in reflect.Value) {
|
|
||||||
s := strconv.FormatUint(in.Uint(), 10)
|
|
||||||
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) timev(tag string, in reflect.Value) {
|
|
||||||
t := in.Interface().(time.Time)
|
|
||||||
s := t.Format(time.RFC3339Nano)
|
|
||||||
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) floatv(tag string, in reflect.Value) {
|
|
||||||
// Issue #352: When formatting, use the precision of the underlying value
|
|
||||||
precision := 64
|
|
||||||
if in.Kind() == reflect.Float32 {
|
|
||||||
precision = 32
|
|
||||||
}
|
|
||||||
|
|
||||||
s := strconv.FormatFloat(in.Float(), 'g', -1, precision)
|
|
||||||
switch s {
|
|
||||||
case "+Inf":
|
|
||||||
s = ".inf"
|
|
||||||
case "-Inf":
|
|
||||||
s = "-.inf"
|
|
||||||
case "NaN":
|
|
||||||
s = ".nan"
|
|
||||||
}
|
|
||||||
e.emitScalar(s, "", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) nilv() {
|
|
||||||
e.emitScalar("null", "", "", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot, tail []byte) {
|
|
||||||
// TODO Kill this function. Replace all initialize calls by their underlining Go literals.
|
|
||||||
implicit := tag == ""
|
|
||||||
if !implicit {
|
|
||||||
tag = longTag(tag)
|
|
||||||
}
|
|
||||||
e.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))
|
|
||||||
e.event.head_comment = head
|
|
||||||
e.event.line_comment = line
|
|
||||||
e.event.foot_comment = foot
|
|
||||||
e.event.tail_comment = tail
|
|
||||||
e.emit()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) nodev(in reflect.Value) {
|
|
||||||
e.node(in.Interface().(*Node), "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *encoder) node(node *Node, tail string) {
|
|
||||||
// Zero nodes behave as nil.
|
|
||||||
if node.Kind == 0 && node.IsZero() {
|
|
||||||
e.nilv()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the tag was not explicitly requested, and dropping it won't change the
|
|
||||||
// implicit tag of the value, don't include it in the presentation.
|
|
||||||
var tag = node.Tag
|
|
||||||
var stag = shortTag(tag)
|
|
||||||
var forceQuoting bool
|
|
||||||
if tag != "" && node.Style&TaggedStyle == 0 {
|
|
||||||
if node.Kind == ScalarNode {
|
|
||||||
if stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 {
|
|
||||||
tag = ""
|
|
||||||
} else {
|
|
||||||
rtag, _ := resolve("", node.Value)
|
|
||||||
if rtag == stag {
|
|
||||||
tag = ""
|
|
||||||
} else if stag == strTag {
|
|
||||||
tag = ""
|
|
||||||
forceQuoting = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var rtag string
|
|
||||||
switch node.Kind {
|
|
||||||
case MappingNode:
|
|
||||||
rtag = mapTag
|
|
||||||
case SequenceNode:
|
|
||||||
rtag = seqTag
|
|
||||||
}
|
|
||||||
if rtag == stag {
|
|
||||||
tag = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch node.Kind {
|
|
||||||
case DocumentNode:
|
|
||||||
yaml_document_start_event_initialize(&e.event, nil, nil, true)
|
|
||||||
e.event.head_comment = []byte(node.HeadComment)
|
|
||||||
e.emit()
|
|
||||||
for _, node := range node.Content {
|
|
||||||
e.node(node, "")
|
|
||||||
}
|
|
||||||
yaml_document_end_event_initialize(&e.event, true)
|
|
||||||
e.event.foot_comment = []byte(node.FootComment)
|
|
||||||
e.emit()
|
|
||||||
|
|
||||||
case SequenceNode:
|
|
||||||
style := yaml_BLOCK_SEQUENCE_STYLE
|
|
||||||
if node.Style&FlowStyle != 0 {
|
|
||||||
style = yaml_FLOW_SEQUENCE_STYLE
|
|
||||||
}
|
|
||||||
e.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style))
|
|
||||||
e.event.head_comment = []byte(node.HeadComment)
|
|
||||||
e.emit()
|
|
||||||
for _, node := range node.Content {
|
|
||||||
e.node(node, "")
|
|
||||||
}
|
|
||||||
e.must(yaml_sequence_end_event_initialize(&e.event))
|
|
||||||
e.event.line_comment = []byte(node.LineComment)
|
|
||||||
e.event.foot_comment = []byte(node.FootComment)
|
|
||||||
e.emit()
|
|
||||||
|
|
||||||
case MappingNode:
|
|
||||||
style := yaml_BLOCK_MAPPING_STYLE
|
|
||||||
if node.Style&FlowStyle != 0 {
|
|
||||||
style = yaml_FLOW_MAPPING_STYLE
|
|
||||||
}
|
|
||||||
yaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == "", style)
|
|
||||||
e.event.tail_comment = []byte(tail)
|
|
||||||
e.event.head_comment = []byte(node.HeadComment)
|
|
||||||
e.emit()
|
|
||||||
|
|
||||||
// The tail logic below moves the foot comment of prior keys to the following key,
|
|
||||||
// since the value for each key may be a nested structure and the foot needs to be
|
|
||||||
// processed only the entirety of the value is streamed. The last tail is processed
|
|
||||||
// with the mapping end event.
|
|
||||||
var tail string
|
|
||||||
for i := 0; i+1 < len(node.Content); i += 2 {
|
|
||||||
k := node.Content[i]
|
|
||||||
foot := k.FootComment
|
|
||||||
if foot != "" {
|
|
||||||
kopy := *k
|
|
||||||
kopy.FootComment = ""
|
|
||||||
k = &kopy
|
|
||||||
}
|
|
||||||
e.node(k, tail)
|
|
||||||
tail = foot
|
|
||||||
|
|
||||||
v := node.Content[i+1]
|
|
||||||
e.node(v, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
yaml_mapping_end_event_initialize(&e.event)
|
|
||||||
e.event.tail_comment = []byte(tail)
|
|
||||||
e.event.line_comment = []byte(node.LineComment)
|
|
||||||
e.event.foot_comment = []byte(node.FootComment)
|
|
||||||
e.emit()
|
|
||||||
|
|
||||||
case AliasNode:
|
|
||||||
yaml_alias_event_initialize(&e.event, []byte(node.Value))
|
|
||||||
e.event.head_comment = []byte(node.HeadComment)
|
|
||||||
e.event.line_comment = []byte(node.LineComment)
|
|
||||||
e.event.foot_comment = []byte(node.FootComment)
|
|
||||||
e.emit()
|
|
||||||
|
|
||||||
case ScalarNode:
|
|
||||||
value := node.Value
|
|
||||||
if !utf8.ValidString(value) {
|
|
||||||
if stag == binaryTag {
|
|
||||||
failf("explicitly tagged !!binary data must be base64-encoded")
|
|
||||||
}
|
|
||||||
if stag != "" {
|
|
||||||
failf("cannot marshal invalid UTF-8 data as %s", stag)
|
|
||||||
}
|
|
||||||
// It can't be encoded directly as YAML so use a binary tag
|
|
||||||
// and encode it as base64.
|
|
||||||
tag = binaryTag
|
|
||||||
value = encodeBase64(value)
|
|
||||||
}
|
|
||||||
|
|
||||||
style := yaml_PLAIN_SCALAR_STYLE
|
|
||||||
switch {
|
|
||||||
case node.Style&DoubleQuotedStyle != 0:
|
|
||||||
style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
|
|
||||||
case node.Style&SingleQuotedStyle != 0:
|
|
||||||
style = yaml_SINGLE_QUOTED_SCALAR_STYLE
|
|
||||||
case node.Style&LiteralStyle != 0:
|
|
||||||
style = yaml_LITERAL_SCALAR_STYLE
|
|
||||||
case node.Style&FoldedStyle != 0:
|
|
||||||
style = yaml_FOLDED_SCALAR_STYLE
|
|
||||||
case strings.Contains(value, "\n"):
|
|
||||||
style = yaml_LITERAL_SCALAR_STYLE
|
|
||||||
case forceQuoting:
|
|
||||||
style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
|
|
||||||
}
|
|
||||||
|
|
||||||
e.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail))
|
|
||||||
default:
|
|
||||||
failf("cannot encode node with unknown kind %d", node.Kind)
|
|
||||||
}
|
|
||||||
}
|
|
5
vendor/gopkg.in/yaml.v3/go.mod
generated
vendored
5
vendor/gopkg.in/yaml.v3/go.mod
generated
vendored
@ -1,5 +0,0 @@
|
|||||||
module "gopkg.in/yaml.v3"
|
|
||||||
|
|
||||||
require (
|
|
||||||
"gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405
|
|
||||||
)
|
|
1249
vendor/gopkg.in/yaml.v3/parserc.go
generated
vendored
1249
vendor/gopkg.in/yaml.v3/parserc.go
generated
vendored
File diff suppressed because it is too large
Load Diff
434
vendor/gopkg.in/yaml.v3/readerc.go
generated
vendored
434
vendor/gopkg.in/yaml.v3/readerc.go
generated
vendored
@ -1,434 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
// Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
// this software and associated documentation files (the "Software"), to deal in
|
|
||||||
// the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
// of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Set the reader error and return 0.
|
|
||||||
func yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {
|
|
||||||
parser.error = yaml_READER_ERROR
|
|
||||||
parser.problem = problem
|
|
||||||
parser.problem_offset = offset
|
|
||||||
parser.problem_value = value
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Byte order marks.
|
|
||||||
const (
|
|
||||||
bom_UTF8 = "\xef\xbb\xbf"
|
|
||||||
bom_UTF16LE = "\xff\xfe"
|
|
||||||
bom_UTF16BE = "\xfe\xff"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Determine the input stream encoding by checking the BOM symbol. If no BOM is
|
|
||||||
// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.
|
|
||||||
func yaml_parser_determine_encoding(parser *yaml_parser_t) bool {
|
|
||||||
// Ensure that we had enough bytes in the raw buffer.
|
|
||||||
for !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {
|
|
||||||
if !yaml_parser_update_raw_buffer(parser) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine the encoding.
|
|
||||||
buf := parser.raw_buffer
|
|
||||||
pos := parser.raw_buffer_pos
|
|
||||||
avail := len(buf) - pos
|
|
||||||
if avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {
|
|
||||||
parser.encoding = yaml_UTF16LE_ENCODING
|
|
||||||
parser.raw_buffer_pos += 2
|
|
||||||
parser.offset += 2
|
|
||||||
} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {
|
|
||||||
parser.encoding = yaml_UTF16BE_ENCODING
|
|
||||||
parser.raw_buffer_pos += 2
|
|
||||||
parser.offset += 2
|
|
||||||
} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {
|
|
||||||
parser.encoding = yaml_UTF8_ENCODING
|
|
||||||
parser.raw_buffer_pos += 3
|
|
||||||
parser.offset += 3
|
|
||||||
} else {
|
|
||||||
parser.encoding = yaml_UTF8_ENCODING
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the raw buffer.
|
|
||||||
func yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {
|
|
||||||
size_read := 0
|
|
||||||
|
|
||||||
// Return if the raw buffer is full.
|
|
||||||
if parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return on EOF.
|
|
||||||
if parser.eof {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the remaining bytes in the raw buffer to the beginning.
|
|
||||||
if parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {
|
|
||||||
copy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])
|
|
||||||
}
|
|
||||||
parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]
|
|
||||||
parser.raw_buffer_pos = 0
|
|
||||||
|
|
||||||
// Call the read handler to fill the buffer.
|
|
||||||
size_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])
|
|
||||||
parser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]
|
|
||||||
if err == io.EOF {
|
|
||||||
parser.eof = true
|
|
||||||
} else if err != nil {
|
|
||||||
return yaml_parser_set_reader_error(parser, "input error: "+err.Error(), parser.offset, -1)
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure that the buffer contains at least `length` characters.
|
|
||||||
// Return true on success, false on failure.
|
|
||||||
//
|
|
||||||
// The length is supposed to be significantly less that the buffer size.
|
|
||||||
func yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {
|
|
||||||
if parser.read_handler == nil {
|
|
||||||
panic("read handler must be set")
|
|
||||||
}
|
|
||||||
|
|
||||||
// [Go] This function was changed to guarantee the requested length size at EOF.
|
|
||||||
// The fact we need to do this is pretty awful, but the description above implies
|
|
||||||
// for that to be the case, and there are tests
|
|
||||||
|
|
||||||
// If the EOF flag is set and the raw buffer is empty, do nothing.
|
|
||||||
if parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {
|
|
||||||
// [Go] ACTUALLY! Read the documentation of this function above.
|
|
||||||
// This is just broken. To return true, we need to have the
|
|
||||||
// given length in the buffer. Not doing that means every single
|
|
||||||
// check that calls this function to make sure the buffer has a
|
|
||||||
// given length is Go) panicking; or C) accessing invalid memory.
|
|
||||||
//return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return if the buffer contains enough characters.
|
|
||||||
if parser.unread >= length {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine the input encoding if it is not known yet.
|
|
||||||
if parser.encoding == yaml_ANY_ENCODING {
|
|
||||||
if !yaml_parser_determine_encoding(parser) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the unread characters to the beginning of the buffer.
|
|
||||||
buffer_len := len(parser.buffer)
|
|
||||||
if parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {
|
|
||||||
copy(parser.buffer, parser.buffer[parser.buffer_pos:])
|
|
||||||
buffer_len -= parser.buffer_pos
|
|
||||||
parser.buffer_pos = 0
|
|
||||||
} else if parser.buffer_pos == buffer_len {
|
|
||||||
buffer_len = 0
|
|
||||||
parser.buffer_pos = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open the whole buffer for writing, and cut it before returning.
|
|
||||||
parser.buffer = parser.buffer[:cap(parser.buffer)]
|
|
||||||
|
|
||||||
// Fill the buffer until it has enough characters.
|
|
||||||
first := true
|
|
||||||
for parser.unread < length {
|
|
||||||
|
|
||||||
// Fill the raw buffer if necessary.
|
|
||||||
if !first || parser.raw_buffer_pos == len(parser.raw_buffer) {
|
|
||||||
if !yaml_parser_update_raw_buffer(parser) {
|
|
||||||
parser.buffer = parser.buffer[:buffer_len]
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
first = false
|
|
||||||
|
|
||||||
// Decode the raw buffer.
|
|
||||||
inner:
|
|
||||||
for parser.raw_buffer_pos != len(parser.raw_buffer) {
|
|
||||||
var value rune
|
|
||||||
var width int
|
|
||||||
|
|
||||||
raw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos
|
|
||||||
|
|
||||||
// Decode the next character.
|
|
||||||
switch parser.encoding {
|
|
||||||
case yaml_UTF8_ENCODING:
|
|
||||||
// Decode a UTF-8 character. Check RFC 3629
|
|
||||||
// (http://www.ietf.org/rfc/rfc3629.txt) for more details.
|
|
||||||
//
|
|
||||||
// The following table (taken from the RFC) is used for
|
|
||||||
// decoding.
|
|
||||||
//
|
|
||||||
// Char. number range | UTF-8 octet sequence
|
|
||||||
// (hexadecimal) | (binary)
|
|
||||||
// --------------------+------------------------------------
|
|
||||||
// 0000 0000-0000 007F | 0xxxxxxx
|
|
||||||
// 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
|
|
||||||
// 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
|
|
||||||
// 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
||||||
//
|
|
||||||
// Additionally, the characters in the range 0xD800-0xDFFF
|
|
||||||
// are prohibited as they are reserved for use with UTF-16
|
|
||||||
// surrogate pairs.
|
|
||||||
|
|
||||||
// Determine the length of the UTF-8 sequence.
|
|
||||||
octet := parser.raw_buffer[parser.raw_buffer_pos]
|
|
||||||
switch {
|
|
||||||
case octet&0x80 == 0x00:
|
|
||||||
width = 1
|
|
||||||
case octet&0xE0 == 0xC0:
|
|
||||||
width = 2
|
|
||||||
case octet&0xF0 == 0xE0:
|
|
||||||
width = 3
|
|
||||||
case octet&0xF8 == 0xF0:
|
|
||||||
width = 4
|
|
||||||
default:
|
|
||||||
// The leading octet is invalid.
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"invalid leading UTF-8 octet",
|
|
||||||
parser.offset, int(octet))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the raw buffer contains an incomplete character.
|
|
||||||
if width > raw_unread {
|
|
||||||
if parser.eof {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"incomplete UTF-8 octet sequence",
|
|
||||||
parser.offset, -1)
|
|
||||||
}
|
|
||||||
break inner
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode the leading octet.
|
|
||||||
switch {
|
|
||||||
case octet&0x80 == 0x00:
|
|
||||||
value = rune(octet & 0x7F)
|
|
||||||
case octet&0xE0 == 0xC0:
|
|
||||||
value = rune(octet & 0x1F)
|
|
||||||
case octet&0xF0 == 0xE0:
|
|
||||||
value = rune(octet & 0x0F)
|
|
||||||
case octet&0xF8 == 0xF0:
|
|
||||||
value = rune(octet & 0x07)
|
|
||||||
default:
|
|
||||||
value = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check and decode the trailing octets.
|
|
||||||
for k := 1; k < width; k++ {
|
|
||||||
octet = parser.raw_buffer[parser.raw_buffer_pos+k]
|
|
||||||
|
|
||||||
// Check if the octet is valid.
|
|
||||||
if (octet & 0xC0) != 0x80 {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"invalid trailing UTF-8 octet",
|
|
||||||
parser.offset+k, int(octet))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode the octet.
|
|
||||||
value = (value << 6) + rune(octet&0x3F)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the length of the sequence against the value.
|
|
||||||
switch {
|
|
||||||
case width == 1:
|
|
||||||
case width == 2 && value >= 0x80:
|
|
||||||
case width == 3 && value >= 0x800:
|
|
||||||
case width == 4 && value >= 0x10000:
|
|
||||||
default:
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"invalid length of a UTF-8 sequence",
|
|
||||||
parser.offset, -1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the range of the value.
|
|
||||||
if value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"invalid Unicode character",
|
|
||||||
parser.offset, int(value))
|
|
||||||
}
|
|
||||||
|
|
||||||
case yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:
|
|
||||||
var low, high int
|
|
||||||
if parser.encoding == yaml_UTF16LE_ENCODING {
|
|
||||||
low, high = 0, 1
|
|
||||||
} else {
|
|
||||||
low, high = 1, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// The UTF-16 encoding is not as simple as one might
|
|
||||||
// naively think. Check RFC 2781
|
|
||||||
// (http://www.ietf.org/rfc/rfc2781.txt).
|
|
||||||
//
|
|
||||||
// Normally, two subsequent bytes describe a Unicode
|
|
||||||
// character. However a special technique (called a
|
|
||||||
// surrogate pair) is used for specifying character
|
|
||||||
// values larger than 0xFFFF.
|
|
||||||
//
|
|
||||||
// A surrogate pair consists of two pseudo-characters:
|
|
||||||
// high surrogate area (0xD800-0xDBFF)
|
|
||||||
// low surrogate area (0xDC00-0xDFFF)
|
|
||||||
//
|
|
||||||
// The following formulas are used for decoding
|
|
||||||
// and encoding characters using surrogate pairs:
|
|
||||||
//
|
|
||||||
// U = U' + 0x10000 (0x01 00 00 <= U <= 0x10 FF FF)
|
|
||||||
// U' = yyyyyyyyyyxxxxxxxxxx (0 <= U' <= 0x0F FF FF)
|
|
||||||
// W1 = 110110yyyyyyyyyy
|
|
||||||
// W2 = 110111xxxxxxxxxx
|
|
||||||
//
|
|
||||||
// where U is the character value, W1 is the high surrogate
|
|
||||||
// area, W2 is the low surrogate area.
|
|
||||||
|
|
||||||
// Check for incomplete UTF-16 character.
|
|
||||||
if raw_unread < 2 {
|
|
||||||
if parser.eof {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"incomplete UTF-16 character",
|
|
||||||
parser.offset, -1)
|
|
||||||
}
|
|
||||||
break inner
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the character.
|
|
||||||
value = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +
|
|
||||||
(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)
|
|
||||||
|
|
||||||
// Check for unexpected low surrogate area.
|
|
||||||
if value&0xFC00 == 0xDC00 {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"unexpected low surrogate area",
|
|
||||||
parser.offset, int(value))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for a high surrogate area.
|
|
||||||
if value&0xFC00 == 0xD800 {
|
|
||||||
width = 4
|
|
||||||
|
|
||||||
// Check for incomplete surrogate pair.
|
|
||||||
if raw_unread < 4 {
|
|
||||||
if parser.eof {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"incomplete UTF-16 surrogate pair",
|
|
||||||
parser.offset, -1)
|
|
||||||
}
|
|
||||||
break inner
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the next character.
|
|
||||||
value2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +
|
|
||||||
(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)
|
|
||||||
|
|
||||||
// Check for a low surrogate area.
|
|
||||||
if value2&0xFC00 != 0xDC00 {
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"expected low surrogate area",
|
|
||||||
parser.offset+2, int(value2))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate the value of the surrogate pair.
|
|
||||||
value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)
|
|
||||||
} else {
|
|
||||||
width = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
panic("impossible")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character is in the allowed range:
|
|
||||||
// #x9 | #xA | #xD | [#x20-#x7E] (8 bit)
|
|
||||||
// | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD] (16 bit)
|
|
||||||
// | [#x10000-#x10FFFF] (32 bit)
|
|
||||||
switch {
|
|
||||||
case value == 0x09:
|
|
||||||
case value == 0x0A:
|
|
||||||
case value == 0x0D:
|
|
||||||
case value >= 0x20 && value <= 0x7E:
|
|
||||||
case value == 0x85:
|
|
||||||
case value >= 0xA0 && value <= 0xD7FF:
|
|
||||||
case value >= 0xE000 && value <= 0xFFFD:
|
|
||||||
case value >= 0x10000 && value <= 0x10FFFF:
|
|
||||||
default:
|
|
||||||
return yaml_parser_set_reader_error(parser,
|
|
||||||
"control characters are not allowed",
|
|
||||||
parser.offset, int(value))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move the raw pointers.
|
|
||||||
parser.raw_buffer_pos += width
|
|
||||||
parser.offset += width
|
|
||||||
|
|
||||||
// Finally put the character into the buffer.
|
|
||||||
if value <= 0x7F {
|
|
||||||
// 0000 0000-0000 007F . 0xxxxxxx
|
|
||||||
parser.buffer[buffer_len+0] = byte(value)
|
|
||||||
buffer_len += 1
|
|
||||||
} else if value <= 0x7FF {
|
|
||||||
// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx
|
|
||||||
parser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))
|
|
||||||
parser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))
|
|
||||||
buffer_len += 2
|
|
||||||
} else if value <= 0xFFFF {
|
|
||||||
// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx
|
|
||||||
parser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))
|
|
||||||
parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))
|
|
||||||
parser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))
|
|
||||||
buffer_len += 3
|
|
||||||
} else {
|
|
||||||
// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
|
||||||
parser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))
|
|
||||||
parser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))
|
|
||||||
parser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))
|
|
||||||
parser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))
|
|
||||||
buffer_len += 4
|
|
||||||
}
|
|
||||||
|
|
||||||
parser.unread++
|
|
||||||
}
|
|
||||||
|
|
||||||
// On EOF, put NUL into the buffer and return.
|
|
||||||
if parser.eof {
|
|
||||||
parser.buffer[buffer_len] = 0
|
|
||||||
buffer_len++
|
|
||||||
parser.unread++
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// [Go] Read the documentation of this function above. To return true,
|
|
||||||
// we need to have the given length in the buffer. Not doing that means
|
|
||||||
// every single check that calls this function to make sure the buffer
|
|
||||||
// has a given length is Go) panicking; or C) accessing invalid memory.
|
|
||||||
// This happens here due to the EOF above breaking early.
|
|
||||||
for buffer_len < length {
|
|
||||||
parser.buffer[buffer_len] = 0
|
|
||||||
buffer_len++
|
|
||||||
}
|
|
||||||
parser.buffer = parser.buffer[:buffer_len]
|
|
||||||
return true
|
|
||||||
}
|
|
326
vendor/gopkg.in/yaml.v3/resolve.go
generated
vendored
326
vendor/gopkg.in/yaml.v3/resolve.go
generated
vendored
@ -1,326 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"math"
|
|
||||||
"regexp"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type resolveMapItem struct {
|
|
||||||
value interface{}
|
|
||||||
tag string
|
|
||||||
}
|
|
||||||
|
|
||||||
var resolveTable = make([]byte, 256)
|
|
||||||
var resolveMap = make(map[string]resolveMapItem)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
t := resolveTable
|
|
||||||
t[int('+')] = 'S' // Sign
|
|
||||||
t[int('-')] = 'S'
|
|
||||||
for _, c := range "0123456789" {
|
|
||||||
t[int(c)] = 'D' // Digit
|
|
||||||
}
|
|
||||||
for _, c := range "yYnNtTfFoO~" {
|
|
||||||
t[int(c)] = 'M' // In map
|
|
||||||
}
|
|
||||||
t[int('.')] = '.' // Float (potentially in map)
|
|
||||||
|
|
||||||
var resolveMapList = []struct {
|
|
||||||
v interface{}
|
|
||||||
tag string
|
|
||||||
l []string
|
|
||||||
}{
|
|
||||||
{true, boolTag, []string{"true", "True", "TRUE"}},
|
|
||||||
{false, boolTag, []string{"false", "False", "FALSE"}},
|
|
||||||
{nil, nullTag, []string{"", "~", "null", "Null", "NULL"}},
|
|
||||||
{math.NaN(), floatTag, []string{".nan", ".NaN", ".NAN"}},
|
|
||||||
{math.Inf(+1), floatTag, []string{".inf", ".Inf", ".INF"}},
|
|
||||||
{math.Inf(+1), floatTag, []string{"+.inf", "+.Inf", "+.INF"}},
|
|
||||||
{math.Inf(-1), floatTag, []string{"-.inf", "-.Inf", "-.INF"}},
|
|
||||||
{"<<", mergeTag, []string{"<<"}},
|
|
||||||
}
|
|
||||||
|
|
||||||
m := resolveMap
|
|
||||||
for _, item := range resolveMapList {
|
|
||||||
for _, s := range item.l {
|
|
||||||
m[s] = resolveMapItem{item.v, item.tag}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
nullTag = "!!null"
|
|
||||||
boolTag = "!!bool"
|
|
||||||
strTag = "!!str"
|
|
||||||
intTag = "!!int"
|
|
||||||
floatTag = "!!float"
|
|
||||||
timestampTag = "!!timestamp"
|
|
||||||
seqTag = "!!seq"
|
|
||||||
mapTag = "!!map"
|
|
||||||
binaryTag = "!!binary"
|
|
||||||
mergeTag = "!!merge"
|
|
||||||
)
|
|
||||||
|
|
||||||
var longTags = make(map[string]string)
|
|
||||||
var shortTags = make(map[string]string)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
for _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} {
|
|
||||||
ltag := longTag(stag)
|
|
||||||
longTags[stag] = ltag
|
|
||||||
shortTags[ltag] = stag
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const longTagPrefix = "tag:yaml.org,2002:"
|
|
||||||
|
|
||||||
func shortTag(tag string) string {
|
|
||||||
if strings.HasPrefix(tag, longTagPrefix) {
|
|
||||||
if stag, ok := shortTags[tag]; ok {
|
|
||||||
return stag
|
|
||||||
}
|
|
||||||
return "!!" + tag[len(longTagPrefix):]
|
|
||||||
}
|
|
||||||
return tag
|
|
||||||
}
|
|
||||||
|
|
||||||
func longTag(tag string) string {
|
|
||||||
if strings.HasPrefix(tag, "!!") {
|
|
||||||
if ltag, ok := longTags[tag]; ok {
|
|
||||||
return ltag
|
|
||||||
}
|
|
||||||
return longTagPrefix + tag[2:]
|
|
||||||
}
|
|
||||||
return tag
|
|
||||||
}
|
|
||||||
|
|
||||||
func resolvableTag(tag string) bool {
|
|
||||||
switch tag {
|
|
||||||
case "", strTag, boolTag, intTag, floatTag, nullTag, timestampTag:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var yamlStyleFloat = regexp.MustCompile(`^[-+]?(\.[0-9]+|[0-9]+(\.[0-9]*)?)([eE][-+]?[0-9]+)?$`)
|
|
||||||
|
|
||||||
func resolve(tag string, in string) (rtag string, out interface{}) {
|
|
||||||
tag = shortTag(tag)
|
|
||||||
if !resolvableTag(tag) {
|
|
||||||
return tag, in
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
switch tag {
|
|
||||||
case "", rtag, strTag, binaryTag:
|
|
||||||
return
|
|
||||||
case floatTag:
|
|
||||||
if rtag == intTag {
|
|
||||||
switch v := out.(type) {
|
|
||||||
case int64:
|
|
||||||
rtag = floatTag
|
|
||||||
out = float64(v)
|
|
||||||
return
|
|
||||||
case int:
|
|
||||||
rtag = floatTag
|
|
||||||
out = float64(v)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
failf("cannot decode %s `%s` as a %s", shortTag(rtag), in, shortTag(tag))
|
|
||||||
}()
|
|
||||||
|
|
||||||
// Any data is accepted as a !!str or !!binary.
|
|
||||||
// Otherwise, the prefix is enough of a hint about what it might be.
|
|
||||||
hint := byte('N')
|
|
||||||
if in != "" {
|
|
||||||
hint = resolveTable[in[0]]
|
|
||||||
}
|
|
||||||
if hint != 0 && tag != strTag && tag != binaryTag {
|
|
||||||
// Handle things we can lookup in a map.
|
|
||||||
if item, ok := resolveMap[in]; ok {
|
|
||||||
return item.tag, item.value
|
|
||||||
}
|
|
||||||
|
|
||||||
// Base 60 floats are a bad idea, were dropped in YAML 1.2, and
|
|
||||||
// are purposefully unsupported here. They're still quoted on
|
|
||||||
// the way out for compatibility with other parser, though.
|
|
||||||
|
|
||||||
switch hint {
|
|
||||||
case 'M':
|
|
||||||
// We've already checked the map above.
|
|
||||||
|
|
||||||
case '.':
|
|
||||||
// Not in the map, so maybe a normal float.
|
|
||||||
floatv, err := strconv.ParseFloat(in, 64)
|
|
||||||
if err == nil {
|
|
||||||
return floatTag, floatv
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'D', 'S':
|
|
||||||
// Int, float, or timestamp.
|
|
||||||
// Only try values as a timestamp if the value is unquoted or there's an explicit
|
|
||||||
// !!timestamp tag.
|
|
||||||
if tag == "" || tag == timestampTag {
|
|
||||||
t, ok := parseTimestamp(in)
|
|
||||||
if ok {
|
|
||||||
return timestampTag, t
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plain := strings.Replace(in, "_", "", -1)
|
|
||||||
intv, err := strconv.ParseInt(plain, 0, 64)
|
|
||||||
if err == nil {
|
|
||||||
if intv == int64(int(intv)) {
|
|
||||||
return intTag, int(intv)
|
|
||||||
} else {
|
|
||||||
return intTag, intv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uintv, err := strconv.ParseUint(plain, 0, 64)
|
|
||||||
if err == nil {
|
|
||||||
return intTag, uintv
|
|
||||||
}
|
|
||||||
if yamlStyleFloat.MatchString(plain) {
|
|
||||||
floatv, err := strconv.ParseFloat(plain, 64)
|
|
||||||
if err == nil {
|
|
||||||
return floatTag, floatv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if strings.HasPrefix(plain, "0b") {
|
|
||||||
intv, err := strconv.ParseInt(plain[2:], 2, 64)
|
|
||||||
if err == nil {
|
|
||||||
if intv == int64(int(intv)) {
|
|
||||||
return intTag, int(intv)
|
|
||||||
} else {
|
|
||||||
return intTag, intv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uintv, err := strconv.ParseUint(plain[2:], 2, 64)
|
|
||||||
if err == nil {
|
|
||||||
return intTag, uintv
|
|
||||||
}
|
|
||||||
} else if strings.HasPrefix(plain, "-0b") {
|
|
||||||
intv, err := strconv.ParseInt("-"+plain[3:], 2, 64)
|
|
||||||
if err == nil {
|
|
||||||
if true || intv == int64(int(intv)) {
|
|
||||||
return intTag, int(intv)
|
|
||||||
} else {
|
|
||||||
return intTag, intv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Octals as introduced in version 1.2 of the spec.
|
|
||||||
// Octals from the 1.1 spec, spelled as 0777, are still
|
|
||||||
// decoded by default in v3 as well for compatibility.
|
|
||||||
// May be dropped in v4 depending on how usage evolves.
|
|
||||||
if strings.HasPrefix(plain, "0o") {
|
|
||||||
intv, err := strconv.ParseInt(plain[2:], 8, 64)
|
|
||||||
if err == nil {
|
|
||||||
if intv == int64(int(intv)) {
|
|
||||||
return intTag, int(intv)
|
|
||||||
} else {
|
|
||||||
return intTag, intv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uintv, err := strconv.ParseUint(plain[2:], 8, 64)
|
|
||||||
if err == nil {
|
|
||||||
return intTag, uintv
|
|
||||||
}
|
|
||||||
} else if strings.HasPrefix(plain, "-0o") {
|
|
||||||
intv, err := strconv.ParseInt("-"+plain[3:], 8, 64)
|
|
||||||
if err == nil {
|
|
||||||
if true || intv == int64(int(intv)) {
|
|
||||||
return intTag, int(intv)
|
|
||||||
} else {
|
|
||||||
return intTag, intv
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
panic("internal error: missing handler for resolver table: " + string(rune(hint)) + " (with " + in + ")")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return strTag, in
|
|
||||||
}
|
|
||||||
|
|
||||||
// encodeBase64 encodes s as base64 that is broken up into multiple lines
|
|
||||||
// as appropriate for the resulting length.
|
|
||||||
func encodeBase64(s string) string {
|
|
||||||
const lineLen = 70
|
|
||||||
encLen := base64.StdEncoding.EncodedLen(len(s))
|
|
||||||
lines := encLen/lineLen + 1
|
|
||||||
buf := make([]byte, encLen*2+lines)
|
|
||||||
in := buf[0:encLen]
|
|
||||||
out := buf[encLen:]
|
|
||||||
base64.StdEncoding.Encode(in, []byte(s))
|
|
||||||
k := 0
|
|
||||||
for i := 0; i < len(in); i += lineLen {
|
|
||||||
j := i + lineLen
|
|
||||||
if j > len(in) {
|
|
||||||
j = len(in)
|
|
||||||
}
|
|
||||||
k += copy(out[k:], in[i:j])
|
|
||||||
if lines > 1 {
|
|
||||||
out[k] = '\n'
|
|
||||||
k++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return string(out[:k])
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is a subset of the formats allowed by the regular expression
|
|
||||||
// defined at http://yaml.org/type/timestamp.html.
|
|
||||||
var allowedTimestampFormats = []string{
|
|
||||||
"2006-1-2T15:4:5.999999999Z07:00", // RCF3339Nano with short date fields.
|
|
||||||
"2006-1-2t15:4:5.999999999Z07:00", // RFC3339Nano with short date fields and lower-case "t".
|
|
||||||
"2006-1-2 15:4:5.999999999", // space separated with no time zone
|
|
||||||
"2006-1-2", // date only
|
|
||||||
// Notable exception: time.Parse cannot handle: "2001-12-14 21:59:43.10 -5"
|
|
||||||
// from the set of examples.
|
|
||||||
}
|
|
||||||
|
|
||||||
// parseTimestamp parses s as a timestamp string and
|
|
||||||
// returns the timestamp and reports whether it succeeded.
|
|
||||||
// Timestamp formats are defined at http://yaml.org/type/timestamp.html
|
|
||||||
func parseTimestamp(s string) (time.Time, bool) {
|
|
||||||
// TODO write code to check all the formats supported by
|
|
||||||
// http://yaml.org/type/timestamp.html instead of using time.Parse.
|
|
||||||
|
|
||||||
// Quick check: all date formats start with YYYY-.
|
|
||||||
i := 0
|
|
||||||
for ; i < len(s); i++ {
|
|
||||||
if c := s[i]; c < '0' || c > '9' {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if i != 4 || i == len(s) || s[i] != '-' {
|
|
||||||
return time.Time{}, false
|
|
||||||
}
|
|
||||||
for _, format := range allowedTimestampFormats {
|
|
||||||
if t, err := time.Parse(format, s); err == nil {
|
|
||||||
return t, true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return time.Time{}, false
|
|
||||||
}
|
|
3028
vendor/gopkg.in/yaml.v3/scannerc.go
generated
vendored
3028
vendor/gopkg.in/yaml.v3/scannerc.go
generated
vendored
File diff suppressed because it is too large
Load Diff
134
vendor/gopkg.in/yaml.v3/sorter.go
generated
vendored
134
vendor/gopkg.in/yaml.v3/sorter.go
generated
vendored
@ -1,134 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"reflect"
|
|
||||||
"unicode"
|
|
||||||
)
|
|
||||||
|
|
||||||
type keyList []reflect.Value
|
|
||||||
|
|
||||||
func (l keyList) Len() int { return len(l) }
|
|
||||||
func (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
|
|
||||||
func (l keyList) Less(i, j int) bool {
|
|
||||||
a := l[i]
|
|
||||||
b := l[j]
|
|
||||||
ak := a.Kind()
|
|
||||||
bk := b.Kind()
|
|
||||||
for (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {
|
|
||||||
a = a.Elem()
|
|
||||||
ak = a.Kind()
|
|
||||||
}
|
|
||||||
for (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {
|
|
||||||
b = b.Elem()
|
|
||||||
bk = b.Kind()
|
|
||||||
}
|
|
||||||
af, aok := keyFloat(a)
|
|
||||||
bf, bok := keyFloat(b)
|
|
||||||
if aok && bok {
|
|
||||||
if af != bf {
|
|
||||||
return af < bf
|
|
||||||
}
|
|
||||||
if ak != bk {
|
|
||||||
return ak < bk
|
|
||||||
}
|
|
||||||
return numLess(a, b)
|
|
||||||
}
|
|
||||||
if ak != reflect.String || bk != reflect.String {
|
|
||||||
return ak < bk
|
|
||||||
}
|
|
||||||
ar, br := []rune(a.String()), []rune(b.String())
|
|
||||||
digits := false
|
|
||||||
for i := 0; i < len(ar) && i < len(br); i++ {
|
|
||||||
if ar[i] == br[i] {
|
|
||||||
digits = unicode.IsDigit(ar[i])
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
al := unicode.IsLetter(ar[i])
|
|
||||||
bl := unicode.IsLetter(br[i])
|
|
||||||
if al && bl {
|
|
||||||
return ar[i] < br[i]
|
|
||||||
}
|
|
||||||
if al || bl {
|
|
||||||
if digits {
|
|
||||||
return al
|
|
||||||
} else {
|
|
||||||
return bl
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var ai, bi int
|
|
||||||
var an, bn int64
|
|
||||||
if ar[i] == '0' || br[i] == '0' {
|
|
||||||
for j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- {
|
|
||||||
if ar[j] != '0' {
|
|
||||||
an = 1
|
|
||||||
bn = 1
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {
|
|
||||||
an = an*10 + int64(ar[ai]-'0')
|
|
||||||
}
|
|
||||||
for bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {
|
|
||||||
bn = bn*10 + int64(br[bi]-'0')
|
|
||||||
}
|
|
||||||
if an != bn {
|
|
||||||
return an < bn
|
|
||||||
}
|
|
||||||
if ai != bi {
|
|
||||||
return ai < bi
|
|
||||||
}
|
|
||||||
return ar[i] < br[i]
|
|
||||||
}
|
|
||||||
return len(ar) < len(br)
|
|
||||||
}
|
|
||||||
|
|
||||||
// keyFloat returns a float value for v if it is a number/bool
|
|
||||||
// and whether it is a number/bool or not.
|
|
||||||
func keyFloat(v reflect.Value) (f float64, ok bool) {
|
|
||||||
switch v.Kind() {
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
return float64(v.Int()), true
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
return v.Float(), true
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
return float64(v.Uint()), true
|
|
||||||
case reflect.Bool:
|
|
||||||
if v.Bool() {
|
|
||||||
return 1, true
|
|
||||||
}
|
|
||||||
return 0, true
|
|
||||||
}
|
|
||||||
return 0, false
|
|
||||||
}
|
|
||||||
|
|
||||||
// numLess returns whether a < b.
|
|
||||||
// a and b must necessarily have the same kind.
|
|
||||||
func numLess(a, b reflect.Value) bool {
|
|
||||||
switch a.Kind() {
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
return a.Int() < b.Int()
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
return a.Float() < b.Float()
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
return a.Uint() < b.Uint()
|
|
||||||
case reflect.Bool:
|
|
||||||
return !a.Bool() && b.Bool()
|
|
||||||
}
|
|
||||||
panic("not a number")
|
|
||||||
}
|
|
48
vendor/gopkg.in/yaml.v3/writerc.go
generated
vendored
48
vendor/gopkg.in/yaml.v3/writerc.go
generated
vendored
@ -1,48 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
// Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
// this software and associated documentation files (the "Software"), to deal in
|
|
||||||
// the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
// of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
// Set the writer error and return false.
|
|
||||||
func yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {
|
|
||||||
emitter.error = yaml_WRITER_ERROR
|
|
||||||
emitter.problem = problem
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flush the output buffer.
|
|
||||||
func yaml_emitter_flush(emitter *yaml_emitter_t) bool {
|
|
||||||
if emitter.write_handler == nil {
|
|
||||||
panic("write handler not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the buffer is empty.
|
|
||||||
if emitter.buffer_pos == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {
|
|
||||||
return yaml_emitter_set_writer_error(emitter, "write error: "+err.Error())
|
|
||||||
}
|
|
||||||
emitter.buffer_pos = 0
|
|
||||||
return true
|
|
||||||
}
|
|
693
vendor/gopkg.in/yaml.v3/yaml.go
generated
vendored
693
vendor/gopkg.in/yaml.v3/yaml.go
generated
vendored
@ -1,693 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
// Package yaml implements YAML support for the Go language.
|
|
||||||
//
|
|
||||||
// Source code and other details for the project are available at GitHub:
|
|
||||||
//
|
|
||||||
// https://github.com/go-yaml/yaml
|
|
||||||
//
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"reflect"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
"unicode/utf8"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The Unmarshaler interface may be implemented by types to customize their
|
|
||||||
// behavior when being unmarshaled from a YAML document.
|
|
||||||
type Unmarshaler interface {
|
|
||||||
UnmarshalYAML(value *Node) error
|
|
||||||
}
|
|
||||||
|
|
||||||
type obsoleteUnmarshaler interface {
|
|
||||||
UnmarshalYAML(unmarshal func(interface{}) error) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Marshaler interface may be implemented by types to customize their
|
|
||||||
// behavior when being marshaled into a YAML document. The returned value
|
|
||||||
// is marshaled in place of the original value implementing Marshaler.
|
|
||||||
//
|
|
||||||
// If an error is returned by MarshalYAML, the marshaling procedure stops
|
|
||||||
// and returns with the provided error.
|
|
||||||
type Marshaler interface {
|
|
||||||
MarshalYAML() (interface{}, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unmarshal decodes the first document found within the in byte slice
|
|
||||||
// and assigns decoded values into the out value.
|
|
||||||
//
|
|
||||||
// Maps and pointers (to a struct, string, int, etc) are accepted as out
|
|
||||||
// values. If an internal pointer within a struct is not initialized,
|
|
||||||
// the yaml package will initialize it if necessary for unmarshalling
|
|
||||||
// the provided data. The out parameter must not be nil.
|
|
||||||
//
|
|
||||||
// The type of the decoded values should be compatible with the respective
|
|
||||||
// values in out. If one or more values cannot be decoded due to a type
|
|
||||||
// mismatches, decoding continues partially until the end of the YAML
|
|
||||||
// content, and a *yaml.TypeError is returned with details for all
|
|
||||||
// missed values.
|
|
||||||
//
|
|
||||||
// Struct fields are only unmarshalled if they are exported (have an
|
|
||||||
// upper case first letter), and are unmarshalled using the field name
|
|
||||||
// lowercased as the default key. Custom keys may be defined via the
|
|
||||||
// "yaml" name in the field tag: the content preceding the first comma
|
|
||||||
// is used as the key, and the following comma-separated options are
|
|
||||||
// used to tweak the marshalling process (see Marshal).
|
|
||||||
// Conflicting names result in a runtime error.
|
|
||||||
//
|
|
||||||
// For example:
|
|
||||||
//
|
|
||||||
// type T struct {
|
|
||||||
// F int `yaml:"a,omitempty"`
|
|
||||||
// B int
|
|
||||||
// }
|
|
||||||
// var t T
|
|
||||||
// yaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
|
|
||||||
//
|
|
||||||
// See the documentation of Marshal for the format of tags and a list of
|
|
||||||
// supported tag options.
|
|
||||||
//
|
|
||||||
func Unmarshal(in []byte, out interface{}) (err error) {
|
|
||||||
return unmarshal(in, out, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Decoder reads and decodes YAML values from an input stream.
|
|
||||||
type Decoder struct {
|
|
||||||
parser *parser
|
|
||||||
knownFields bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewDecoder returns a new decoder that reads from r.
|
|
||||||
//
|
|
||||||
// The decoder introduces its own buffering and may read
|
|
||||||
// data from r beyond the YAML values requested.
|
|
||||||
func NewDecoder(r io.Reader) *Decoder {
|
|
||||||
return &Decoder{
|
|
||||||
parser: newParserFromReader(r),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// KnownFields ensures that the keys in decoded mappings to
|
|
||||||
// exist as fields in the struct being decoded into.
|
|
||||||
func (dec *Decoder) KnownFields(enable bool) {
|
|
||||||
dec.knownFields = enable
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode reads the next YAML-encoded value from its input
|
|
||||||
// and stores it in the value pointed to by v.
|
|
||||||
//
|
|
||||||
// See the documentation for Unmarshal for details about the
|
|
||||||
// conversion of YAML into a Go value.
|
|
||||||
func (dec *Decoder) Decode(v interface{}) (err error) {
|
|
||||||
d := newDecoder()
|
|
||||||
d.knownFields = dec.knownFields
|
|
||||||
defer handleErr(&err)
|
|
||||||
node := dec.parser.parse()
|
|
||||||
if node == nil {
|
|
||||||
return io.EOF
|
|
||||||
}
|
|
||||||
out := reflect.ValueOf(v)
|
|
||||||
if out.Kind() == reflect.Ptr && !out.IsNil() {
|
|
||||||
out = out.Elem()
|
|
||||||
}
|
|
||||||
d.unmarshal(node, out)
|
|
||||||
if len(d.terrors) > 0 {
|
|
||||||
return &TypeError{d.terrors}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decode decodes the node and stores its data into the value pointed to by v.
|
|
||||||
//
|
|
||||||
// See the documentation for Unmarshal for details about the
|
|
||||||
// conversion of YAML into a Go value.
|
|
||||||
func (n *Node) Decode(v interface{}) (err error) {
|
|
||||||
d := newDecoder()
|
|
||||||
defer handleErr(&err)
|
|
||||||
out := reflect.ValueOf(v)
|
|
||||||
if out.Kind() == reflect.Ptr && !out.IsNil() {
|
|
||||||
out = out.Elem()
|
|
||||||
}
|
|
||||||
d.unmarshal(n, out)
|
|
||||||
if len(d.terrors) > 0 {
|
|
||||||
return &TypeError{d.terrors}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func unmarshal(in []byte, out interface{}, strict bool) (err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
d := newDecoder()
|
|
||||||
p := newParser(in)
|
|
||||||
defer p.destroy()
|
|
||||||
node := p.parse()
|
|
||||||
if node != nil {
|
|
||||||
v := reflect.ValueOf(out)
|
|
||||||
if v.Kind() == reflect.Ptr && !v.IsNil() {
|
|
||||||
v = v.Elem()
|
|
||||||
}
|
|
||||||
d.unmarshal(node, v)
|
|
||||||
}
|
|
||||||
if len(d.terrors) > 0 {
|
|
||||||
return &TypeError{d.terrors}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Marshal serializes the value provided into a YAML document. The structure
|
|
||||||
// of the generated document will reflect the structure of the value itself.
|
|
||||||
// Maps and pointers (to struct, string, int, etc) are accepted as the in value.
|
|
||||||
//
|
|
||||||
// Struct fields are only marshalled if they are exported (have an upper case
|
|
||||||
// first letter), and are marshalled using the field name lowercased as the
|
|
||||||
// default key. Custom keys may be defined via the "yaml" name in the field
|
|
||||||
// tag: the content preceding the first comma is used as the key, and the
|
|
||||||
// following comma-separated options are used to tweak the marshalling process.
|
|
||||||
// Conflicting names result in a runtime error.
|
|
||||||
//
|
|
||||||
// The field tag format accepted is:
|
|
||||||
//
|
|
||||||
// `(...) yaml:"[<key>][,<flag1>[,<flag2>]]" (...)`
|
|
||||||
//
|
|
||||||
// The following flags are currently supported:
|
|
||||||
//
|
|
||||||
// omitempty Only include the field if it's not set to the zero
|
|
||||||
// value for the type or to empty slices or maps.
|
|
||||||
// Zero valued structs will be omitted if all their public
|
|
||||||
// fields are zero, unless they implement an IsZero
|
|
||||||
// method (see the IsZeroer interface type), in which
|
|
||||||
// case the field will be excluded if IsZero returns true.
|
|
||||||
//
|
|
||||||
// flow Marshal using a flow style (useful for structs,
|
|
||||||
// sequences and maps).
|
|
||||||
//
|
|
||||||
// inline Inline the field, which must be a struct or a map,
|
|
||||||
// causing all of its fields or keys to be processed as if
|
|
||||||
// they were part of the outer struct. For maps, keys must
|
|
||||||
// not conflict with the yaml keys of other struct fields.
|
|
||||||
//
|
|
||||||
// In addition, if the key is "-", the field is ignored.
|
|
||||||
//
|
|
||||||
// For example:
|
|
||||||
//
|
|
||||||
// type T struct {
|
|
||||||
// F int `yaml:"a,omitempty"`
|
|
||||||
// B int
|
|
||||||
// }
|
|
||||||
// yaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
|
|
||||||
// yaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
|
|
||||||
//
|
|
||||||
func Marshal(in interface{}) (out []byte, err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
e := newEncoder()
|
|
||||||
defer e.destroy()
|
|
||||||
e.marshalDoc("", reflect.ValueOf(in))
|
|
||||||
e.finish()
|
|
||||||
out = e.out
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// An Encoder writes YAML values to an output stream.
|
|
||||||
type Encoder struct {
|
|
||||||
encoder *encoder
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewEncoder returns a new encoder that writes to w.
|
|
||||||
// The Encoder should be closed after use to flush all data
|
|
||||||
// to w.
|
|
||||||
func NewEncoder(w io.Writer) *Encoder {
|
|
||||||
return &Encoder{
|
|
||||||
encoder: newEncoderWithWriter(w),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encode writes the YAML encoding of v to the stream.
|
|
||||||
// If multiple items are encoded to the stream, the
|
|
||||||
// second and subsequent document will be preceded
|
|
||||||
// with a "---" document separator, but the first will not.
|
|
||||||
//
|
|
||||||
// See the documentation for Marshal for details about the conversion of Go
|
|
||||||
// values to YAML.
|
|
||||||
func (e *Encoder) Encode(v interface{}) (err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
e.encoder.marshalDoc("", reflect.ValueOf(v))
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encode encodes value v and stores its representation in n.
|
|
||||||
//
|
|
||||||
// See the documentation for Marshal for details about the
|
|
||||||
// conversion of Go values into YAML.
|
|
||||||
func (n *Node) Encode(v interface{}) (err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
e := newEncoder()
|
|
||||||
defer e.destroy()
|
|
||||||
e.marshalDoc("", reflect.ValueOf(v))
|
|
||||||
e.finish()
|
|
||||||
p := newParser(e.out)
|
|
||||||
p.textless = true
|
|
||||||
defer p.destroy()
|
|
||||||
doc := p.parse()
|
|
||||||
*n = *doc.Content[0]
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetIndent changes the used indentation used when encoding.
|
|
||||||
func (e *Encoder) SetIndent(spaces int) {
|
|
||||||
if spaces < 0 {
|
|
||||||
panic("yaml: cannot indent to a negative number of spaces")
|
|
||||||
}
|
|
||||||
e.encoder.indent = spaces
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close closes the encoder by writing any remaining data.
|
|
||||||
// It does not write a stream terminating string "...".
|
|
||||||
func (e *Encoder) Close() (err error) {
|
|
||||||
defer handleErr(&err)
|
|
||||||
e.encoder.finish()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleErr(err *error) {
|
|
||||||
if v := recover(); v != nil {
|
|
||||||
if e, ok := v.(yamlError); ok {
|
|
||||||
*err = e.err
|
|
||||||
} else {
|
|
||||||
panic(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type yamlError struct {
|
|
||||||
err error
|
|
||||||
}
|
|
||||||
|
|
||||||
func fail(err error) {
|
|
||||||
panic(yamlError{err})
|
|
||||||
}
|
|
||||||
|
|
||||||
func failf(format string, args ...interface{}) {
|
|
||||||
panic(yamlError{fmt.Errorf("yaml: "+format, args...)})
|
|
||||||
}
|
|
||||||
|
|
||||||
// A TypeError is returned by Unmarshal when one or more fields in
|
|
||||||
// the YAML document cannot be properly decoded into the requested
|
|
||||||
// types. When this error is returned, the value is still
|
|
||||||
// unmarshaled partially.
|
|
||||||
type TypeError struct {
|
|
||||||
Errors []string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *TypeError) Error() string {
|
|
||||||
return fmt.Sprintf("yaml: unmarshal errors:\n %s", strings.Join(e.Errors, "\n "))
|
|
||||||
}
|
|
||||||
|
|
||||||
type Kind uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
DocumentNode Kind = 1 << iota
|
|
||||||
SequenceNode
|
|
||||||
MappingNode
|
|
||||||
ScalarNode
|
|
||||||
AliasNode
|
|
||||||
)
|
|
||||||
|
|
||||||
type Style uint32
|
|
||||||
|
|
||||||
const (
|
|
||||||
TaggedStyle Style = 1 << iota
|
|
||||||
DoubleQuotedStyle
|
|
||||||
SingleQuotedStyle
|
|
||||||
LiteralStyle
|
|
||||||
FoldedStyle
|
|
||||||
FlowStyle
|
|
||||||
)
|
|
||||||
|
|
||||||
// Node represents an element in the YAML document hierarchy. While documents
|
|
||||||
// are typically encoded and decoded into higher level types, such as structs
|
|
||||||
// and maps, Node is an intermediate representation that allows detailed
|
|
||||||
// control over the content being decoded or encoded.
|
|
||||||
//
|
|
||||||
// It's worth noting that although Node offers access into details such as
|
|
||||||
// line numbers, colums, and comments, the content when re-encoded will not
|
|
||||||
// have its original textual representation preserved. An effort is made to
|
|
||||||
// render the data plesantly, and to preserve comments near the data they
|
|
||||||
// describe, though.
|
|
||||||
//
|
|
||||||
// Values that make use of the Node type interact with the yaml package in the
|
|
||||||
// same way any other type would do, by encoding and decoding yaml data
|
|
||||||
// directly or indirectly into them.
|
|
||||||
//
|
|
||||||
// For example:
|
|
||||||
//
|
|
||||||
// var person struct {
|
|
||||||
// Name string
|
|
||||||
// Address yaml.Node
|
|
||||||
// }
|
|
||||||
// err := yaml.Unmarshal(data, &person)
|
|
||||||
//
|
|
||||||
// Or by itself:
|
|
||||||
//
|
|
||||||
// var person Node
|
|
||||||
// err := yaml.Unmarshal(data, &person)
|
|
||||||
//
|
|
||||||
type Node struct {
|
|
||||||
// Kind defines whether the node is a document, a mapping, a sequence,
|
|
||||||
// a scalar value, or an alias to another node. The specific data type of
|
|
||||||
// scalar nodes may be obtained via the ShortTag and LongTag methods.
|
|
||||||
Kind Kind
|
|
||||||
|
|
||||||
// Style allows customizing the apperance of the node in the tree.
|
|
||||||
Style Style
|
|
||||||
|
|
||||||
// Tag holds the YAML tag defining the data type for the value.
|
|
||||||
// When decoding, this field will always be set to the resolved tag,
|
|
||||||
// even when it wasn't explicitly provided in the YAML content.
|
|
||||||
// When encoding, if this field is unset the value type will be
|
|
||||||
// implied from the node properties, and if it is set, it will only
|
|
||||||
// be serialized into the representation if TaggedStyle is used or
|
|
||||||
// the implicit tag diverges from the provided one.
|
|
||||||
Tag string
|
|
||||||
|
|
||||||
// Value holds the unescaped and unquoted represenation of the value.
|
|
||||||
Value string
|
|
||||||
|
|
||||||
// Anchor holds the anchor name for this node, which allows aliases to point to it.
|
|
||||||
Anchor string
|
|
||||||
|
|
||||||
// Alias holds the node that this alias points to. Only valid when Kind is AliasNode.
|
|
||||||
Alias *Node
|
|
||||||
|
|
||||||
// Content holds contained nodes for documents, mappings, and sequences.
|
|
||||||
Content []*Node
|
|
||||||
|
|
||||||
// HeadComment holds any comments in the lines preceding the node and
|
|
||||||
// not separated by an empty line.
|
|
||||||
HeadComment string
|
|
||||||
|
|
||||||
// LineComment holds any comments at the end of the line where the node is in.
|
|
||||||
LineComment string
|
|
||||||
|
|
||||||
// FootComment holds any comments following the node and before empty lines.
|
|
||||||
FootComment string
|
|
||||||
|
|
||||||
// Line and Column hold the node position in the decoded YAML text.
|
|
||||||
// These fields are not respected when encoding the node.
|
|
||||||
Line int
|
|
||||||
Column int
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsZero returns whether the node has all of its fields unset.
|
|
||||||
func (n *Node) IsZero() bool {
|
|
||||||
return n.Kind == 0 && n.Style == 0 && n.Tag == "" && n.Value == "" && n.Anchor == "" && n.Alias == nil && n.Content == nil &&
|
|
||||||
n.HeadComment == "" && n.LineComment == "" && n.FootComment == "" && n.Line == 0 && n.Column == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// LongTag returns the long form of the tag that indicates the data type for
|
|
||||||
// the node. If the Tag field isn't explicitly defined, one will be computed
|
|
||||||
// based on the node properties.
|
|
||||||
func (n *Node) LongTag() string {
|
|
||||||
return longTag(n.ShortTag())
|
|
||||||
}
|
|
||||||
|
|
||||||
// ShortTag returns the short form of the YAML tag that indicates data type for
|
|
||||||
// the node. If the Tag field isn't explicitly defined, one will be computed
|
|
||||||
// based on the node properties.
|
|
||||||
func (n *Node) ShortTag() string {
|
|
||||||
if n.indicatedString() {
|
|
||||||
return strTag
|
|
||||||
}
|
|
||||||
if n.Tag == "" || n.Tag == "!" {
|
|
||||||
switch n.Kind {
|
|
||||||
case MappingNode:
|
|
||||||
return mapTag
|
|
||||||
case SequenceNode:
|
|
||||||
return seqTag
|
|
||||||
case AliasNode:
|
|
||||||
if n.Alias != nil {
|
|
||||||
return n.Alias.ShortTag()
|
|
||||||
}
|
|
||||||
case ScalarNode:
|
|
||||||
tag, _ := resolve("", n.Value)
|
|
||||||
return tag
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return shortTag(n.Tag)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *Node) indicatedString() bool {
|
|
||||||
return n.Kind == ScalarNode &&
|
|
||||||
(shortTag(n.Tag) == strTag ||
|
|
||||||
(n.Tag == "" || n.Tag == "!") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetString is a convenience function that sets the node to a string value
|
|
||||||
// and defines its style in a pleasant way depending on its content.
|
|
||||||
func (n *Node) SetString(s string) {
|
|
||||||
n.Kind = ScalarNode
|
|
||||||
if utf8.ValidString(s) {
|
|
||||||
n.Value = s
|
|
||||||
n.Tag = strTag
|
|
||||||
} else {
|
|
||||||
n.Value = encodeBase64(s)
|
|
||||||
n.Tag = binaryTag
|
|
||||||
}
|
|
||||||
if strings.Contains(n.Value, "\n") {
|
|
||||||
n.Style = LiteralStyle
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// Maintain a mapping of keys to structure field indexes
|
|
||||||
|
|
||||||
// The code in this section was copied from mgo/bson.
|
|
||||||
|
|
||||||
// structInfo holds details for the serialization of fields of
|
|
||||||
// a given struct.
|
|
||||||
type structInfo struct {
|
|
||||||
FieldsMap map[string]fieldInfo
|
|
||||||
FieldsList []fieldInfo
|
|
||||||
|
|
||||||
// InlineMap is the number of the field in the struct that
|
|
||||||
// contains an ,inline map, or -1 if there's none.
|
|
||||||
InlineMap int
|
|
||||||
|
|
||||||
// InlineUnmarshalers holds indexes to inlined fields that
|
|
||||||
// contain unmarshaler values.
|
|
||||||
InlineUnmarshalers [][]int
|
|
||||||
}
|
|
||||||
|
|
||||||
type fieldInfo struct {
|
|
||||||
Key string
|
|
||||||
Num int
|
|
||||||
OmitEmpty bool
|
|
||||||
Flow bool
|
|
||||||
// Id holds the unique field identifier, so we can cheaply
|
|
||||||
// check for field duplicates without maintaining an extra map.
|
|
||||||
Id int
|
|
||||||
|
|
||||||
// Inline holds the field index if the field is part of an inlined struct.
|
|
||||||
Inline []int
|
|
||||||
}
|
|
||||||
|
|
||||||
var structMap = make(map[reflect.Type]*structInfo)
|
|
||||||
var fieldMapMutex sync.RWMutex
|
|
||||||
var unmarshalerType reflect.Type
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
var v Unmarshaler
|
|
||||||
unmarshalerType = reflect.ValueOf(&v).Elem().Type()
|
|
||||||
}
|
|
||||||
|
|
||||||
func getStructInfo(st reflect.Type) (*structInfo, error) {
|
|
||||||
fieldMapMutex.RLock()
|
|
||||||
sinfo, found := structMap[st]
|
|
||||||
fieldMapMutex.RUnlock()
|
|
||||||
if found {
|
|
||||||
return sinfo, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
n := st.NumField()
|
|
||||||
fieldsMap := make(map[string]fieldInfo)
|
|
||||||
fieldsList := make([]fieldInfo, 0, n)
|
|
||||||
inlineMap := -1
|
|
||||||
inlineUnmarshalers := [][]int(nil)
|
|
||||||
for i := 0; i != n; i++ {
|
|
||||||
field := st.Field(i)
|
|
||||||
if field.PkgPath != "" && !field.Anonymous {
|
|
||||||
continue // Private field
|
|
||||||
}
|
|
||||||
|
|
||||||
info := fieldInfo{Num: i}
|
|
||||||
|
|
||||||
tag := field.Tag.Get("yaml")
|
|
||||||
if tag == "" && strings.Index(string(field.Tag), ":") < 0 {
|
|
||||||
tag = string(field.Tag)
|
|
||||||
}
|
|
||||||
if tag == "-" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
inline := false
|
|
||||||
fields := strings.Split(tag, ",")
|
|
||||||
if len(fields) > 1 {
|
|
||||||
for _, flag := range fields[1:] {
|
|
||||||
switch flag {
|
|
||||||
case "omitempty":
|
|
||||||
info.OmitEmpty = true
|
|
||||||
case "flow":
|
|
||||||
info.Flow = true
|
|
||||||
case "inline":
|
|
||||||
inline = true
|
|
||||||
default:
|
|
||||||
return nil, errors.New(fmt.Sprintf("unsupported flag %q in tag %q of type %s", flag, tag, st))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tag = fields[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
if inline {
|
|
||||||
switch field.Type.Kind() {
|
|
||||||
case reflect.Map:
|
|
||||||
if inlineMap >= 0 {
|
|
||||||
return nil, errors.New("multiple ,inline maps in struct " + st.String())
|
|
||||||
}
|
|
||||||
if field.Type.Key() != reflect.TypeOf("") {
|
|
||||||
return nil, errors.New("option ,inline needs a map with string keys in struct " + st.String())
|
|
||||||
}
|
|
||||||
inlineMap = info.Num
|
|
||||||
case reflect.Struct, reflect.Ptr:
|
|
||||||
ftype := field.Type
|
|
||||||
for ftype.Kind() == reflect.Ptr {
|
|
||||||
ftype = ftype.Elem()
|
|
||||||
}
|
|
||||||
if ftype.Kind() != reflect.Struct {
|
|
||||||
return nil, errors.New("option ,inline may only be used on a struct or map field")
|
|
||||||
}
|
|
||||||
if reflect.PtrTo(ftype).Implements(unmarshalerType) {
|
|
||||||
inlineUnmarshalers = append(inlineUnmarshalers, []int{i})
|
|
||||||
} else {
|
|
||||||
sinfo, err := getStructInfo(ftype)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
for _, index := range sinfo.InlineUnmarshalers {
|
|
||||||
inlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...))
|
|
||||||
}
|
|
||||||
for _, finfo := range sinfo.FieldsList {
|
|
||||||
if _, found := fieldsMap[finfo.Key]; found {
|
|
||||||
msg := "duplicated key '" + finfo.Key + "' in struct " + st.String()
|
|
||||||
return nil, errors.New(msg)
|
|
||||||
}
|
|
||||||
if finfo.Inline == nil {
|
|
||||||
finfo.Inline = []int{i, finfo.Num}
|
|
||||||
} else {
|
|
||||||
finfo.Inline = append([]int{i}, finfo.Inline...)
|
|
||||||
}
|
|
||||||
finfo.Id = len(fieldsList)
|
|
||||||
fieldsMap[finfo.Key] = finfo
|
|
||||||
fieldsList = append(fieldsList, finfo)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return nil, errors.New("option ,inline may only be used on a struct or map field")
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if tag != "" {
|
|
||||||
info.Key = tag
|
|
||||||
} else {
|
|
||||||
info.Key = strings.ToLower(field.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, found = fieldsMap[info.Key]; found {
|
|
||||||
msg := "duplicated key '" + info.Key + "' in struct " + st.String()
|
|
||||||
return nil, errors.New(msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
info.Id = len(fieldsList)
|
|
||||||
fieldsList = append(fieldsList, info)
|
|
||||||
fieldsMap[info.Key] = info
|
|
||||||
}
|
|
||||||
|
|
||||||
sinfo = &structInfo{
|
|
||||||
FieldsMap: fieldsMap,
|
|
||||||
FieldsList: fieldsList,
|
|
||||||
InlineMap: inlineMap,
|
|
||||||
InlineUnmarshalers: inlineUnmarshalers,
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldMapMutex.Lock()
|
|
||||||
structMap[st] = sinfo
|
|
||||||
fieldMapMutex.Unlock()
|
|
||||||
return sinfo, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsZeroer is used to check whether an object is zero to
|
|
||||||
// determine whether it should be omitted when marshaling
|
|
||||||
// with the omitempty flag. One notable implementation
|
|
||||||
// is time.Time.
|
|
||||||
type IsZeroer interface {
|
|
||||||
IsZero() bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func isZero(v reflect.Value) bool {
|
|
||||||
kind := v.Kind()
|
|
||||||
if z, ok := v.Interface().(IsZeroer); ok {
|
|
||||||
if (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return z.IsZero()
|
|
||||||
}
|
|
||||||
switch kind {
|
|
||||||
case reflect.String:
|
|
||||||
return len(v.String()) == 0
|
|
||||||
case reflect.Interface, reflect.Ptr:
|
|
||||||
return v.IsNil()
|
|
||||||
case reflect.Slice:
|
|
||||||
return v.Len() == 0
|
|
||||||
case reflect.Map:
|
|
||||||
return v.Len() == 0
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
return v.Int() == 0
|
|
||||||
case reflect.Float32, reflect.Float64:
|
|
||||||
return v.Float() == 0
|
|
||||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
|
|
||||||
return v.Uint() == 0
|
|
||||||
case reflect.Bool:
|
|
||||||
return !v.Bool()
|
|
||||||
case reflect.Struct:
|
|
||||||
vt := v.Type()
|
|
||||||
for i := v.NumField() - 1; i >= 0; i-- {
|
|
||||||
if vt.Field(i).PkgPath != "" {
|
|
||||||
continue // Private field
|
|
||||||
}
|
|
||||||
if !isZero(v.Field(i)) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
807
vendor/gopkg.in/yaml.v3/yamlh.go
generated
vendored
807
vendor/gopkg.in/yaml.v3/yamlh.go
generated
vendored
@ -1,807 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
// Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
// this software and associated documentation files (the "Software"), to deal in
|
|
||||||
// the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
// of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
// The version directive data.
|
|
||||||
type yaml_version_directive_t struct {
|
|
||||||
major int8 // The major version number.
|
|
||||||
minor int8 // The minor version number.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The tag directive data.
|
|
||||||
type yaml_tag_directive_t struct {
|
|
||||||
handle []byte // The tag handle.
|
|
||||||
prefix []byte // The tag prefix.
|
|
||||||
}
|
|
||||||
|
|
||||||
type yaml_encoding_t int
|
|
||||||
|
|
||||||
// The stream encoding.
|
|
||||||
const (
|
|
||||||
// Let the parser choose the encoding.
|
|
||||||
yaml_ANY_ENCODING yaml_encoding_t = iota
|
|
||||||
|
|
||||||
yaml_UTF8_ENCODING // The default UTF-8 encoding.
|
|
||||||
yaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.
|
|
||||||
yaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.
|
|
||||||
)
|
|
||||||
|
|
||||||
type yaml_break_t int
|
|
||||||
|
|
||||||
// Line break types.
|
|
||||||
const (
|
|
||||||
// Let the parser choose the break type.
|
|
||||||
yaml_ANY_BREAK yaml_break_t = iota
|
|
||||||
|
|
||||||
yaml_CR_BREAK // Use CR for line breaks (Mac style).
|
|
||||||
yaml_LN_BREAK // Use LN for line breaks (Unix style).
|
|
||||||
yaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).
|
|
||||||
)
|
|
||||||
|
|
||||||
type yaml_error_type_t int
|
|
||||||
|
|
||||||
// Many bad things could happen with the parser and emitter.
|
|
||||||
const (
|
|
||||||
// No error is produced.
|
|
||||||
yaml_NO_ERROR yaml_error_type_t = iota
|
|
||||||
|
|
||||||
yaml_MEMORY_ERROR // Cannot allocate or reallocate a block of memory.
|
|
||||||
yaml_READER_ERROR // Cannot read or decode the input stream.
|
|
||||||
yaml_SCANNER_ERROR // Cannot scan the input stream.
|
|
||||||
yaml_PARSER_ERROR // Cannot parse the input stream.
|
|
||||||
yaml_COMPOSER_ERROR // Cannot compose a YAML document.
|
|
||||||
yaml_WRITER_ERROR // Cannot write to the output stream.
|
|
||||||
yaml_EMITTER_ERROR // Cannot emit a YAML stream.
|
|
||||||
)
|
|
||||||
|
|
||||||
// The pointer position.
|
|
||||||
type yaml_mark_t struct {
|
|
||||||
index int // The position index.
|
|
||||||
line int // The position line.
|
|
||||||
column int // The position column.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Node Styles
|
|
||||||
|
|
||||||
type yaml_style_t int8
|
|
||||||
|
|
||||||
type yaml_scalar_style_t yaml_style_t
|
|
||||||
|
|
||||||
// Scalar styles.
|
|
||||||
const (
|
|
||||||
// Let the emitter choose the style.
|
|
||||||
yaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0
|
|
||||||
|
|
||||||
yaml_PLAIN_SCALAR_STYLE yaml_scalar_style_t = 1 << iota // The plain scalar style.
|
|
||||||
yaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.
|
|
||||||
yaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.
|
|
||||||
yaml_LITERAL_SCALAR_STYLE // The literal scalar style.
|
|
||||||
yaml_FOLDED_SCALAR_STYLE // The folded scalar style.
|
|
||||||
)
|
|
||||||
|
|
||||||
type yaml_sequence_style_t yaml_style_t
|
|
||||||
|
|
||||||
// Sequence styles.
|
|
||||||
const (
|
|
||||||
// Let the emitter choose the style.
|
|
||||||
yaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota
|
|
||||||
|
|
||||||
yaml_BLOCK_SEQUENCE_STYLE // The block sequence style.
|
|
||||||
yaml_FLOW_SEQUENCE_STYLE // The flow sequence style.
|
|
||||||
)
|
|
||||||
|
|
||||||
type yaml_mapping_style_t yaml_style_t
|
|
||||||
|
|
||||||
// Mapping styles.
|
|
||||||
const (
|
|
||||||
// Let the emitter choose the style.
|
|
||||||
yaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota
|
|
||||||
|
|
||||||
yaml_BLOCK_MAPPING_STYLE // The block mapping style.
|
|
||||||
yaml_FLOW_MAPPING_STYLE // The flow mapping style.
|
|
||||||
)
|
|
||||||
|
|
||||||
// Tokens
|
|
||||||
|
|
||||||
type yaml_token_type_t int
|
|
||||||
|
|
||||||
// Token types.
|
|
||||||
const (
|
|
||||||
// An empty token.
|
|
||||||
yaml_NO_TOKEN yaml_token_type_t = iota
|
|
||||||
|
|
||||||
yaml_STREAM_START_TOKEN // A STREAM-START token.
|
|
||||||
yaml_STREAM_END_TOKEN // A STREAM-END token.
|
|
||||||
|
|
||||||
yaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.
|
|
||||||
yaml_TAG_DIRECTIVE_TOKEN // A TAG-DIRECTIVE token.
|
|
||||||
yaml_DOCUMENT_START_TOKEN // A DOCUMENT-START token.
|
|
||||||
yaml_DOCUMENT_END_TOKEN // A DOCUMENT-END token.
|
|
||||||
|
|
||||||
yaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.
|
|
||||||
yaml_BLOCK_MAPPING_START_TOKEN // A BLOCK-SEQUENCE-END token.
|
|
||||||
yaml_BLOCK_END_TOKEN // A BLOCK-END token.
|
|
||||||
|
|
||||||
yaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.
|
|
||||||
yaml_FLOW_SEQUENCE_END_TOKEN // A FLOW-SEQUENCE-END token.
|
|
||||||
yaml_FLOW_MAPPING_START_TOKEN // A FLOW-MAPPING-START token.
|
|
||||||
yaml_FLOW_MAPPING_END_TOKEN // A FLOW-MAPPING-END token.
|
|
||||||
|
|
||||||
yaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.
|
|
||||||
yaml_FLOW_ENTRY_TOKEN // A FLOW-ENTRY token.
|
|
||||||
yaml_KEY_TOKEN // A KEY token.
|
|
||||||
yaml_VALUE_TOKEN // A VALUE token.
|
|
||||||
|
|
||||||
yaml_ALIAS_TOKEN // An ALIAS token.
|
|
||||||
yaml_ANCHOR_TOKEN // An ANCHOR token.
|
|
||||||
yaml_TAG_TOKEN // A TAG token.
|
|
||||||
yaml_SCALAR_TOKEN // A SCALAR token.
|
|
||||||
)
|
|
||||||
|
|
||||||
func (tt yaml_token_type_t) String() string {
|
|
||||||
switch tt {
|
|
||||||
case yaml_NO_TOKEN:
|
|
||||||
return "yaml_NO_TOKEN"
|
|
||||||
case yaml_STREAM_START_TOKEN:
|
|
||||||
return "yaml_STREAM_START_TOKEN"
|
|
||||||
case yaml_STREAM_END_TOKEN:
|
|
||||||
return "yaml_STREAM_END_TOKEN"
|
|
||||||
case yaml_VERSION_DIRECTIVE_TOKEN:
|
|
||||||
return "yaml_VERSION_DIRECTIVE_TOKEN"
|
|
||||||
case yaml_TAG_DIRECTIVE_TOKEN:
|
|
||||||
return "yaml_TAG_DIRECTIVE_TOKEN"
|
|
||||||
case yaml_DOCUMENT_START_TOKEN:
|
|
||||||
return "yaml_DOCUMENT_START_TOKEN"
|
|
||||||
case yaml_DOCUMENT_END_TOKEN:
|
|
||||||
return "yaml_DOCUMENT_END_TOKEN"
|
|
||||||
case yaml_BLOCK_SEQUENCE_START_TOKEN:
|
|
||||||
return "yaml_BLOCK_SEQUENCE_START_TOKEN"
|
|
||||||
case yaml_BLOCK_MAPPING_START_TOKEN:
|
|
||||||
return "yaml_BLOCK_MAPPING_START_TOKEN"
|
|
||||||
case yaml_BLOCK_END_TOKEN:
|
|
||||||
return "yaml_BLOCK_END_TOKEN"
|
|
||||||
case yaml_FLOW_SEQUENCE_START_TOKEN:
|
|
||||||
return "yaml_FLOW_SEQUENCE_START_TOKEN"
|
|
||||||
case yaml_FLOW_SEQUENCE_END_TOKEN:
|
|
||||||
return "yaml_FLOW_SEQUENCE_END_TOKEN"
|
|
||||||
case yaml_FLOW_MAPPING_START_TOKEN:
|
|
||||||
return "yaml_FLOW_MAPPING_START_TOKEN"
|
|
||||||
case yaml_FLOW_MAPPING_END_TOKEN:
|
|
||||||
return "yaml_FLOW_MAPPING_END_TOKEN"
|
|
||||||
case yaml_BLOCK_ENTRY_TOKEN:
|
|
||||||
return "yaml_BLOCK_ENTRY_TOKEN"
|
|
||||||
case yaml_FLOW_ENTRY_TOKEN:
|
|
||||||
return "yaml_FLOW_ENTRY_TOKEN"
|
|
||||||
case yaml_KEY_TOKEN:
|
|
||||||
return "yaml_KEY_TOKEN"
|
|
||||||
case yaml_VALUE_TOKEN:
|
|
||||||
return "yaml_VALUE_TOKEN"
|
|
||||||
case yaml_ALIAS_TOKEN:
|
|
||||||
return "yaml_ALIAS_TOKEN"
|
|
||||||
case yaml_ANCHOR_TOKEN:
|
|
||||||
return "yaml_ANCHOR_TOKEN"
|
|
||||||
case yaml_TAG_TOKEN:
|
|
||||||
return "yaml_TAG_TOKEN"
|
|
||||||
case yaml_SCALAR_TOKEN:
|
|
||||||
return "yaml_SCALAR_TOKEN"
|
|
||||||
}
|
|
||||||
return "<unknown token>"
|
|
||||||
}
|
|
||||||
|
|
||||||
// The token structure.
|
|
||||||
type yaml_token_t struct {
|
|
||||||
// The token type.
|
|
||||||
typ yaml_token_type_t
|
|
||||||
|
|
||||||
// The start/end of the token.
|
|
||||||
start_mark, end_mark yaml_mark_t
|
|
||||||
|
|
||||||
// The stream encoding (for yaml_STREAM_START_TOKEN).
|
|
||||||
encoding yaml_encoding_t
|
|
||||||
|
|
||||||
// The alias/anchor/scalar value or tag/tag directive handle
|
|
||||||
// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
|
|
||||||
value []byte
|
|
||||||
|
|
||||||
// The tag suffix (for yaml_TAG_TOKEN).
|
|
||||||
suffix []byte
|
|
||||||
|
|
||||||
// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
|
|
||||||
prefix []byte
|
|
||||||
|
|
||||||
// The scalar style (for yaml_SCALAR_TOKEN).
|
|
||||||
style yaml_scalar_style_t
|
|
||||||
|
|
||||||
// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
|
|
||||||
major, minor int8
|
|
||||||
}
|
|
||||||
|
|
||||||
// Events
|
|
||||||
|
|
||||||
type yaml_event_type_t int8
|
|
||||||
|
|
||||||
// Event types.
|
|
||||||
const (
|
|
||||||
// An empty event.
|
|
||||||
yaml_NO_EVENT yaml_event_type_t = iota
|
|
||||||
|
|
||||||
yaml_STREAM_START_EVENT // A STREAM-START event.
|
|
||||||
yaml_STREAM_END_EVENT // A STREAM-END event.
|
|
||||||
yaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.
|
|
||||||
yaml_DOCUMENT_END_EVENT // A DOCUMENT-END event.
|
|
||||||
yaml_ALIAS_EVENT // An ALIAS event.
|
|
||||||
yaml_SCALAR_EVENT // A SCALAR event.
|
|
||||||
yaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.
|
|
||||||
yaml_SEQUENCE_END_EVENT // A SEQUENCE-END event.
|
|
||||||
yaml_MAPPING_START_EVENT // A MAPPING-START event.
|
|
||||||
yaml_MAPPING_END_EVENT // A MAPPING-END event.
|
|
||||||
yaml_TAIL_COMMENT_EVENT
|
|
||||||
)
|
|
||||||
|
|
||||||
var eventStrings = []string{
|
|
||||||
yaml_NO_EVENT: "none",
|
|
||||||
yaml_STREAM_START_EVENT: "stream start",
|
|
||||||
yaml_STREAM_END_EVENT: "stream end",
|
|
||||||
yaml_DOCUMENT_START_EVENT: "document start",
|
|
||||||
yaml_DOCUMENT_END_EVENT: "document end",
|
|
||||||
yaml_ALIAS_EVENT: "alias",
|
|
||||||
yaml_SCALAR_EVENT: "scalar",
|
|
||||||
yaml_SEQUENCE_START_EVENT: "sequence start",
|
|
||||||
yaml_SEQUENCE_END_EVENT: "sequence end",
|
|
||||||
yaml_MAPPING_START_EVENT: "mapping start",
|
|
||||||
yaml_MAPPING_END_EVENT: "mapping end",
|
|
||||||
yaml_TAIL_COMMENT_EVENT: "tail comment",
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e yaml_event_type_t) String() string {
|
|
||||||
if e < 0 || int(e) >= len(eventStrings) {
|
|
||||||
return fmt.Sprintf("unknown event %d", e)
|
|
||||||
}
|
|
||||||
return eventStrings[e]
|
|
||||||
}
|
|
||||||
|
|
||||||
// The event structure.
|
|
||||||
type yaml_event_t struct {
|
|
||||||
|
|
||||||
// The event type.
|
|
||||||
typ yaml_event_type_t
|
|
||||||
|
|
||||||
// The start and end of the event.
|
|
||||||
start_mark, end_mark yaml_mark_t
|
|
||||||
|
|
||||||
// The document encoding (for yaml_STREAM_START_EVENT).
|
|
||||||
encoding yaml_encoding_t
|
|
||||||
|
|
||||||
// The version directive (for yaml_DOCUMENT_START_EVENT).
|
|
||||||
version_directive *yaml_version_directive_t
|
|
||||||
|
|
||||||
// The list of tag directives (for yaml_DOCUMENT_START_EVENT).
|
|
||||||
tag_directives []yaml_tag_directive_t
|
|
||||||
|
|
||||||
// The comments
|
|
||||||
head_comment []byte
|
|
||||||
line_comment []byte
|
|
||||||
foot_comment []byte
|
|
||||||
tail_comment []byte
|
|
||||||
|
|
||||||
// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
|
|
||||||
anchor []byte
|
|
||||||
|
|
||||||
// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
|
|
||||||
tag []byte
|
|
||||||
|
|
||||||
// The scalar value (for yaml_SCALAR_EVENT).
|
|
||||||
value []byte
|
|
||||||
|
|
||||||
// Is the document start/end indicator implicit, or the tag optional?
|
|
||||||
// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
|
|
||||||
implicit bool
|
|
||||||
|
|
||||||
// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
|
|
||||||
quoted_implicit bool
|
|
||||||
|
|
||||||
// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
|
|
||||||
style yaml_style_t
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *yaml_event_t) scalar_style() yaml_scalar_style_t { return yaml_scalar_style_t(e.style) }
|
|
||||||
func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
|
|
||||||
func (e *yaml_event_t) mapping_style() yaml_mapping_style_t { return yaml_mapping_style_t(e.style) }
|
|
||||||
|
|
||||||
// Nodes
|
|
||||||
|
|
||||||
const (
|
|
||||||
yaml_NULL_TAG = "tag:yaml.org,2002:null" // The tag !!null with the only possible value: null.
|
|
||||||
yaml_BOOL_TAG = "tag:yaml.org,2002:bool" // The tag !!bool with the values: true and false.
|
|
||||||
yaml_STR_TAG = "tag:yaml.org,2002:str" // The tag !!str for string values.
|
|
||||||
yaml_INT_TAG = "tag:yaml.org,2002:int" // The tag !!int for integer values.
|
|
||||||
yaml_FLOAT_TAG = "tag:yaml.org,2002:float" // The tag !!float for float values.
|
|
||||||
yaml_TIMESTAMP_TAG = "tag:yaml.org,2002:timestamp" // The tag !!timestamp for date and time values.
|
|
||||||
|
|
||||||
yaml_SEQ_TAG = "tag:yaml.org,2002:seq" // The tag !!seq is used to denote sequences.
|
|
||||||
yaml_MAP_TAG = "tag:yaml.org,2002:map" // The tag !!map is used to denote mapping.
|
|
||||||
|
|
||||||
// Not in original libyaml.
|
|
||||||
yaml_BINARY_TAG = "tag:yaml.org,2002:binary"
|
|
||||||
yaml_MERGE_TAG = "tag:yaml.org,2002:merge"
|
|
||||||
|
|
||||||
yaml_DEFAULT_SCALAR_TAG = yaml_STR_TAG // The default scalar tag is !!str.
|
|
||||||
yaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.
|
|
||||||
yaml_DEFAULT_MAPPING_TAG = yaml_MAP_TAG // The default mapping tag is !!map.
|
|
||||||
)
|
|
||||||
|
|
||||||
type yaml_node_type_t int
|
|
||||||
|
|
||||||
// Node types.
|
|
||||||
const (
|
|
||||||
// An empty node.
|
|
||||||
yaml_NO_NODE yaml_node_type_t = iota
|
|
||||||
|
|
||||||
yaml_SCALAR_NODE // A scalar node.
|
|
||||||
yaml_SEQUENCE_NODE // A sequence node.
|
|
||||||
yaml_MAPPING_NODE // A mapping node.
|
|
||||||
)
|
|
||||||
|
|
||||||
// An element of a sequence node.
|
|
||||||
type yaml_node_item_t int
|
|
||||||
|
|
||||||
// An element of a mapping node.
|
|
||||||
type yaml_node_pair_t struct {
|
|
||||||
key int // The key of the element.
|
|
||||||
value int // The value of the element.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The node structure.
|
|
||||||
type yaml_node_t struct {
|
|
||||||
typ yaml_node_type_t // The node type.
|
|
||||||
tag []byte // The node tag.
|
|
||||||
|
|
||||||
// The node data.
|
|
||||||
|
|
||||||
// The scalar parameters (for yaml_SCALAR_NODE).
|
|
||||||
scalar struct {
|
|
||||||
value []byte // The scalar value.
|
|
||||||
length int // The length of the scalar value.
|
|
||||||
style yaml_scalar_style_t // The scalar style.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The sequence parameters (for YAML_SEQUENCE_NODE).
|
|
||||||
sequence struct {
|
|
||||||
items_data []yaml_node_item_t // The stack of sequence items.
|
|
||||||
style yaml_sequence_style_t // The sequence style.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The mapping parameters (for yaml_MAPPING_NODE).
|
|
||||||
mapping struct {
|
|
||||||
pairs_data []yaml_node_pair_t // The stack of mapping pairs (key, value).
|
|
||||||
pairs_start *yaml_node_pair_t // The beginning of the stack.
|
|
||||||
pairs_end *yaml_node_pair_t // The end of the stack.
|
|
||||||
pairs_top *yaml_node_pair_t // The top of the stack.
|
|
||||||
style yaml_mapping_style_t // The mapping style.
|
|
||||||
}
|
|
||||||
|
|
||||||
start_mark yaml_mark_t // The beginning of the node.
|
|
||||||
end_mark yaml_mark_t // The end of the node.
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// The document structure.
|
|
||||||
type yaml_document_t struct {
|
|
||||||
|
|
||||||
// The document nodes.
|
|
||||||
nodes []yaml_node_t
|
|
||||||
|
|
||||||
// The version directive.
|
|
||||||
version_directive *yaml_version_directive_t
|
|
||||||
|
|
||||||
// The list of tag directives.
|
|
||||||
tag_directives_data []yaml_tag_directive_t
|
|
||||||
tag_directives_start int // The beginning of the tag directives list.
|
|
||||||
tag_directives_end int // The end of the tag directives list.
|
|
||||||
|
|
||||||
start_implicit int // Is the document start indicator implicit?
|
|
||||||
end_implicit int // Is the document end indicator implicit?
|
|
||||||
|
|
||||||
// The start/end of the document.
|
|
||||||
start_mark, end_mark yaml_mark_t
|
|
||||||
}
|
|
||||||
|
|
||||||
// The prototype of a read handler.
|
|
||||||
//
|
|
||||||
// The read handler is called when the parser needs to read more bytes from the
|
|
||||||
// source. The handler should write not more than size bytes to the buffer.
|
|
||||||
// The number of written bytes should be set to the size_read variable.
|
|
||||||
//
|
|
||||||
// [in,out] data A pointer to an application data specified by
|
|
||||||
// yaml_parser_set_input().
|
|
||||||
// [out] buffer The buffer to write the data from the source.
|
|
||||||
// [in] size The size of the buffer.
|
|
||||||
// [out] size_read The actual number of bytes read from the source.
|
|
||||||
//
|
|
||||||
// On success, the handler should return 1. If the handler failed,
|
|
||||||
// the returned value should be 0. On EOF, the handler should set the
|
|
||||||
// size_read to 0 and return 1.
|
|
||||||
type yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)
|
|
||||||
|
|
||||||
// This structure holds information about a potential simple key.
|
|
||||||
type yaml_simple_key_t struct {
|
|
||||||
possible bool // Is a simple key possible?
|
|
||||||
required bool // Is a simple key required?
|
|
||||||
token_number int // The number of the token.
|
|
||||||
mark yaml_mark_t // The position mark.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The states of the parser.
|
|
||||||
type yaml_parser_state_t int
|
|
||||||
|
|
||||||
const (
|
|
||||||
yaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota
|
|
||||||
|
|
||||||
yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE // Expect the beginning of an implicit document.
|
|
||||||
yaml_PARSE_DOCUMENT_START_STATE // Expect DOCUMENT-START.
|
|
||||||
yaml_PARSE_DOCUMENT_CONTENT_STATE // Expect the content of a document.
|
|
||||||
yaml_PARSE_DOCUMENT_END_STATE // Expect DOCUMENT-END.
|
|
||||||
yaml_PARSE_BLOCK_NODE_STATE // Expect a block node.
|
|
||||||
yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.
|
|
||||||
yaml_PARSE_FLOW_NODE_STATE // Expect a flow node.
|
|
||||||
yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a block sequence.
|
|
||||||
yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE // Expect an entry of a block sequence.
|
|
||||||
yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE // Expect an entry of an indentless sequence.
|
|
||||||
yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping.
|
|
||||||
yaml_PARSE_BLOCK_MAPPING_KEY_STATE // Expect a block mapping key.
|
|
||||||
yaml_PARSE_BLOCK_MAPPING_VALUE_STATE // Expect a block mapping value.
|
|
||||||
yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE // Expect the first entry of a flow sequence.
|
|
||||||
yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE // Expect an entry of a flow sequence.
|
|
||||||
yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE // Expect a key of an ordered mapping.
|
|
||||||
yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.
|
|
||||||
yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE // Expect the and of an ordered mapping entry.
|
|
||||||
yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping.
|
|
||||||
yaml_PARSE_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping.
|
|
||||||
yaml_PARSE_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping.
|
|
||||||
yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE // Expect an empty value of a flow mapping.
|
|
||||||
yaml_PARSE_END_STATE // Expect nothing.
|
|
||||||
)
|
|
||||||
|
|
||||||
func (ps yaml_parser_state_t) String() string {
|
|
||||||
switch ps {
|
|
||||||
case yaml_PARSE_STREAM_START_STATE:
|
|
||||||
return "yaml_PARSE_STREAM_START_STATE"
|
|
||||||
case yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:
|
|
||||||
return "yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE"
|
|
||||||
case yaml_PARSE_DOCUMENT_START_STATE:
|
|
||||||
return "yaml_PARSE_DOCUMENT_START_STATE"
|
|
||||||
case yaml_PARSE_DOCUMENT_CONTENT_STATE:
|
|
||||||
return "yaml_PARSE_DOCUMENT_CONTENT_STATE"
|
|
||||||
case yaml_PARSE_DOCUMENT_END_STATE:
|
|
||||||
return "yaml_PARSE_DOCUMENT_END_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_NODE_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_NODE_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE"
|
|
||||||
case yaml_PARSE_FLOW_NODE_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_NODE_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE"
|
|
||||||
case yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:
|
|
||||||
return "yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_MAPPING_KEY_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_MAPPING_KEY_STATE"
|
|
||||||
case yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:
|
|
||||||
return "yaml_PARSE_BLOCK_MAPPING_VALUE_STATE"
|
|
||||||
case yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE"
|
|
||||||
case yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE"
|
|
||||||
case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE"
|
|
||||||
case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE"
|
|
||||||
case yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE"
|
|
||||||
case yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE"
|
|
||||||
case yaml_PARSE_FLOW_MAPPING_KEY_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_MAPPING_KEY_STATE"
|
|
||||||
case yaml_PARSE_FLOW_MAPPING_VALUE_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_MAPPING_VALUE_STATE"
|
|
||||||
case yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:
|
|
||||||
return "yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE"
|
|
||||||
case yaml_PARSE_END_STATE:
|
|
||||||
return "yaml_PARSE_END_STATE"
|
|
||||||
}
|
|
||||||
return "<unknown parser state>"
|
|
||||||
}
|
|
||||||
|
|
||||||
// This structure holds aliases data.
|
|
||||||
type yaml_alias_data_t struct {
|
|
||||||
anchor []byte // The anchor.
|
|
||||||
index int // The node id.
|
|
||||||
mark yaml_mark_t // The anchor mark.
|
|
||||||
}
|
|
||||||
|
|
||||||
// The parser structure.
|
|
||||||
//
|
|
||||||
// All members are internal. Manage the structure using the
|
|
||||||
// yaml_parser_ family of functions.
|
|
||||||
type yaml_parser_t struct {
|
|
||||||
|
|
||||||
// Error handling
|
|
||||||
|
|
||||||
error yaml_error_type_t // Error type.
|
|
||||||
|
|
||||||
problem string // Error description.
|
|
||||||
|
|
||||||
// The byte about which the problem occurred.
|
|
||||||
problem_offset int
|
|
||||||
problem_value int
|
|
||||||
problem_mark yaml_mark_t
|
|
||||||
|
|
||||||
// The error context.
|
|
||||||
context string
|
|
||||||
context_mark yaml_mark_t
|
|
||||||
|
|
||||||
// Reader stuff
|
|
||||||
|
|
||||||
read_handler yaml_read_handler_t // Read handler.
|
|
||||||
|
|
||||||
input_reader io.Reader // File input data.
|
|
||||||
input []byte // String input data.
|
|
||||||
input_pos int
|
|
||||||
|
|
||||||
eof bool // EOF flag
|
|
||||||
|
|
||||||
buffer []byte // The working buffer.
|
|
||||||
buffer_pos int // The current position of the buffer.
|
|
||||||
|
|
||||||
unread int // The number of unread characters in the buffer.
|
|
||||||
|
|
||||||
newlines int // The number of line breaks since last non-break/non-blank character
|
|
||||||
|
|
||||||
raw_buffer []byte // The raw buffer.
|
|
||||||
raw_buffer_pos int // The current position of the buffer.
|
|
||||||
|
|
||||||
encoding yaml_encoding_t // The input encoding.
|
|
||||||
|
|
||||||
offset int // The offset of the current position (in bytes).
|
|
||||||
mark yaml_mark_t // The mark of the current position.
|
|
||||||
|
|
||||||
// Comments
|
|
||||||
|
|
||||||
head_comment []byte // The current head comments
|
|
||||||
line_comment []byte // The current line comments
|
|
||||||
foot_comment []byte // The current foot comments
|
|
||||||
tail_comment []byte // Foot comment that happens at the end of a block.
|
|
||||||
stem_comment []byte // Comment in item preceding a nested structure (list inside list item, etc)
|
|
||||||
|
|
||||||
comments []yaml_comment_t // The folded comments for all parsed tokens
|
|
||||||
comments_head int
|
|
||||||
|
|
||||||
// Scanner stuff
|
|
||||||
|
|
||||||
stream_start_produced bool // Have we started to scan the input stream?
|
|
||||||
stream_end_produced bool // Have we reached the end of the input stream?
|
|
||||||
|
|
||||||
flow_level int // The number of unclosed '[' and '{' indicators.
|
|
||||||
|
|
||||||
tokens []yaml_token_t // The tokens queue.
|
|
||||||
tokens_head int // The head of the tokens queue.
|
|
||||||
tokens_parsed int // The number of tokens fetched from the queue.
|
|
||||||
token_available bool // Does the tokens queue contain a token ready for dequeueing.
|
|
||||||
|
|
||||||
indent int // The current indentation level.
|
|
||||||
indents []int // The indentation levels stack.
|
|
||||||
|
|
||||||
simple_key_allowed bool // May a simple key occur at the current position?
|
|
||||||
simple_keys []yaml_simple_key_t // The stack of simple keys.
|
|
||||||
simple_keys_by_tok map[int]int // possible simple_key indexes indexed by token_number
|
|
||||||
|
|
||||||
// Parser stuff
|
|
||||||
|
|
||||||
state yaml_parser_state_t // The current parser state.
|
|
||||||
states []yaml_parser_state_t // The parser states stack.
|
|
||||||
marks []yaml_mark_t // The stack of marks.
|
|
||||||
tag_directives []yaml_tag_directive_t // The list of TAG directives.
|
|
||||||
|
|
||||||
// Dumper stuff
|
|
||||||
|
|
||||||
aliases []yaml_alias_data_t // The alias data.
|
|
||||||
|
|
||||||
document *yaml_document_t // The currently parsed document.
|
|
||||||
}
|
|
||||||
|
|
||||||
type yaml_comment_t struct {
|
|
||||||
|
|
||||||
scan_mark yaml_mark_t // Position where scanning for comments started
|
|
||||||
token_mark yaml_mark_t // Position after which tokens will be associated with this comment
|
|
||||||
start_mark yaml_mark_t // Position of '#' comment mark
|
|
||||||
end_mark yaml_mark_t // Position where comment terminated
|
|
||||||
|
|
||||||
head []byte
|
|
||||||
line []byte
|
|
||||||
foot []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// Emitter Definitions
|
|
||||||
|
|
||||||
// The prototype of a write handler.
|
|
||||||
//
|
|
||||||
// The write handler is called when the emitter needs to flush the accumulated
|
|
||||||
// characters to the output. The handler should write @a size bytes of the
|
|
||||||
// @a buffer to the output.
|
|
||||||
//
|
|
||||||
// @param[in,out] data A pointer to an application data specified by
|
|
||||||
// yaml_emitter_set_output().
|
|
||||||
// @param[in] buffer The buffer with bytes to be written.
|
|
||||||
// @param[in] size The size of the buffer.
|
|
||||||
//
|
|
||||||
// @returns On success, the handler should return @c 1. If the handler failed,
|
|
||||||
// the returned value should be @c 0.
|
|
||||||
//
|
|
||||||
type yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error
|
|
||||||
|
|
||||||
type yaml_emitter_state_t int
|
|
||||||
|
|
||||||
// The emitter states.
|
|
||||||
const (
|
|
||||||
// Expect STREAM-START.
|
|
||||||
yaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota
|
|
||||||
|
|
||||||
yaml_EMIT_FIRST_DOCUMENT_START_STATE // Expect the first DOCUMENT-START or STREAM-END.
|
|
||||||
yaml_EMIT_DOCUMENT_START_STATE // Expect DOCUMENT-START or STREAM-END.
|
|
||||||
yaml_EMIT_DOCUMENT_CONTENT_STATE // Expect the content of a document.
|
|
||||||
yaml_EMIT_DOCUMENT_END_STATE // Expect DOCUMENT-END.
|
|
||||||
yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a flow sequence.
|
|
||||||
yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE // Expect the next item of a flow sequence, with the comma already written out
|
|
||||||
yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE // Expect an item of a flow sequence.
|
|
||||||
yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE // Expect the first key of a flow mapping.
|
|
||||||
yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE // Expect the next key of a flow mapping, with the comma already written out
|
|
||||||
yaml_EMIT_FLOW_MAPPING_KEY_STATE // Expect a key of a flow mapping.
|
|
||||||
yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a flow mapping.
|
|
||||||
yaml_EMIT_FLOW_MAPPING_VALUE_STATE // Expect a value of a flow mapping.
|
|
||||||
yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE // Expect the first item of a block sequence.
|
|
||||||
yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE // Expect an item of a block sequence.
|
|
||||||
yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE // Expect the first key of a block mapping.
|
|
||||||
yaml_EMIT_BLOCK_MAPPING_KEY_STATE // Expect the key of a block mapping.
|
|
||||||
yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.
|
|
||||||
yaml_EMIT_BLOCK_MAPPING_VALUE_STATE // Expect a value of a block mapping.
|
|
||||||
yaml_EMIT_END_STATE // Expect nothing.
|
|
||||||
)
|
|
||||||
|
|
||||||
// The emitter structure.
|
|
||||||
//
|
|
||||||
// All members are internal. Manage the structure using the @c yaml_emitter_
|
|
||||||
// family of functions.
|
|
||||||
type yaml_emitter_t struct {
|
|
||||||
|
|
||||||
// Error handling
|
|
||||||
|
|
||||||
error yaml_error_type_t // Error type.
|
|
||||||
problem string // Error description.
|
|
||||||
|
|
||||||
// Writer stuff
|
|
||||||
|
|
||||||
write_handler yaml_write_handler_t // Write handler.
|
|
||||||
|
|
||||||
output_buffer *[]byte // String output data.
|
|
||||||
output_writer io.Writer // File output data.
|
|
||||||
|
|
||||||
buffer []byte // The working buffer.
|
|
||||||
buffer_pos int // The current position of the buffer.
|
|
||||||
|
|
||||||
raw_buffer []byte // The raw buffer.
|
|
||||||
raw_buffer_pos int // The current position of the buffer.
|
|
||||||
|
|
||||||
encoding yaml_encoding_t // The stream encoding.
|
|
||||||
|
|
||||||
// Emitter stuff
|
|
||||||
|
|
||||||
canonical bool // If the output is in the canonical style?
|
|
||||||
best_indent int // The number of indentation spaces.
|
|
||||||
best_width int // The preferred width of the output lines.
|
|
||||||
unicode bool // Allow unescaped non-ASCII characters?
|
|
||||||
line_break yaml_break_t // The preferred line break.
|
|
||||||
|
|
||||||
state yaml_emitter_state_t // The current emitter state.
|
|
||||||
states []yaml_emitter_state_t // The stack of states.
|
|
||||||
|
|
||||||
events []yaml_event_t // The event queue.
|
|
||||||
events_head int // The head of the event queue.
|
|
||||||
|
|
||||||
indents []int // The stack of indentation levels.
|
|
||||||
|
|
||||||
tag_directives []yaml_tag_directive_t // The list of tag directives.
|
|
||||||
|
|
||||||
indent int // The current indentation level.
|
|
||||||
|
|
||||||
flow_level int // The current flow level.
|
|
||||||
|
|
||||||
root_context bool // Is it the document root context?
|
|
||||||
sequence_context bool // Is it a sequence context?
|
|
||||||
mapping_context bool // Is it a mapping context?
|
|
||||||
simple_key_context bool // Is it a simple mapping key context?
|
|
||||||
|
|
||||||
line int // The current line.
|
|
||||||
column int // The current column.
|
|
||||||
whitespace bool // If the last character was a whitespace?
|
|
||||||
indention bool // If the last character was an indentation character (' ', '-', '?', ':')?
|
|
||||||
open_ended bool // If an explicit document end is required?
|
|
||||||
|
|
||||||
space_above bool // Is there's an empty line above?
|
|
||||||
foot_indent int // The indent used to write the foot comment above, or -1 if none.
|
|
||||||
|
|
||||||
// Anchor analysis.
|
|
||||||
anchor_data struct {
|
|
||||||
anchor []byte // The anchor value.
|
|
||||||
alias bool // Is it an alias?
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tag analysis.
|
|
||||||
tag_data struct {
|
|
||||||
handle []byte // The tag handle.
|
|
||||||
suffix []byte // The tag suffix.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scalar analysis.
|
|
||||||
scalar_data struct {
|
|
||||||
value []byte // The scalar value.
|
|
||||||
multiline bool // Does the scalar contain line breaks?
|
|
||||||
flow_plain_allowed bool // Can the scalar be expessed in the flow plain style?
|
|
||||||
block_plain_allowed bool // Can the scalar be expressed in the block plain style?
|
|
||||||
single_quoted_allowed bool // Can the scalar be expressed in the single quoted style?
|
|
||||||
block_allowed bool // Can the scalar be expressed in the literal or folded styles?
|
|
||||||
style yaml_scalar_style_t // The output style.
|
|
||||||
}
|
|
||||||
|
|
||||||
// Comments
|
|
||||||
head_comment []byte
|
|
||||||
line_comment []byte
|
|
||||||
foot_comment []byte
|
|
||||||
tail_comment []byte
|
|
||||||
|
|
||||||
key_line_comment []byte
|
|
||||||
|
|
||||||
// Dumper stuff
|
|
||||||
|
|
||||||
opened bool // If the stream was already opened?
|
|
||||||
closed bool // If the stream was already closed?
|
|
||||||
|
|
||||||
// The information associated with the document nodes.
|
|
||||||
anchors *struct {
|
|
||||||
references int // The number of references.
|
|
||||||
anchor int // The anchor id.
|
|
||||||
serialized bool // If the node has been emitted?
|
|
||||||
}
|
|
||||||
|
|
||||||
last_anchor_id int // The last assigned anchor id.
|
|
||||||
|
|
||||||
document *yaml_document_t // The currently emitted document.
|
|
||||||
}
|
|
198
vendor/gopkg.in/yaml.v3/yamlprivateh.go
generated
vendored
198
vendor/gopkg.in/yaml.v3/yamlprivateh.go
generated
vendored
@ -1,198 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright (c) 2011-2019 Canonical Ltd
|
|
||||||
// Copyright (c) 2006-2010 Kirill Simonov
|
|
||||||
//
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
// this software and associated documentation files (the "Software"), to deal in
|
|
||||||
// the Software without restriction, including without limitation the rights to
|
|
||||||
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
// of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
// so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all
|
|
||||||
// copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
// SOFTWARE.
|
|
||||||
|
|
||||||
package yaml
|
|
||||||
|
|
||||||
const (
|
|
||||||
// The size of the input raw buffer.
|
|
||||||
input_raw_buffer_size = 512
|
|
||||||
|
|
||||||
// The size of the input buffer.
|
|
||||||
// It should be possible to decode the whole raw buffer.
|
|
||||||
input_buffer_size = input_raw_buffer_size * 3
|
|
||||||
|
|
||||||
// The size of the output buffer.
|
|
||||||
output_buffer_size = 128
|
|
||||||
|
|
||||||
// The size of the output raw buffer.
|
|
||||||
// It should be possible to encode the whole output buffer.
|
|
||||||
output_raw_buffer_size = (output_buffer_size*2 + 2)
|
|
||||||
|
|
||||||
// The size of other stacks and queues.
|
|
||||||
initial_stack_size = 16
|
|
||||||
initial_queue_size = 16
|
|
||||||
initial_string_size = 16
|
|
||||||
)
|
|
||||||
|
|
||||||
// Check if the character at the specified position is an alphabetical
|
|
||||||
// character, a digit, '_', or '-'.
|
|
||||||
func is_alpha(b []byte, i int) bool {
|
|
||||||
return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is a digit.
|
|
||||||
func is_digit(b []byte, i int) bool {
|
|
||||||
return b[i] >= '0' && b[i] <= '9'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the value of a digit.
|
|
||||||
func as_digit(b []byte, i int) int {
|
|
||||||
return int(b[i]) - '0'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is a hex-digit.
|
|
||||||
func is_hex(b []byte, i int) bool {
|
|
||||||
return b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the value of a hex-digit.
|
|
||||||
func as_hex(b []byte, i int) int {
|
|
||||||
bi := b[i]
|
|
||||||
if bi >= 'A' && bi <= 'F' {
|
|
||||||
return int(bi) - 'A' + 10
|
|
||||||
}
|
|
||||||
if bi >= 'a' && bi <= 'f' {
|
|
||||||
return int(bi) - 'a' + 10
|
|
||||||
}
|
|
||||||
return int(bi) - '0'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character is ASCII.
|
|
||||||
func is_ascii(b []byte, i int) bool {
|
|
||||||
return b[i] <= 0x7F
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the start of the buffer can be printed unescaped.
|
|
||||||
func is_printable(b []byte, i int) bool {
|
|
||||||
return ((b[i] == 0x0A) || // . == #x0A
|
|
||||||
(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E
|
|
||||||
(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF
|
|
||||||
(b[i] > 0xC2 && b[i] < 0xED) ||
|
|
||||||
(b[i] == 0xED && b[i+1] < 0xA0) ||
|
|
||||||
(b[i] == 0xEE) ||
|
|
||||||
(b[i] == 0xEF && // #xE000 <= . <= #xFFFD
|
|
||||||
!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF
|
|
||||||
!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is NUL.
|
|
||||||
func is_z(b []byte, i int) bool {
|
|
||||||
return b[i] == 0x00
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the beginning of the buffer is a BOM.
|
|
||||||
func is_bom(b []byte, i int) bool {
|
|
||||||
return b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is space.
|
|
||||||
func is_space(b []byte, i int) bool {
|
|
||||||
return b[i] == ' '
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is tab.
|
|
||||||
func is_tab(b []byte, i int) bool {
|
|
||||||
return b[i] == '\t'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is blank (space or tab).
|
|
||||||
func is_blank(b []byte, i int) bool {
|
|
||||||
//return is_space(b, i) || is_tab(b, i)
|
|
||||||
return b[i] == ' ' || b[i] == '\t'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character at the specified position is a line break.
|
|
||||||
func is_break(b []byte, i int) bool {
|
|
||||||
return (b[i] == '\r' || // CR (#xD)
|
|
||||||
b[i] == '\n' || // LF (#xA)
|
|
||||||
b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)
|
|
||||||
}
|
|
||||||
|
|
||||||
func is_crlf(b []byte, i int) bool {
|
|
||||||
return b[i] == '\r' && b[i+1] == '\n'
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character is a line break or NUL.
|
|
||||||
func is_breakz(b []byte, i int) bool {
|
|
||||||
//return is_break(b, i) || is_z(b, i)
|
|
||||||
return (
|
|
||||||
// is_break:
|
|
||||||
b[i] == '\r' || // CR (#xD)
|
|
||||||
b[i] == '\n' || // LF (#xA)
|
|
||||||
b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
|
|
||||||
// is_z:
|
|
||||||
b[i] == 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character is a line break, space, or NUL.
|
|
||||||
func is_spacez(b []byte, i int) bool {
|
|
||||||
//return is_space(b, i) || is_breakz(b, i)
|
|
||||||
return (
|
|
||||||
// is_space:
|
|
||||||
b[i] == ' ' ||
|
|
||||||
// is_breakz:
|
|
||||||
b[i] == '\r' || // CR (#xD)
|
|
||||||
b[i] == '\n' || // LF (#xA)
|
|
||||||
b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
|
|
||||||
b[i] == 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the character is a line break, space, tab, or NUL.
|
|
||||||
func is_blankz(b []byte, i int) bool {
|
|
||||||
//return is_blank(b, i) || is_breakz(b, i)
|
|
||||||
return (
|
|
||||||
// is_blank:
|
|
||||||
b[i] == ' ' || b[i] == '\t' ||
|
|
||||||
// is_breakz:
|
|
||||||
b[i] == '\r' || // CR (#xD)
|
|
||||||
b[i] == '\n' || // LF (#xA)
|
|
||||||
b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
|
|
||||||
b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)
|
|
||||||
b[i] == 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine the width of the character.
|
|
||||||
func width(b byte) int {
|
|
||||||
// Don't replace these by a switch without first
|
|
||||||
// confirming that it is being inlined.
|
|
||||||
if b&0x80 == 0x00 {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
if b&0xE0 == 0xC0 {
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
if b&0xF0 == 0xE0 {
|
|
||||||
return 3
|
|
||||||
}
|
|
||||||
if b&0xF8 == 0xF0 {
|
|
||||||
return 4
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
|
|
||||||
}
|
|
9
vendor/modules.txt
vendored
9
vendor/modules.txt
vendored
@ -26,17 +26,17 @@ github.com/golang/protobuf/ptypes/timestamp
|
|||||||
## explicit
|
## explicit
|
||||||
github.com/google/gofuzz
|
github.com/google/gofuzz
|
||||||
github.com/google/gofuzz/bytesource
|
github.com/google/gofuzz/bytesource
|
||||||
# github.com/googleapis/gnostic v0.5.3
|
# github.com/googleapis/gnostic v0.4.1 => github.com/googleapis/gnostic v0.4.0
|
||||||
## explicit
|
|
||||||
github.com/googleapis/gnostic/compiler
|
github.com/googleapis/gnostic/compiler
|
||||||
github.com/googleapis/gnostic/extensions
|
github.com/googleapis/gnostic/extensions
|
||||||
github.com/googleapis/gnostic/jsonschema
|
|
||||||
github.com/googleapis/gnostic/openapiv2
|
github.com/googleapis/gnostic/openapiv2
|
||||||
# github.com/imdario/mergo v0.3.11
|
# github.com/imdario/mergo v0.3.11
|
||||||
## explicit
|
## explicit
|
||||||
github.com/imdario/mergo
|
github.com/imdario/mergo
|
||||||
# github.com/json-iterator/go v1.1.10
|
# github.com/json-iterator/go v1.1.10
|
||||||
github.com/json-iterator/go
|
github.com/json-iterator/go
|
||||||
|
# github.com/kr/pretty v0.2.0
|
||||||
|
## explicit
|
||||||
# github.com/matttproud/golang_protobuf_extensions v1.0.1
|
# github.com/matttproud/golang_protobuf_extensions v1.0.1
|
||||||
github.com/matttproud/golang_protobuf_extensions/pbutil
|
github.com/matttproud/golang_protobuf_extensions/pbutil
|
||||||
# github.com/miekg/dns v1.1.35
|
# github.com/miekg/dns v1.1.35
|
||||||
@ -152,8 +152,6 @@ gopkg.in/inf.v0
|
|||||||
# gopkg.in/yaml.v2 v2.4.0
|
# gopkg.in/yaml.v2 v2.4.0
|
||||||
## explicit
|
## explicit
|
||||||
gopkg.in/yaml.v2
|
gopkg.in/yaml.v2
|
||||||
# gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
|
|
||||||
gopkg.in/yaml.v3
|
|
||||||
# k8s.io/api v0.19.6
|
# k8s.io/api v0.19.6
|
||||||
## explicit
|
## explicit
|
||||||
k8s.io/api/admissionregistration/v1
|
k8s.io/api/admissionregistration/v1
|
||||||
@ -313,3 +311,4 @@ sigs.k8s.io/structured-merge-diff/v4/value
|
|||||||
# sigs.k8s.io/yaml v1.2.0
|
# sigs.k8s.io/yaml v1.2.0
|
||||||
sigs.k8s.io/yaml
|
sigs.k8s.io/yaml
|
||||||
# k8s.io/client-go => k8s.io/client-go v0.19.6
|
# k8s.io/client-go => k8s.io/client-go v0.19.6
|
||||||
|
# github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.4.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user