mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 11:22:27 -05: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)
 | |
| }
 |