aboutsummaryrefslogtreecommitdiff
path: root/vendor/k8s.io/kube-openapi
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/kube-openapi')
-rw-r--r--vendor/k8s.io/kube-openapi/LICENSE202
-rw-r--r--vendor/k8s.io/kube-openapi/README.md14
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go19
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/document.go285
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go276
5 files changed, 0 insertions, 796 deletions
diff --git a/vendor/k8s.io/kube-openapi/LICENSE b/vendor/k8s.io/kube-openapi/LICENSE
deleted file mode 100644
index d64569567..000000000
--- a/vendor/k8s.io/kube-openapi/LICENSE
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- 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.
diff --git a/vendor/k8s.io/kube-openapi/README.md b/vendor/k8s.io/kube-openapi/README.md
deleted file mode 100644
index babadde1f..000000000
--- a/vendor/k8s.io/kube-openapi/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Kube OpenAPI
-
-This repo is the home for Kubernetes OpenAPI discovery spec generation. The goal
-is to support a subset of OpenAPI features to satisfy kubernetes use-cases but
-implement that subset with little to no assumption about the structure of the
-code or routes. Thus, there should be no kubernetes specific code in this repo.
-
-
-There are two main parts:
- - A model generator that goes through .go files, find and generate model
-definitions.
- - The spec generator that is responsible for dynamically generate
-the final OpenAPI spec using web service routes or combining other
-OpenAPI/Json specs.
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
deleted file mode 100644
index 11ed8a6b7..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-Copyright 2017 The Kubernetes Authors.
-
-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 proto is a collection of libraries for parsing and indexing the type definitions.
-// The openapi spec contains the object model definitions and extensions metadata.
-package proto
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
deleted file mode 100644
index 61dbf4fc0..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-Copyright 2017 The Kubernetes Authors.
-
-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 proto
-
-import (
- "fmt"
- "sort"
- "strings"
-
- openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2"
- yaml "gopkg.in/yaml.v2"
-)
-
-func newSchemaError(path *Path, format string, a ...interface{}) error {
- err := fmt.Sprintf(format, a...)
- if path.Len() == 0 {
- return fmt.Errorf("SchemaError: %v", err)
- }
- return fmt.Errorf("SchemaError(%v): %v", path, err)
-}
-
-// VendorExtensionToMap converts openapi VendorExtension to a map.
-func VendorExtensionToMap(e []*openapi_v2.NamedAny) map[string]interface{} {
- values := map[string]interface{}{}
-
- for _, na := range e {
- if na.GetName() == "" || na.GetValue() == nil {
- continue
- }
- if na.GetValue().GetYaml() == "" {
- continue
- }
- var value interface{}
- err := yaml.Unmarshal([]byte(na.GetValue().GetYaml()), &value)
- if err != nil {
- continue
- }
-
- values[na.GetName()] = value
- }
-
- return values
-}
-
-// Definitions is an implementation of `Models`. It looks for
-// models in an openapi Schema.
-type Definitions struct {
- models map[string]Schema
-}
-
-var _ Models = &Definitions{}
-
-// NewOpenAPIData creates a new `Models` out of the openapi document.
-func NewOpenAPIData(doc *openapi_v2.Document) (Models, error) {
- definitions := Definitions{
- models: map[string]Schema{},
- }
-
- // Save the list of all models first. This will allow us to
- // validate that we don't have any dangling reference.
- for _, namedSchema := range doc.GetDefinitions().GetAdditionalProperties() {
- definitions.models[namedSchema.GetName()] = nil
- }
-
- // Now, parse each model. We can validate that references exists.
- for _, namedSchema := range doc.GetDefinitions().GetAdditionalProperties() {
- path := NewPath(namedSchema.GetName())
- schema, err := definitions.ParseSchema(namedSchema.GetValue(), &path)
- if err != nil {
- return nil, err
- }
- definitions.models[namedSchema.GetName()] = schema
- }
-
- return &definitions, nil
-}
-
-// We believe the schema is a reference, verify that and returns a new
-// Schema
-func (d *Definitions) parseReference(s *openapi_v2.Schema, path *Path) (Schema, error) {
- if len(s.GetProperties().GetAdditionalProperties()) > 0 {
- return nil, newSchemaError(path, "unallowed embedded type definition")
- }
- if len(s.GetType().GetValue()) > 0 {
- return nil, newSchemaError(path, "definition reference can't have a type")
- }
-
- if !strings.HasPrefix(s.GetXRef(), "#/definitions/") {
- return nil, newSchemaError(path, "unallowed reference to non-definition %q", s.GetXRef())
- }
- reference := strings.TrimPrefix(s.GetXRef(), "#/definitions/")
- if _, ok := d.models[reference]; !ok {
- return nil, newSchemaError(path, "unknown model in reference: %q", reference)
- }
- return &Ref{
- BaseSchema: d.parseBaseSchema(s, path),
- reference: reference,
- definitions: d,
- }, nil
-}
-
-func (d *Definitions) parseBaseSchema(s *openapi_v2.Schema, path *Path) BaseSchema {
- return BaseSchema{
- Description: s.GetDescription(),
- Extensions: VendorExtensionToMap(s.GetVendorExtension()),
- Path: *path,
- }
-}
-
-// We believe the schema is a map, verify and return a new schema
-func (d *Definitions) parseMap(s *openapi_v2.Schema, path *Path) (Schema, error) {
- if len(s.GetType().GetValue()) != 0 && s.GetType().GetValue()[0] != object {
- return nil, newSchemaError(path, "invalid object type")
- }
- if s.GetAdditionalProperties().GetSchema() == nil {
- return nil, newSchemaError(path, "invalid object doesn't have additional properties")
- }
- sub, err := d.ParseSchema(s.GetAdditionalProperties().GetSchema(), path)
- if err != nil {
- return nil, err
- }
- return &Map{
- BaseSchema: d.parseBaseSchema(s, path),
- SubType: sub,
- }, nil
-}
-
-func (d *Definitions) parsePrimitive(s *openapi_v2.Schema, path *Path) (Schema, error) {
- var t string
- if len(s.GetType().GetValue()) > 1 {
- return nil, newSchemaError(path, "primitive can't have more than 1 type")
- }
- if len(s.GetType().GetValue()) == 1 {
- t = s.GetType().GetValue()[0]
- }
- switch t {
- case String:
- case Number:
- case Integer:
- case Boolean:
- case "": // Some models are completely empty, and can be safely ignored.
- // Do nothing
- default:
- return nil, newSchemaError(path, "Unknown primitive type: %q", t)
- }
- return &Primitive{
- BaseSchema: d.parseBaseSchema(s, path),
- Type: t,
- Format: s.GetFormat(),
- }, nil
-}
-
-func (d *Definitions) parseArray(s *openapi_v2.Schema, path *Path) (Schema, error) {
- if len(s.GetType().GetValue()) != 1 {
- return nil, newSchemaError(path, "array should have exactly one type")
- }
- if s.GetType().GetValue()[0] != array {
- return nil, newSchemaError(path, `array should have type "array"`)
- }
- if len(s.GetItems().GetSchema()) != 1 {
- return nil, newSchemaError(path, "array should have exactly one sub-item")
- }
- sub, err := d.ParseSchema(s.GetItems().GetSchema()[0], path)
- if err != nil {
- return nil, err
- }
- return &Array{
- BaseSchema: d.parseBaseSchema(s, path),
- SubType: sub,
- }, nil
-}
-
-func (d *Definitions) parseKind(s *openapi_v2.Schema, path *Path) (Schema, error) {
- if len(s.GetType().GetValue()) != 0 && s.GetType().GetValue()[0] != object {
- return nil, newSchemaError(path, "invalid object type")
- }
- if s.GetProperties() == nil {
- return nil, newSchemaError(path, "object doesn't have properties")
- }
-
- fields := map[string]Schema{}
-
- for _, namedSchema := range s.GetProperties().GetAdditionalProperties() {
- var err error
- path := path.FieldPath(namedSchema.GetName())
- fields[namedSchema.GetName()], err = d.ParseSchema(namedSchema.GetValue(), &path)
- if err != nil {
- return nil, err
- }
- }
-
- return &Kind{
- BaseSchema: d.parseBaseSchema(s, path),
- RequiredFields: s.GetRequired(),
- Fields: fields,
- }, nil
-}
-
-func (d *Definitions) parseArbitrary(s *openapi_v2.Schema, path *Path) (Schema, error) {
- return &Arbitrary{
- BaseSchema: d.parseBaseSchema(s, path),
- }, nil
-}
-
-// ParseSchema creates a walkable Schema from an openapi schema. While
-// this function is public, it doesn't leak through the interface.
-func (d *Definitions) ParseSchema(s *openapi_v2.Schema, path *Path) (Schema, error) {
- objectTypes := s.GetType().GetValue()
- if len(objectTypes) == 1 {
- t := objectTypes[0]
- switch t {
- case object:
- return d.parseMap(s, path)
- case array:
- return d.parseArray(s, path)
- }
-
- }
- if s.GetXRef() != "" {
- return d.parseReference(s, path)
- }
- if s.GetProperties() != nil {
- return d.parseKind(s, path)
- }
- if len(objectTypes) == 0 || (len(objectTypes) == 1 && objectTypes[0] == "") {
- return d.parseArbitrary(s, path)
- }
- return d.parsePrimitive(s, path)
-}
-
-// LookupModel is public through the interface of Models. It
-// returns a visitable schema from the given model name.
-func (d *Definitions) LookupModel(model string) Schema {
- return d.models[model]
-}
-
-func (d *Definitions) ListModels() []string {
- models := []string{}
-
- for model := range d.models {
- models = append(models, model)
- }
-
- sort.Strings(models)
- return models
-}
-
-type Ref struct {
- BaseSchema
-
- reference string
- definitions *Definitions
-}
-
-var _ Reference = &Ref{}
-
-func (r *Ref) Reference() string {
- return r.reference
-}
-
-func (r *Ref) SubSchema() Schema {
- return r.definitions.models[r.reference]
-}
-
-func (r *Ref) Accept(v SchemaVisitor) {
- v.VisitReference(r)
-}
-
-func (r *Ref) GetName() string {
- return fmt.Sprintf("Reference to %q", r.reference)
-}
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
deleted file mode 100644
index b48e62c3b..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
-Copyright 2017 The Kubernetes Authors.
-
-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 proto
-
-import (
- "fmt"
- "sort"
- "strings"
-)
-
-// Defines openapi types.
-const (
- Integer = "integer"
- Number = "number"
- String = "string"
- Boolean = "boolean"
-
- // These types are private as they should never leak, and are
- // represented by actual structs.
- array = "array"
- object = "object"
-)
-
-// Models interface describe a model provider. They can give you the
-// schema for a specific model.
-type Models interface {
- LookupModel(string) Schema
- ListModels() []string
-}
-
-// SchemaVisitor is an interface that you need to implement if you want
-// to "visit" an openapi schema. A dispatch on the Schema type will call
-// the appropriate function based on its actual type:
-// - Array is a list of one and only one given subtype
-// - Map is a map of string to one and only one given subtype
-// - Primitive can be string, integer, number and boolean.
-// - Kind is an object with specific fields mapping to specific types.
-// - Reference is a link to another definition.
-type SchemaVisitor interface {
- VisitArray(*Array)
- VisitMap(*Map)
- VisitPrimitive(*Primitive)
- VisitKind(*Kind)
- VisitReference(Reference)
-}
-
-// SchemaVisitorArbitrary is an additional visitor interface which handles
-// arbitrary types. For backwards compatability, it's a separate interface
-// which is checked for at runtime.
-type SchemaVisitorArbitrary interface {
- SchemaVisitor
- VisitArbitrary(*Arbitrary)
-}
-
-// Schema is the base definition of an openapi type.
-type Schema interface {
- // Giving a visitor here will let you visit the actual type.
- Accept(SchemaVisitor)
-
- // Pretty print the name of the type.
- GetName() string
- // Describes how to access this field.
- GetPath() *Path
- // Describes the field.
- GetDescription() string
- // Returns type extensions.
- GetExtensions() map[string]interface{}
-}
-
-// Path helps us keep track of type paths
-type Path struct {
- parent *Path
- key string
-}
-
-func NewPath(key string) Path {
- return Path{key: key}
-}
-
-func (p *Path) Get() []string {
- if p == nil {
- return []string{}
- }
- if p.key == "" {
- return p.parent.Get()
- }
- return append(p.parent.Get(), p.key)
-}
-
-func (p *Path) Len() int {
- return len(p.Get())
-}
-
-func (p *Path) String() string {
- return strings.Join(p.Get(), "")
-}
-
-// ArrayPath appends an array index and creates a new path
-func (p *Path) ArrayPath(i int) Path {
- return Path{
- parent: p,
- key: fmt.Sprintf("[%d]", i),
- }
-}
-
-// FieldPath appends a field name and creates a new path
-func (p *Path) FieldPath(field string) Path {
- return Path{
- parent: p,
- key: fmt.Sprintf(".%s", field),
- }
-}
-
-// BaseSchema holds data used by each types of schema.
-type BaseSchema struct {
- Description string
- Extensions map[string]interface{}
-
- Path Path
-}
-
-func (b *BaseSchema) GetDescription() string {
- return b.Description
-}
-
-func (b *BaseSchema) GetExtensions() map[string]interface{} {
- return b.Extensions
-}
-
-func (b *BaseSchema) GetPath() *Path {
- return &b.Path
-}
-
-// Array must have all its element of the same `SubType`.
-type Array struct {
- BaseSchema
-
- SubType Schema
-}
-
-var _ Schema = &Array{}
-
-func (a *Array) Accept(v SchemaVisitor) {
- v.VisitArray(a)
-}
-
-func (a *Array) GetName() string {
- return fmt.Sprintf("Array of %s", a.SubType.GetName())
-}
-
-// Kind is a complex object. It can have multiple different
-// subtypes for each field, as defined in the `Fields` field. Mandatory
-// fields are listed in `RequiredFields`. The key of the object is
-// always of type `string`.
-type Kind struct {
- BaseSchema
-
- // Lists names of required fields.
- RequiredFields []string
- // Maps field names to types.
- Fields map[string]Schema
-}
-
-var _ Schema = &Kind{}
-
-func (k *Kind) Accept(v SchemaVisitor) {
- v.VisitKind(k)
-}
-
-func (k *Kind) GetName() string {
- properties := []string{}
- for key := range k.Fields {
- properties = append(properties, key)
- }
- return fmt.Sprintf("Kind(%v)", properties)
-}
-
-// IsRequired returns true if `field` is a required field for this type.
-func (k *Kind) IsRequired(field string) bool {
- for _, f := range k.RequiredFields {
- if f == field {
- return true
- }
- }
- return false
-}
-
-// Keys returns a alphabetically sorted list of keys.
-func (k *Kind) Keys() []string {
- keys := make([]string, 0)
- for key := range k.Fields {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- return keys
-}
-
-// Map is an object who values must all be of the same `SubType`.
-// The key of the object is always of type `string`.
-type Map struct {
- BaseSchema
-
- SubType Schema
-}
-
-var _ Schema = &Map{}
-
-func (m *Map) Accept(v SchemaVisitor) {
- v.VisitMap(m)
-}
-
-func (m *Map) GetName() string {
- return fmt.Sprintf("Map of %s", m.SubType.GetName())
-}
-
-// Primitive is a literal. There can be multiple types of primitives,
-// and this subtype can be visited through the `subType` field.
-type Primitive struct {
- BaseSchema
-
- // Type of a primitive must be one of: integer, number, string, boolean.
- Type string
- Format string
-}
-
-var _ Schema = &Primitive{}
-
-func (p *Primitive) Accept(v SchemaVisitor) {
- v.VisitPrimitive(p)
-}
-
-func (p *Primitive) GetName() string {
- if p.Format == "" {
- return p.Type
- }
- return fmt.Sprintf("%s (%s)", p.Type, p.Format)
-}
-
-// Arbitrary is a value of any type (primitive, object or array)
-type Arbitrary struct {
- BaseSchema
-}
-
-var _ Schema = &Arbitrary{}
-
-func (a *Arbitrary) Accept(v SchemaVisitor) {
- if visitor, ok := v.(SchemaVisitorArbitrary); ok {
- visitor.VisitArbitrary(a)
- }
-}
-
-func (a *Arbitrary) GetName() string {
- return "Arbitrary value (primitive, object or array)"
-}
-
-// Reference implementation depends on the type of document.
-type Reference interface {
- Schema
-
- Reference() string
- SubSchema() Schema
-}