packages feed

hs-opentelemetry-api-0.0.1.0: src/OpenTelemetry/Context/Types.hs

module OpenTelemetry.Context.Types where

import Data.Text (Text)
import qualified Data.Vault.Strict as V

-- | A `Context` is a propagation mechanism which carries execution-scoped values
-- across API boundaries and between logically associated execution units.
-- Cross-cutting concerns access their data in-process using the same shared
-- `Context` object
newtype Context = Context V.Vault

instance Semigroup Context where
  (<>) (Context l) (Context r) = Context (V.union l r)

instance Monoid Context where
  mempty = Context V.empty

-- | Keys are used to allow cross-cutting concerns to control access to their local state.
-- They are unique such that other libraries which may use the same context
-- cannot accidentally use the same key. It is recommended that concerns mediate
-- data access via an API, rather than provide direct public access to their keys.
data Key a = Key { keyName :: Text, key :: V.Key a }