{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.GLib.Unions.TokenValue
    ( 

-- * Exported types
    TokenValue(..)                          ,
    noTokenValue                            ,


 -- * Properties
-- ** VBinary
    tokenValueReadVBinary                   ,


-- ** VChar
    tokenValueReadVChar                     ,


-- ** VComment
    tokenValueReadVComment                  ,


-- ** VError
    tokenValueReadVError                    ,


-- ** VFloat
    tokenValueReadVFloat                    ,


-- ** VHex
    tokenValueReadVHex                      ,


-- ** VIdentifier
    tokenValueReadVIdentifier               ,


-- ** VInt
    tokenValueReadVInt                      ,


-- ** VInt64
    tokenValueReadVInt64                    ,


-- ** VOctal
    tokenValueReadVOctal                    ,


-- ** VString
    tokenValueReadVString                   ,


-- ** VSymbol
    tokenValueReadVSymbol                   ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.GLib.Types
import GI.GLib.Callbacks

newtype TokenValue = TokenValue (ForeignPtr TokenValue)
noTokenValue :: Maybe TokenValue
noTokenValue = Nothing

tokenValueReadVSymbol :: TokenValue -> IO (Ptr ())
tokenValueReadVSymbol s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr ())
    return val

tokenValueReadVIdentifier :: TokenValue -> IO T.Text
tokenValueReadVIdentifier s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CString
    val' <- cstringToText val
    return val'

tokenValueReadVBinary :: TokenValue -> IO Word64
tokenValueReadVBinary s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

tokenValueReadVOctal :: TokenValue -> IO Word64
tokenValueReadVOctal s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

tokenValueReadVInt :: TokenValue -> IO Word64
tokenValueReadVInt s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

tokenValueReadVInt64 :: TokenValue -> IO Word64
tokenValueReadVInt64 s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

tokenValueReadVFloat :: TokenValue -> IO Double
tokenValueReadVFloat s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CDouble
    let val' = realToFrac val
    return val'

tokenValueReadVHex :: TokenValue -> IO Word64
tokenValueReadVHex s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word64
    return val

tokenValueReadVString :: TokenValue -> IO T.Text
tokenValueReadVString s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CString
    val' <- cstringToText val
    return val'

tokenValueReadVComment :: TokenValue -> IO T.Text
tokenValueReadVComment s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CString
    val' <- cstringToText val
    return val'

tokenValueReadVChar :: TokenValue -> IO Word8
tokenValueReadVChar s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word8
    return val

tokenValueReadVError :: TokenValue -> IO Word32
tokenValueReadVError s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val