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  }