github.com/prebid/prebid-server@v0.275.0/openrtb_ext/deal_tier.go (about) 1 package openrtb_ext 2 3 import ( 4 "encoding/json" 5 6 "github.com/prebid/openrtb/v19/openrtb2" 7 ) 8 9 // DealTier defines the configuration of a deal tier. 10 type DealTier struct { 11 // Prefix specifies the beginning of the hb_pb_cat_dur targeting key value. Must be non-empty. 12 Prefix string `json:"prefix"` 13 14 // MinDealTier specifies the minimum deal priority value (inclusive) that must be met for the targeting 15 // key value to be modified. Must be greater than 0. 16 MinDealTier int `json:"minDealTier"` 17 } 18 19 // DealTierBidderMap defines a correlation between bidders and deal tiers. 20 type DealTierBidderMap map[BidderName]DealTier 21 22 // ReadDealTiersFromImp returns a map of bidder deal tiers read from the impression of an original request (not split / cleaned). 23 func ReadDealTiersFromImp(imp openrtb2.Imp) (DealTierBidderMap, error) { 24 dealTiers := make(DealTierBidderMap) 25 26 if len(imp.Ext) == 0 { 27 return dealTiers, nil 28 } 29 30 var impPrebidExt struct { 31 Prebid struct { 32 Bidders map[string]struct { 33 DealTier *DealTier `json:"dealTier"` 34 } `json:"bidder"` 35 } `json:"prebid"` 36 } 37 if err := json.Unmarshal(imp.Ext, &impPrebidExt); err != nil { 38 return nil, err 39 } 40 for bidder, param := range impPrebidExt.Prebid.Bidders { 41 if param.DealTier != nil { 42 dealTiers[BidderName(bidder)] = *param.DealTier 43 } 44 } 45 46 return dealTiers, nil 47 }