github.com/prebid/prebid-server@v0.275.0/adservertargeting/utils.go (about)

     1  package adservertargeting
     2  
     3  import (
     4  	"github.com/buger/jsonparser"
     5  	"github.com/pkg/errors"
     6  	"github.com/prebid/prebid-server/errortypes"
     7  	"github.com/prebid/prebid-server/openrtb_ext"
     8  	"strings"
     9  )
    10  
    11  func splitAndGet(path string, data []byte, delimiter string) (string, error) {
    12  	keySplit := strings.Split(path, delimiter)
    13  
    14  	value, err := typedLookup(data, path, keySplit...)
    15  	if err != nil {
    16  		return "", err
    17  	}
    18  
    19  	return string(value), nil
    20  }
    21  
    22  func createWarning(message string) openrtb_ext.ExtBidderMessage {
    23  	return openrtb_ext.ExtBidderMessage{
    24  		Code:    errortypes.AdServerTargetingWarningCode,
    25  		Message: message,
    26  	}
    27  }
    28  
    29  func verifyPrefixAndTrim(path, prefix string) (string, bool) {
    30  	ampDataSplit := strings.Split(path, prefix)
    31  	if len(ampDataSplit) == 2 && ampDataSplit[0] == "" {
    32  		return ampDataSplit[1], true
    33  	}
    34  	return "", false
    35  }
    36  
    37  func typedLookup(data []byte, path string, keys ...string) ([]byte, error) {
    38  	value, dataType, _, err := jsonparser.Get(data, keys...)
    39  	if err != nil && err != jsonparser.KeyPathNotFoundError {
    40  		return nil, err
    41  	} else if err != nil && err == jsonparser.KeyPathNotFoundError {
    42  		return nil, errors.Errorf("value not found for path: %s", path)
    43  	}
    44  	if verifyType(dataType) {
    45  		return value, nil
    46  	}
    47  	return nil, errors.Errorf("incorrect value type for path: %s, value can only be string or number", path)
    48  }
    49  
    50  func verifyType(dataType jsonparser.ValueType) bool {
    51  	typeAllowed := false
    52  	for _, allowedType := range allowedTypes {
    53  		if dataType == allowedType {
    54  			return true
    55  		}
    56  	}
    57  	return typeAllowed
    58  }