mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 18:52:24 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			366 lines
		
	
	
	
		
			7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			366 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)
 | 
						|
}
 |