github.com/newrelic/go-agent@v3.26.0+incompatible/internal/cat/id.go (about) 1 // Copyright 2020 New Relic Corporation. All rights reserved. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package cat 5 6 import ( 7 "errors" 8 "strconv" 9 "strings" 10 ) 11 12 // IDHeader represents a decoded cross process ID header (generally encoded as 13 // a string in the form ACCOUNT#BLOB). 14 type IDHeader struct { 15 AccountID int 16 Blob string 17 } 18 19 var ( 20 errInvalidAccountID = errors.New("invalid account ID") 21 ) 22 23 // NewIDHeader parses the given decoded ID header and creates an IDHeader 24 // representing it. 25 func NewIDHeader(in []byte) (*IDHeader, error) { 26 parts := strings.Split(string(in), "#") 27 if len(parts) != 2 { 28 return nil, errUnexpectedArraySize{ 29 label: "unexpected number of ID elements", 30 expected: 2, 31 actual: len(parts), 32 } 33 } 34 35 account, err := strconv.Atoi(parts[0]) 36 if err != nil { 37 return nil, errInvalidAccountID 38 } 39 40 return &IDHeader{ 41 AccountID: account, 42 Blob: parts[1], 43 }, nil 44 }