spec2go

command module
v0.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 10, 2023 License: MIT Imports: 6 Imported by: 0

README

Go validators generator

Go lang methods generator from Open API 3 specification

Components

  • generate - generates methods to validate as a .go files
  • validate - validates requests basing on schemas generated by generator

Install

go get github.com/beng90/spec2go

Usage

Generating validation schemas from Open API specification

spec2go

Example

Generated file

    package openapi
    
    import (
        "context"
        "github.com/beng90/spec2go/validate"
    	"gopkg.in/go-playground/validator.v9"
    	"net/http"
    )
    
    type ValidationRule struct {
    	Field   string
    	Rule    string
    	Pattern *string
    }
    
    var AddOfferValidateRules = []ValidationRule{
        {"additionalInfo", "omitempty", nil},
        {"additionalInfo[].id", "omitempty,string", nil},
        {"additionalInfo[].valuesIds", "omitempty", nil},
        {"additionalInfo[].valuesIds[]", "omitempty,string", nil},
        {"brand", "omitempty,string", nil},
        {"categoryId", "required,string,max=16", nil},
        {"defaultLanguage", "omitempty,string,min=2,max=2", nil},
        {"productName", "required,string,min=1,max=255", nil},
        {"variants", "required", nil},
        {"variants[].content", "required", nil},
        {"variants[].content[].description", "required,string,min=1,max=1024", nil},
        {"variants[].content[].language", "required,string,min=2,max=2", nil},
        {"variants[].delivery", "required", nil},
        {"variants[].delivery.additionalInfo", "omitempty,string", nil},
        {"variants[].delivery.dispatchTime", "required,integer,min=1,max=64", nil},
        {"variants[].delivery.shippingTemplateId", "required,string,uuid", nil},
        {"variants[].ean", "omitempty,string,min=13,max=13", nil},
        {"variants[].inventory", "required", nil},
        {"variants[].inventory.size", "required,integer,min=1,max=4294967295", nil},
        {"variants[].isEnabled", "required,boolean", nil},
        {"variants[].media", "required", nil},
        {"variants[].media.images", "required", nil},
        {"variants[].media.images[].sortOrder", "omitempty,integer,min=1,max=64", nil},
        {"variants[].media.images[].url", "required,string,url,max=255", nil},
        {"variants[].price", "required,string", nil},
        {"variants[].sku", "omitempty,string", nil},
        {"variants[].tags", "omitempty", nil},
        {"variants[].tags[].id", "omitempty,string", nil},
        {"variants[].tags[].valueId", "omitempty,string", nil},
    }
    
    func AddOfferValidate(v *validator.Validate, req *http.Request, ctx context.Context) error {
    	schemaValidator, err := validate.NewSchemaValidator(v, req, ctx)
        if err != nil {
            return err
        }
    
        for _, vRule := range AddOfferValidateRules {
            schemaValidator.AddRule(vRule.Field, vRule.Rule, vRule.Pattern)
        }
    
    	err = schemaValidator.Validate()
    
        return err
    }
Using in code

Working example available in example/ directory.

cd example
go run .

Result

[Field 'variants[0].isEnabled' failed in 'required' rule]
[Field 'variants[0].price' failed in 'required' rule]
[Field 'variants[0].inventory.size' failed in 'required' rule]
[Field 'variants[0].delivery' failed in 'required' rule]
[Field 'variants[0].media' failed in 'required' rule]
[Field 'productName' failed in 'required' rule]
[Field 'variants[0].content' failed in 'required' rule]

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL