packages feed

patrol-0.1.0.1: source/library/Patrol/Type/TraceContext.hs

module Patrol.Type.TraceContext where

import qualified Data.Aeson as Aeson
import qualified Data.Text as Text
import qualified Patrol.Extra.Aeson as Aeson
import qualified Patrol.Type.SpanStatus as SpanStatus

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#tracecontext>
data TraceContext = TraceContext
  { exclusiveTime :: Maybe Int,
    op :: Text.Text,
    parentSpanId :: Text.Text,
    spanId :: Text.Text,
    status :: Maybe SpanStatus.SpanStatus,
    traceId :: Text.Text
  }
  deriving (Eq, Show)

instance Aeson.ToJSON TraceContext where
  toJSON traceContext =
    Aeson.intoObject
      [ Aeson.pair "exclusive_time" $ exclusiveTime traceContext,
        Aeson.pair "op" $ op traceContext,
        Aeson.pair "parent_span_id" $ parentSpanId traceContext,
        Aeson.pair "span_id" $ spanId traceContext,
        Aeson.pair "status" $ status traceContext,
        Aeson.pair "trace_id" $ traceId traceContext
      ]

empty :: TraceContext
empty =
  TraceContext
    { exclusiveTime = Nothing,
      op = Text.empty,
      parentSpanId = Text.empty,
      spanId = Text.empty,
      status = Nothing,
      traceId = Text.empty
    }