module System.Wlog.LoggerName
( LoggerName (..)
) where
import Universum
import Data.Aeson.Types (ToJSON, ToJSONKey (..), toJSONKeyText)
import Fmt (build)
newtype LoggerName = LoggerName
{ getLoggerName :: Text
} deriving (Show, IsString, Eq, Ord, Hashable, Generic)
instance Semigroup LoggerName where
LoggerName parent <> LoggerName suffix
| null parent = LoggerName suffix
| null suffix = LoggerName parent
| otherwise = LoggerName $ parent <> "." <> suffix
instance Monoid LoggerName where
mempty = ""
mappend = (<>)
instance Buildable LoggerName where
build = build . getLoggerName
instance ToJSON LoggerName
instance ToJSONKey LoggerName where
toJSONKey = toJSONKeyText getLoggerName