{-# LANGUAGE NumericUnderscores #-}
module OpenTelemetry.Common (
Timestamp (..),
TraceFlags (..),
OptionalTimestamp (NoTimestamp, SomeTimestamp),
isEnded,
optionalTimestampToMaybe,
optionalTimestampFromMaybe,
timestampToOptional,
mkTimestamp,
timestampToNanoseconds,
) where
import Data.Word (Word64, Word8)
newtype Timestamp = Timestamp Word64
deriving (ReadPrec [Timestamp]
ReadPrec Timestamp
Int -> ReadS Timestamp
ReadS [Timestamp]
(Int -> ReadS Timestamp)
-> ReadS [Timestamp]
-> ReadPrec Timestamp
-> ReadPrec [Timestamp]
-> Read Timestamp
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Timestamp
readsPrec :: Int -> ReadS Timestamp
$creadList :: ReadS [Timestamp]
readList :: ReadS [Timestamp]
$creadPrec :: ReadPrec Timestamp
readPrec :: ReadPrec Timestamp
$creadListPrec :: ReadPrec [Timestamp]
readListPrec :: ReadPrec [Timestamp]
Read, Int -> Timestamp -> ShowS
[Timestamp] -> ShowS
Timestamp -> String
(Int -> Timestamp -> ShowS)
-> (Timestamp -> String)
-> ([Timestamp] -> ShowS)
-> Show Timestamp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Timestamp -> ShowS
showsPrec :: Int -> Timestamp -> ShowS
$cshow :: Timestamp -> String
show :: Timestamp -> String
$cshowList :: [Timestamp] -> ShowS
showList :: [Timestamp] -> ShowS
Show, Timestamp -> Timestamp -> Bool
(Timestamp -> Timestamp -> Bool)
-> (Timestamp -> Timestamp -> Bool) -> Eq Timestamp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Timestamp -> Timestamp -> Bool
== :: Timestamp -> Timestamp -> Bool
$c/= :: Timestamp -> Timestamp -> Bool
/= :: Timestamp -> Timestamp -> Bool
Eq, Eq Timestamp
Eq Timestamp =>
(Timestamp -> Timestamp -> Ordering)
-> (Timestamp -> Timestamp -> Bool)
-> (Timestamp -> Timestamp -> Bool)
-> (Timestamp -> Timestamp -> Bool)
-> (Timestamp -> Timestamp -> Bool)
-> (Timestamp -> Timestamp -> Timestamp)
-> (Timestamp -> Timestamp -> Timestamp)
-> Ord Timestamp
Timestamp -> Timestamp -> Bool
Timestamp -> Timestamp -> Ordering
Timestamp -> Timestamp -> Timestamp
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Timestamp -> Timestamp -> Ordering
compare :: Timestamp -> Timestamp -> Ordering
$c< :: Timestamp -> Timestamp -> Bool
< :: Timestamp -> Timestamp -> Bool
$c<= :: Timestamp -> Timestamp -> Bool
<= :: Timestamp -> Timestamp -> Bool
$c> :: Timestamp -> Timestamp -> Bool
> :: Timestamp -> Timestamp -> Bool
$c>= :: Timestamp -> Timestamp -> Bool
>= :: Timestamp -> Timestamp -> Bool
$cmax :: Timestamp -> Timestamp -> Timestamp
max :: Timestamp -> Timestamp -> Timestamp
$cmin :: Timestamp -> Timestamp -> Timestamp
min :: Timestamp -> Timestamp -> Timestamp
Ord)
newtype TraceFlags = TraceFlags Word8
deriving (Int -> TraceFlags -> ShowS
[TraceFlags] -> ShowS
TraceFlags -> String
(Int -> TraceFlags -> ShowS)
-> (TraceFlags -> String)
-> ([TraceFlags] -> ShowS)
-> Show TraceFlags
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TraceFlags -> ShowS
showsPrec :: Int -> TraceFlags -> ShowS
$cshow :: TraceFlags -> String
show :: TraceFlags -> String
$cshowList :: [TraceFlags] -> ShowS
showList :: [TraceFlags] -> ShowS
Show, TraceFlags -> TraceFlags -> Bool
(TraceFlags -> TraceFlags -> Bool)
-> (TraceFlags -> TraceFlags -> Bool) -> Eq TraceFlags
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TraceFlags -> TraceFlags -> Bool
== :: TraceFlags -> TraceFlags -> Bool
$c/= :: TraceFlags -> TraceFlags -> Bool
/= :: TraceFlags -> TraceFlags -> Bool
Eq, Eq TraceFlags
Eq TraceFlags =>
(TraceFlags -> TraceFlags -> Ordering)
-> (TraceFlags -> TraceFlags -> Bool)
-> (TraceFlags -> TraceFlags -> Bool)
-> (TraceFlags -> TraceFlags -> Bool)
-> (TraceFlags -> TraceFlags -> Bool)
-> (TraceFlags -> TraceFlags -> TraceFlags)
-> (TraceFlags -> TraceFlags -> TraceFlags)
-> Ord TraceFlags
TraceFlags -> TraceFlags -> Bool
TraceFlags -> TraceFlags -> Ordering
TraceFlags -> TraceFlags -> TraceFlags
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: TraceFlags -> TraceFlags -> Ordering
compare :: TraceFlags -> TraceFlags -> Ordering
$c< :: TraceFlags -> TraceFlags -> Bool
< :: TraceFlags -> TraceFlags -> Bool
$c<= :: TraceFlags -> TraceFlags -> Bool
<= :: TraceFlags -> TraceFlags -> Bool
$c> :: TraceFlags -> TraceFlags -> Bool
> :: TraceFlags -> TraceFlags -> Bool
$c>= :: TraceFlags -> TraceFlags -> Bool
>= :: TraceFlags -> TraceFlags -> Bool
$cmax :: TraceFlags -> TraceFlags -> TraceFlags
max :: TraceFlags -> TraceFlags -> TraceFlags
$cmin :: TraceFlags -> TraceFlags -> TraceFlags
min :: TraceFlags -> TraceFlags -> TraceFlags
Ord)
data OptionalTimestamp
= NoTimestamp
| SomeTimestamp {-# UNPACK #-} !Word64
deriving (OptionalTimestamp -> OptionalTimestamp -> Bool
(OptionalTimestamp -> OptionalTimestamp -> Bool)
-> (OptionalTimestamp -> OptionalTimestamp -> Bool)
-> Eq OptionalTimestamp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: OptionalTimestamp -> OptionalTimestamp -> Bool
== :: OptionalTimestamp -> OptionalTimestamp -> Bool
$c/= :: OptionalTimestamp -> OptionalTimestamp -> Bool
/= :: OptionalTimestamp -> OptionalTimestamp -> Bool
Eq, Eq OptionalTimestamp
Eq OptionalTimestamp =>
(OptionalTimestamp -> OptionalTimestamp -> Ordering)
-> (OptionalTimestamp -> OptionalTimestamp -> Bool)
-> (OptionalTimestamp -> OptionalTimestamp -> Bool)
-> (OptionalTimestamp -> OptionalTimestamp -> Bool)
-> (OptionalTimestamp -> OptionalTimestamp -> Bool)
-> (OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp)
-> (OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp)
-> Ord OptionalTimestamp
OptionalTimestamp -> OptionalTimestamp -> Bool
OptionalTimestamp -> OptionalTimestamp -> Ordering
OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: OptionalTimestamp -> OptionalTimestamp -> Ordering
compare :: OptionalTimestamp -> OptionalTimestamp -> Ordering
$c< :: OptionalTimestamp -> OptionalTimestamp -> Bool
< :: OptionalTimestamp -> OptionalTimestamp -> Bool
$c<= :: OptionalTimestamp -> OptionalTimestamp -> Bool
<= :: OptionalTimestamp -> OptionalTimestamp -> Bool
$c> :: OptionalTimestamp -> OptionalTimestamp -> Bool
> :: OptionalTimestamp -> OptionalTimestamp -> Bool
$c>= :: OptionalTimestamp -> OptionalTimestamp -> Bool
>= :: OptionalTimestamp -> OptionalTimestamp -> Bool
$cmax :: OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp
max :: OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp
$cmin :: OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp
min :: OptionalTimestamp -> OptionalTimestamp -> OptionalTimestamp
Ord)
instance Show OptionalTimestamp where
showsPrec :: Int -> OptionalTimestamp -> ShowS
showsPrec Int
_ OptionalTimestamp
NoTimestamp = String -> ShowS
showString String
"NoTimestamp"
showsPrec Int
d (SomeTimestamp Word64
ns) =
Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString String
"SomeTimestamp " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Word64 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11 Word64
ns
isEnded :: OptionalTimestamp -> Bool
isEnded :: OptionalTimestamp -> Bool
isEnded OptionalTimestamp
NoTimestamp = Bool
False
isEnded OptionalTimestamp
_ = Bool
True
{-# INLINE isEnded #-}
optionalTimestampToMaybe :: OptionalTimestamp -> Maybe Timestamp
optionalTimestampToMaybe :: OptionalTimestamp -> Maybe Timestamp
optionalTimestampToMaybe OptionalTimestamp
NoTimestamp = Maybe Timestamp
forall a. Maybe a
Nothing
optionalTimestampToMaybe (SomeTimestamp Word64
ns) = Timestamp -> Maybe Timestamp
forall a. a -> Maybe a
Just (Word64 -> Timestamp
Timestamp Word64
ns)
{-# INLINE optionalTimestampToMaybe #-}
optionalTimestampFromMaybe :: Maybe Timestamp -> OptionalTimestamp
optionalTimestampFromMaybe :: Maybe Timestamp -> OptionalTimestamp
optionalTimestampFromMaybe Maybe Timestamp
Nothing = OptionalTimestamp
NoTimestamp
optionalTimestampFromMaybe (Just (Timestamp Word64
ns)) = Word64 -> OptionalTimestamp
SomeTimestamp Word64
ns
{-# INLINE optionalTimestampFromMaybe #-}
timestampToOptional :: Timestamp -> OptionalTimestamp
timestampToOptional :: Timestamp -> OptionalTimestamp
timestampToOptional (Timestamp Word64
ns) = Word64 -> OptionalTimestamp
SomeTimestamp Word64
ns
{-# INLINE timestampToOptional #-}
mkTimestamp :: Word64 -> Word64 -> Timestamp
mkTimestamp :: Word64 -> Word64 -> Timestamp
mkTimestamp Word64
sec Word64
nsec = Word64 -> Timestamp
Timestamp (Word64
sec Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
* Word64
1_000_000_000 Word64 -> Word64 -> Word64
forall a. Num a => a -> a -> a
+ Word64
nsec)
{-# INLINE mkTimestamp #-}
timestampToNanoseconds :: Timestamp -> Word64
timestampToNanoseconds :: Timestamp -> Word64
timestampToNanoseconds (Timestamp Word64
ns) = Word64
ns
{-# INLINE timestampToNanoseconds #-}