{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE OverloadedStrings #-} {-| Module : Instana.SDK.Span.SpanType Description : Describes the type of a span, either an SDK span or a registered span. -} module Instana.SDK.Span.SpanType ( RegisteredSpanType (..) , SpanType (SdkSpan, RegisteredSpan) , spanName ) where import Data.String (IsString (fromString)) import Data.Text (Text) import qualified Data.Text as T import GHC.Generics -- |Differentiates between SDK spans and registered spans (which receive -- special treatment by Instana's processing pipeline. data SpanType = SdkSpan Text | RegisteredSpan RegisteredSpanType deriving (Eq, Generic, Show) -- |All registered spans that the Haskell trace SDK will produce. data RegisteredSpanType = HaskellWaiServer | HaskellHttpClient deriving (Eq, Generic, Show) -- |Returns the wire value of span.n for a SpanType value. spanName :: SpanType -> Text spanName (SdkSpan _) = "sdk" spanName (RegisteredSpan registered) = registeredSpanName registered -- |Returns the wire value of span.n for a registered span. registeredSpanName :: RegisteredSpanType -> Text registeredSpanName HaskellWaiServer = "haskell.wai.server" registeredSpanName HaskellHttpClient = "haskell.http.client" -- |Enables passing any string as the span type argument to SDK.startEntrySpan -- etc. - this will be automatically converted to an SDK span. instance IsString SpanType where fromString :: String -> SpanType fromString s = SdkSpan $ T.pack s