packages feed

henforcer-1.0.0.0: src/Henforcer/CodeStructure/Import/Scheme/Alias.hs

{- |
Module      : Henforcer.CodeStructure.Import.Scheme.Alias
Description : Models the representation of an alias portion of an import statement.
Copyright   : (c) Flipstone Technology Partners, 2023-2026
License     : MIT
Maintainer  : maintainers@flipstone.com
-}
module Henforcer.CodeStructure.Import.Scheme.Alias
  ( Alias (..)
  , aliasCodecWithDefault
  , determineAlias
  ) where

import qualified Toml

import qualified CompatGHC

{- | Directly represent if an import has an alias or not.

@since 1.0.0.0
-}
data Alias
  = WithAlias !CompatGHC.ModuleName
  | WithoutAlias
  deriving (Eq, Show)

maybeFromAlias :: Alias -> Maybe CompatGHC.ModuleName
maybeFromAlias WithoutAlias = Nothing
maybeFromAlias (WithAlias x) = Just x

aliasCodec :: Toml.Key -> Toml.TomlCodec Alias
aliasCodec =
  Toml.dimatch maybeFromAlias WithAlias . CompatGHC.moduleNameCodec

defaultWithoutAlias :: Maybe Alias -> Alias
defaultWithoutAlias Nothing = WithoutAlias
defaultWithoutAlias (Just x) = x

aliasCodecWithDefault :: Toml.Key -> Toml.TomlCodec Alias
aliasCodecWithDefault =
  Toml.dimap pure defaultWithoutAlias . Toml.dioptional . aliasCodec

{- | Compute the alias from an import

@since 1.0.0.0
-}
determineAlias :: CompatGHC.ImportDecl CompatGHC.GhcRn -> Alias
determineAlias =
  maybe WithoutAlias (WithAlias . CompatGHC.unLoc) . CompatGHC.ideclAs