packages feed

registry-messagepack-0.2.0.0: src/Data/Registry/MessagePack/Options.hs

module Data.Registry.MessagePack.Options where

import qualified Data.Text as T
import Protolude

-- | Options used to adjust the creation of encoders/decoders
newtype Options = Options
  { modifyTypeName :: Text -> Text
  }

-- | Default options for adjusting the creation of Encoders/Decoders
defaultOptions :: Options
defaultOptions = Options dropQualifier

-- | Drop the leading names in a qualified name
---  dropQualifier "x.y.z" === "z"
dropQualifier :: Text -> Text
dropQualifier t = fromMaybe t . lastMay $ T.splitOn "." t

-- | This function does not modify type names
qualified :: Text -> Text
qualified  = identity

-- | Provide a specific qualifier to produce type names
---  qualifyAs "a" "x.y.z" === "a.z"
qualifyAs :: Text -> Text -> Text
qualifyAs qualifier t = qualifier <> "." <> dropQualifier t

-- | Keep the last name as the qualifier
---  qualifyWithLastName "x.y.z" === "y.z"
qualifyWithLastName :: Text -> Text
qualifyWithLastName t =
  case reverse $ T.splitOn "." t of
    t1 : t2 : _ -> t2 <> "." <> t1
    _ -> t