{-# LANGUAGE GADTs #-}

module GhcTags.CTag.Utils
  ( tagKindToChar
  , charToTagKind
  ) where

import           GhcTags.Tag

tagKindToChar :: TagKind -> Maybe Char
tagKindToChar :: TagKind -> Maybe Char
tagKindToChar TagKind
tk = case TagKind
tk of
    TagKind
TkModule                  -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'M'
    TagKind
TkTerm                    -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'`'
    TagKind
TkFunction                -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'λ'
    TagKind
TkTypeConstructor         -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'Λ'
    TagKind
TkDataConstructor         -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'c'
    TagKind
TkGADTConstructor         -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'g'
    TagKind
TkRecordField             -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'r'
    TagKind
TkTypeSynonym             -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'≡'
    TagKind
TkTypeSignature           -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'⊢'
    TagKind
TkPatternSynonym          -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'p'
    TagKind
TkTypeClass               -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'C'
    TagKind
TkTypeClassMember         -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'm'
    TagKind
TkTypeClassInstance       -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'i'
    TagKind
TkTypeClassInstanceMember -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'x'
    TagKind
TkTypeFamily              -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'f'
    TagKind
TkTypeFamilyInstance      -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'F'
    TagKind
TkDataTypeFamily          -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'd'
    TagKind
TkDataTypeFamilyInstance  -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'D'
    TagKind
TkForeignImport           -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'I'
    TagKind
TkForeignExport           -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
'E'

    CharKind Char
c                -> Char -> Maybe Char
forall a. a -> Maybe a
Just Char
c
    TagKind
NoKind                    -> Maybe Char
forall a. Maybe a
Nothing


charToTagKind :: Char -> TagKind
charToTagKind :: Char -> TagKind
charToTagKind Char
c = case Char
c of
     Char
'M' -> TagKind
TkModule
     Char
'`' -> TagKind
TkTerm
     Char
'λ' -> TagKind
TkFunction
     Char
'Λ' -> TagKind
TkTypeConstructor
     Char
'c' -> TagKind
TkDataConstructor
     Char
'g' -> TagKind
TkGADTConstructor
     Char
'r' -> TagKind
TkRecordField
     Char
'≡' -> TagKind
TkTypeSynonym
     Char
'⊢' -> TagKind
TkTypeSignature
     Char
'p' -> TagKind
TkPatternSynonym
     Char
'C' -> TagKind
TkTypeClass
     Char
'm' -> TagKind
TkTypeClassMember
     Char
'i' -> TagKind
TkTypeClassInstance
     Char
'x' -> TagKind
TkTypeClassInstanceMember
     Char
'f' -> TagKind
TkTypeFamily
     Char
'F' -> TagKind
TkTypeFamilyInstance
     Char
'd' -> TagKind
TkDataTypeFamily
     Char
'D' -> TagKind
TkDataTypeFamilyInstance
     Char
'I' -> TagKind
TkForeignImport
     Char
'E' -> TagKind
TkForeignExport

     Char
_   -> Char -> TagKind
CharKind Char
c