func (r *Registry) LookupParameterInfo(resource, name string) (param SearchParamInfo, err error) {
	r.infosLock.RLock()
	defer r.infosLock.RUnlock()
	param, ok := r.infos[resource][name]
	if !ok {
		return SearchParamInfo{}, fmt.Errorf("Could not find info for parameter %s for resource %s", name, resource)
	}
	return param, nil
}
LookupParameterInfo looks up search parameter info by resource and name.  If no parameter info is registered, it will
return an error.
package search
import (
	"fmt"
	"sync"
)
var registry *Registry
var registryOnce sync.Once
func GlobalRegistry() *Registry {
	registryOnce.Do(func() {
		registry = new(Registry)
		registry.infos = make(map[string]map[string]SearchParamInfo)
		registry.parsers = make(map[string]ParameterParser)
	})
	return registry
}
type Registry struct {
	infosLock   sync.RWMutex
	infos       map[string]map[string]SearchParamInfo
	parsersLock sync.RWMutex
	parsers     map[string]ParameterParser
}
func (r *Registry) RegisterParameterInfo(param SearchParamInfo) {
	r.infosLock.Lock()
	defer r.infosLock.Unlock()
	rMap, ok := r.infos[param.Resource]
	if !ok {
		rMap = make(map[string]SearchParamInfo)
		r.infos[param.Resource] = rMap
	}
	rMap[param.Name] = param
	rMap, ok = SearchParameterDictionary[param.Resource]
	if !ok {
		rMap = make(map[string]SearchParamInfo)
		SearchParameterDictionary[param.Resource] = rMap
	}
	rMap[param.Name] = param
}