packages feed

fficxx-0.7.0.0: src/FFICXX/Generate/Type/Config.hs

{-# LANGUAGE DeriveGeneric #-}

module FFICXX.Generate.Type.Config where

import Data.HashMap.Strict (HashMap)
import Data.Hashable (Hashable (..))
--
import FFICXX.Runtime.CodeGen.Cxx (HeaderName (..), Namespace (..))
import GHC.Generics (Generic)

data ModuleUnit
  = MU_TopLevel
  | MU_Class String
  deriving (Show, Eq, Generic)

instance Hashable ModuleUnit

data ModuleUnitImports = ModuleUnitImports
  { muimports_namespaces :: [Namespace],
    muimports_headers :: [HeaderName]
  }
  deriving (Show)

emptyModuleUnitImports = ModuleUnitImports [] []

newtype ModuleUnitMap = ModuleUnitMap {unModuleUnitMap :: HashMap ModuleUnit ModuleUnitImports}

modImports ::
  String ->
  [String] ->
  [HeaderName] ->
  (ModuleUnit, ModuleUnitImports)
modImports n ns hs =
  ( MU_Class n,
    ModuleUnitImports
      { muimports_namespaces = map NS ns,
        muimports_headers = hs
      }
  )