mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-01 23:10:01 +00:00
367 lines
7 KiB
Go
367 lines
7 KiB
Go
|
//go:build !validatedebug
|
||
|
|
||
|
package validate
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
|
||
|
"github.com/go-openapi/spec"
|
||
|
)
|
||
|
|
||
|
var pools allPools
|
||
|
|
||
|
func init() {
|
||
|
resetPools()
|
||
|
}
|
||
|
|
||
|
func resetPools() {
|
||
|
// NOTE: for testing purpose, we might want to reset pools after calling Validate twice.
|
||
|
// The pool is corrupted in that case: calling Put twice inserts a duplicate in the pool
|
||
|
// and further calls to Get are mishandled.
|
||
|
|
||
|
pools = allPools{
|
||
|
poolOfSchemaValidators: schemaValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &SchemaValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfObjectValidators: objectValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &objectValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfSliceValidators: sliceValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &schemaSliceValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfItemsValidators: itemsValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &itemsValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfBasicCommonValidators: basicCommonValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &basicCommonValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfHeaderValidators: headerValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &HeaderValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfParamValidators: paramValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &ParamValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfBasicSliceValidators: basicSliceValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &basicSliceValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfNumberValidators: numberValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &numberValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfStringValidators: stringValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &stringValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfSchemaPropsValidators: schemaPropsValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &schemaPropsValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfFormatValidators: formatValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &formatValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfTypeValidators: typeValidatorsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &typeValidator{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfSchemas: schemasPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &spec.Schema{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
poolOfResults: resultsPool{
|
||
|
Pool: &sync.Pool{
|
||
|
New: func() any {
|
||
|
s := &Result{}
|
||
|
|
||
|
return s
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type (
|
||
|
allPools struct {
|
||
|
// memory pools for all validator objects.
|
||
|
//
|
||
|
// Each pool can be borrowed from and redeemed to.
|
||
|
poolOfSchemaValidators schemaValidatorsPool
|
||
|
poolOfObjectValidators objectValidatorsPool
|
||
|
poolOfSliceValidators sliceValidatorsPool
|
||
|
poolOfItemsValidators itemsValidatorsPool
|
||
|
poolOfBasicCommonValidators basicCommonValidatorsPool
|
||
|
poolOfHeaderValidators headerValidatorsPool
|
||
|
poolOfParamValidators paramValidatorsPool
|
||
|
poolOfBasicSliceValidators basicSliceValidatorsPool
|
||
|
poolOfNumberValidators numberValidatorsPool
|
||
|
poolOfStringValidators stringValidatorsPool
|
||
|
poolOfSchemaPropsValidators schemaPropsValidatorsPool
|
||
|
poolOfFormatValidators formatValidatorsPool
|
||
|
poolOfTypeValidators typeValidatorsPool
|
||
|
poolOfSchemas schemasPool
|
||
|
poolOfResults resultsPool
|
||
|
}
|
||
|
|
||
|
schemaValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
objectValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
sliceValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
itemsValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
basicCommonValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
headerValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
paramValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
basicSliceValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
numberValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
stringValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
schemaPropsValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
formatValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
typeValidatorsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
schemasPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
|
||
|
resultsPool struct {
|
||
|
*sync.Pool
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func (p schemaValidatorsPool) BorrowValidator() *SchemaValidator {
|
||
|
return p.Get().(*SchemaValidator)
|
||
|
}
|
||
|
|
||
|
func (p schemaValidatorsPool) RedeemValidator(s *SchemaValidator) {
|
||
|
// NOTE: s might be nil. In that case, Put is a noop.
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p objectValidatorsPool) BorrowValidator() *objectValidator {
|
||
|
return p.Get().(*objectValidator)
|
||
|
}
|
||
|
|
||
|
func (p objectValidatorsPool) RedeemValidator(s *objectValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p sliceValidatorsPool) BorrowValidator() *schemaSliceValidator {
|
||
|
return p.Get().(*schemaSliceValidator)
|
||
|
}
|
||
|
|
||
|
func (p sliceValidatorsPool) RedeemValidator(s *schemaSliceValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p itemsValidatorsPool) BorrowValidator() *itemsValidator {
|
||
|
return p.Get().(*itemsValidator)
|
||
|
}
|
||
|
|
||
|
func (p itemsValidatorsPool) RedeemValidator(s *itemsValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p basicCommonValidatorsPool) BorrowValidator() *basicCommonValidator {
|
||
|
return p.Get().(*basicCommonValidator)
|
||
|
}
|
||
|
|
||
|
func (p basicCommonValidatorsPool) RedeemValidator(s *basicCommonValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p headerValidatorsPool) BorrowValidator() *HeaderValidator {
|
||
|
return p.Get().(*HeaderValidator)
|
||
|
}
|
||
|
|
||
|
func (p headerValidatorsPool) RedeemValidator(s *HeaderValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p paramValidatorsPool) BorrowValidator() *ParamValidator {
|
||
|
return p.Get().(*ParamValidator)
|
||
|
}
|
||
|
|
||
|
func (p paramValidatorsPool) RedeemValidator(s *ParamValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p basicSliceValidatorsPool) BorrowValidator() *basicSliceValidator {
|
||
|
return p.Get().(*basicSliceValidator)
|
||
|
}
|
||
|
|
||
|
func (p basicSliceValidatorsPool) RedeemValidator(s *basicSliceValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p numberValidatorsPool) BorrowValidator() *numberValidator {
|
||
|
return p.Get().(*numberValidator)
|
||
|
}
|
||
|
|
||
|
func (p numberValidatorsPool) RedeemValidator(s *numberValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p stringValidatorsPool) BorrowValidator() *stringValidator {
|
||
|
return p.Get().(*stringValidator)
|
||
|
}
|
||
|
|
||
|
func (p stringValidatorsPool) RedeemValidator(s *stringValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p schemaPropsValidatorsPool) BorrowValidator() *schemaPropsValidator {
|
||
|
return p.Get().(*schemaPropsValidator)
|
||
|
}
|
||
|
|
||
|
func (p schemaPropsValidatorsPool) RedeemValidator(s *schemaPropsValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p formatValidatorsPool) BorrowValidator() *formatValidator {
|
||
|
return p.Get().(*formatValidator)
|
||
|
}
|
||
|
|
||
|
func (p formatValidatorsPool) RedeemValidator(s *formatValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p typeValidatorsPool) BorrowValidator() *typeValidator {
|
||
|
return p.Get().(*typeValidator)
|
||
|
}
|
||
|
|
||
|
func (p typeValidatorsPool) RedeemValidator(s *typeValidator) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p schemasPool) BorrowSchema() *spec.Schema {
|
||
|
return p.Get().(*spec.Schema)
|
||
|
}
|
||
|
|
||
|
func (p schemasPool) RedeemSchema(s *spec.Schema) {
|
||
|
p.Put(s)
|
||
|
}
|
||
|
|
||
|
func (p resultsPool) BorrowResult() *Result {
|
||
|
return p.Get().(*Result).cleared()
|
||
|
}
|
||
|
|
||
|
func (p resultsPool) RedeemResult(s *Result) {
|
||
|
if s == emptyResult {
|
||
|
return
|
||
|
}
|
||
|
p.Put(s)
|
||
|
}
|