content: module Puppet.Language.NativeTypes.Concat
    ( nativeConcat,
      nativeConcatFragment,
    )
  where
  
  import Puppet.Language.NativeTypes.Helpers
  
  nativeConcat :: (NativeTypeName, NativeTypeMethods)
  nativeConcat = ("concat", nativetypemethods concatparamfunctions pure)
  
  nativeConcatFragment :: (NativeTypeName, NativeTypeMethods)
  nativeConcatFragment = ("concat::fragment", nativetypemethods fragmentparamfunctions validateSourceOrContent)
  
  concatparamfunctions :: [(Text, [Text -> NativeTypeValidate])]
  concatparamfunctions =
    [ ("name", [nameval]),
      ("ensure", [defaultvalue "present", string, values ["present", "absent"]]),
      ("path", [string]),
      ("owner", [string]),
      ("group", [string]),
      ("validate_cmd", [string]),
      ("mode", [defaultvalue "0644", string]),
      ("warn", [defaultvalue "false", string, values ["false", "true"]]),
      ("force", [defaultvalue "false", string, values ["false", "true"]]),
      ("backup", [defaultvalue "puppet", string]),
      ("replace", [defaultvalue "true", string, values ["false", "true"]]),
      ("order", [defaultvalue "alpha", string, values ["alpha", "numeric"]]),
      ("ensure_newline", [defaultvalue "false", string, values ["false", "true"]])
      -- deprecated
      -- ,("gnu"                 , [string])
    ]
  
  fragmentparamfunctions :: [(Text, [Text -> NativeTypeValidate])]
  fragmentparamfunctions =
    [ ("name", [nameval]),
      ("target", [string, mandatory]),
      ("content", [string]),
      ("source", [string]),
      -- order should be an int or a string
      ("order", [defaultvalue "10", string])
    ]
  