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