packages feed

registry-options-0.1.0.0: src/Data/Registry/Options/FieldConfiguration.hs

-- | Configuration of fields from
--   field names given as singleton string types
--   For example in the `Parser "myField" MyType
--   @myField@ is used to create an option name like @--my-field@ (by default)
module Data.Registry.Options.FieldConfiguration where

import Data.Registry.Options.Text
import qualified Data.Text as T
import Protolude
import qualified Prelude

-- | These options are used at runtime to take a field name and build its short/long name + metavar
data FieldConfiguration = FieldConfiguration
  { -- | make a short name from a field name. For example @"force" -> \'f\'@
    makeShortName :: Text -> Char,
    -- | make a long name from a field name. For example @"forceCopy" -> 'force-copy'@
    makeLongName :: Text -> Text,
    -- | describe the type of a field from its name. For example @"sourceFile" -> "File"@
    makeMetavar :: Text -> Text
  }

-- | The default options are taking a Package1.Package2.camelCase name and
--    - creating a short name = "c"
--    - creating a long name = "camel-case"
--    - creating a metavar = "CAMELCASE"
defaultFieldConfiguration :: FieldConfiguration
defaultFieldConfiguration =
  FieldConfiguration (Prelude.head . toS . dropQualifier) (camelCaseToHyphenated . dropQualifier) (T.toUpper . dropQualifier)