From bb8fe2e96e1a9e0b82bb8d427099d42e8f0a3087 Mon Sep 17 00:00:00 2001 From: Marvanov Mansur Date: Sun, 10 Oct 2021 09:42:09 +0900 Subject: [PATCH 1/2] Define const schema types --- openapi3/schema.go | 64 +++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/openapi3/schema.go b/openapi3/schema.go index 5f1ee60b4..6b1b70eb3 100644 --- a/openapi3/schema.go +++ b/openapi3/schema.go @@ -16,6 +16,16 @@ import ( "github.com/go-openapi/jsonpointer" ) +const ( + TypeArray = "array" + TypeBoolean = "boolean" + TypeInteger = "integer" + TypeNumber = "number" + TypeObject = "object" + TypeString = "string" + TypeUndefined = "" +) + var ( // SchemaErrorDetailsDisabled disables printing of details about schema errors. SchemaErrorDetailsDisabled = false @@ -297,72 +307,72 @@ func NewAllOfSchema(schemas ...*Schema) *Schema { func NewBoolSchema() *Schema { return &Schema{ - Type: "boolean", + Type: TypeBoolean, } } func NewFloat64Schema() *Schema { return &Schema{ - Type: "number", + Type: TypeNumber, } } func NewIntegerSchema() *Schema { return &Schema{ - Type: "integer", + Type: TypeInteger, } } func NewInt32Schema() *Schema { return &Schema{ - Type: "integer", + Type: TypeInteger, Format: "int32", } } func NewInt64Schema() *Schema { return &Schema{ - Type: "integer", + Type: TypeInteger, Format: "int64", } } func NewStringSchema() *Schema { return &Schema{ - Type: "string", + Type: TypeString, } } func NewDateTimeSchema() *Schema { return &Schema{ - Type: "string", + Type: TypeString, Format: "date-time", } } func NewUUIDSchema() *Schema { return &Schema{ - Type: "string", + Type: TypeString, Format: "uuid", } } func NewBytesSchema() *Schema { return &Schema{ - Type: "string", + Type: TypeString, Format: "byte", } } func NewArraySchema() *Schema { return &Schema{ - Type: "array", + Type: TypeArray, } } func NewObjectSchema() *Schema { return &Schema{ - Type: "object", + Type: TypeObject, Properties: make(map[string]*SchemaRef), } } @@ -636,9 +646,9 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error) schemaType := schema.Type switch schemaType { - case "": - case "boolean": - case "number": + case TypeUndefined: + case TypeBoolean: + case TypeNumber: if format := schema.Format; len(format) > 0 { switch format { case "float", "double": @@ -648,7 +658,7 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error) } } } - case "integer": + case TypeInteger: if format := schema.Format; len(format) > 0 { switch format { case "int32", "int64": @@ -658,7 +668,7 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error) } } } - case "string": + case TypeString: if format := schema.Format; len(format) > 0 { switch format { // Supported by OpenAPIv3.0.1: @@ -681,11 +691,11 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error) return err } } - case "array": + case TypeArray: if schema.Items == nil { return errors.New("when schema type is 'array', schema 'items' must be non-null") } - case "object": + case TypeObject: default: return fmt.Errorf("unsupported 'type' value %q", schemaType) } @@ -966,8 +976,8 @@ func (schema *Schema) VisitJSONBoolean(value bool) error { } func (schema *Schema) visitJSONBoolean(settings *schemaValidationSettings, value bool) (err error) { - if schemaType := schema.Type; schemaType != "" && schemaType != "boolean" { - return schema.expectedType(settings, "boolean") + if schemaType := schema.Type; schemaType != "" && schemaType != TypeBoolean { + return schema.expectedType(settings, TypeBoolean) } return } @@ -996,7 +1006,7 @@ func (schema *Schema) visitJSONNumber(settings *schemaValidationSettings, value } me = append(me, err) } - } else if schemaType != "" && schemaType != "number" { + } else if schemaType != "" && schemaType != TypeNumber { return schema.expectedType(settings, "number, integer") } @@ -1101,8 +1111,8 @@ func (schema *Schema) VisitJSONString(value string) error { } func (schema *Schema) visitJSONString(settings *schemaValidationSettings, value string) error { - if schemaType := schema.Type; schemaType != "" && schemaType != "string" { - return schema.expectedType(settings, "string") + if schemaType := schema.Type; schemaType != "" && schemaType != TypeString { + return schema.expectedType(settings, TypeString) } var me MultiError @@ -1220,8 +1230,8 @@ func (schema *Schema) VisitJSONArray(value []interface{}) error { } func (schema *Schema) visitJSONArray(settings *schemaValidationSettings, value []interface{}) error { - if schemaType := schema.Type; schemaType != "" && schemaType != "array" { - return schema.expectedType(settings, "array") + if schemaType := schema.Type; schemaType != "" && schemaType != TypeArray { + return schema.expectedType(settings, TypeArray) } var me MultiError @@ -1316,8 +1326,8 @@ func (schema *Schema) VisitJSONObject(value map[string]interface{}) error { } func (schema *Schema) visitJSONObject(settings *schemaValidationSettings, value map[string]interface{}) error { - if schemaType := schema.Type; schemaType != "" && schemaType != "object" { - return schema.expectedType(settings, "object") + if schemaType := schema.Type; schemaType != "" && schemaType != TypeObject { + return schema.expectedType(settings, TypeObject) } var me MultiError From 2333dfa91e6467a4104489e28692167eaa035286 Mon Sep 17 00:00:00 2001 From: Marvanov Mansur Date: Tue, 12 Oct 2021 08:37:32 +0900 Subject: [PATCH 2/2] Drop TypeUndefined --- openapi3/schema.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/openapi3/schema.go b/openapi3/schema.go index 6b1b70eb3..3793ac19d 100644 --- a/openapi3/schema.go +++ b/openapi3/schema.go @@ -17,13 +17,12 @@ import ( ) const ( - TypeArray = "array" - TypeBoolean = "boolean" - TypeInteger = "integer" - TypeNumber = "number" - TypeObject = "object" - TypeString = "string" - TypeUndefined = "" + TypeArray = "array" + TypeBoolean = "boolean" + TypeInteger = "integer" + TypeNumber = "number" + TypeObject = "object" + TypeString = "string" ) var ( @@ -646,7 +645,7 @@ func (schema *Schema) validate(ctx context.Context, stack []*Schema) (err error) schemaType := schema.Type switch schemaType { - case TypeUndefined: + case "": case TypeBoolean: case TypeNumber: if format := schema.Format; len(format) > 0 {