-----------------------------------------------------------------------------

-----------------------------------------------------------------------------

{- |
 Module      :  OpenTelemetry.Id.Generator
 Copyright   :  (c) Ian Duncan, 2021
 License     :  BSD-3
 Description :  Raw byte generation facilities for ID generation
 Maintainer  :  Ian Duncan
 Stability   :  experimental
 Portability :  non-portable (GHC extensions)

 Stateful random number generation interface for creating Trace and Span ID
 bytes.

 In most cases, the built-in generator in the hs-opentelemetry-sdk will be sufficient, but the
 interface is exposed for more exotic needs.
-}
module OpenTelemetry.Trace.Id.Generator (
  IdGenerator (..),
) where

import Data.ByteString (ByteString)


{- | An interface for generating the underlying bytes for
 trace and span ids.
-}
data IdGenerator = IdGenerator
  { IdGenerator -> IO ByteString
generateSpanIdBytes :: IO ByteString
  -- ^ MUST generate exactly 8 bytes
  , IdGenerator -> IO ByteString
generateTraceIdBytes :: IO ByteString
  -- ^ MUST generate exactly 16 bytes
  }