Skip to content

Instantly share code, notes, and snippets.

@ernado
Created November 19, 2025 06:08
Show Gist options
  • Select an option

  • Save ernado/3d2e256128dd173537825e6e845b87fc to your computer and use it in GitHub Desktop.

Select an option

Save ernado/3d2e256128dd173537825e6e845b87fc to your computer and use it in GitHub Desktop.
simdjson decoder for OTEL
func (o *OTEL) DecodeSIMD(data []byte, pj *simdjson.ParsedJson) (*simdjson.ParsedJson, error) {
pj, err := simdjson.Parse(data, pj, simdjson.WithCopyStrings(false))
if err != nil {
return nil, err
}
var decodeErr error
if err := pj.ForEach(func(i simdjson.Iter) error {
if i.Type() != simdjson.TypeObject {
return errors.Errorf("expected object, got %v", i.Type())
}
obj, err := i.Object(nil)
if err != nil {
return errors.Wrap(err, "object")
}
if err := obj.ForEach(func(key []byte, i simdjson.Iter) {
if decodeErr != nil {
return // Skip if we already have an error
}
switch string(key) {
case "Body":
// HACK: use StringBytes to get raw bytes without allocation.
v, err := i.StringBytes()
if err != nil {
decodeErr = errors.Wrap(err, "body")
return
}
o.Body = v
case "SeverityNumber":
v, err := i.Uint()
if err != nil {
decodeErr = errors.Wrap(err, "severity number")
return
}
o.Severity = byte(v)
case "SeverityText":
// Skip
case "Timestamp":
v, err := i.StringBytes()
if err != nil {
decodeErr = errors.Wrap(err, "timestamp")
return
}
o.Timestamp = append(o.Timestamp[:0], v...)
case "TraceId":
v, err := i.StringBytes()
if err != nil {
decodeErr = errors.Wrap(err, "trace id")
return
}
if _, err := hex.Decode(o.TraceID[:], v); err != nil {
decodeErr = errors.Wrap(err, "trace id decode")
return
}
case "SpanId":
v, err := i.StringBytes()
if err != nil {
decodeErr = errors.Wrap(err, "span id")
return
}
if _, err := hex.Decode(o.SpanID[:], v); err != nil {
decodeErr = errors.Wrap(err, "span id decode")
return
}
case "Attributes":
if err := decodeMapSIMD(&o.Attributes, &i); err != nil {
decodeErr = errors.Wrap(err, "attributes")
return
}
case "Resource":
if err := decodeMapSIMD(&o.Resource, &i); err != nil {
decodeErr = errors.Wrap(err, "resource")
return
}
}
}, nil); err != nil {
return err
}
return decodeErr
}); err != nil {
return nil, err
}
return pj, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment