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

Opaque structure containing XML-RPC methodCall parameter values.
Can be parsed using soup_xmlrpc_params_parse() and freed with
soup_xmlrpc_params_free().
-}

module GI.Soup.Structs.XMLRPCParams
    ( 

-- * Exported types
    XMLRPCParams(..)                        ,
    noXMLRPCParams                          ,


 -- * Methods
-- ** xMLRPCParamsFree
    xMLRPCParamsFree                        ,


-- ** xMLRPCParamsParse
    xMLRPCParamsParse                       ,




    ) 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.Soup.Types
import GI.Soup.Callbacks

newtype XMLRPCParams = XMLRPCParams (ForeignPtr XMLRPCParams)
noXMLRPCParams :: Maybe XMLRPCParams
noXMLRPCParams = Nothing

-- method XMLRPCParams::free
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Soup" "XMLRPCParams", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Soup" "XMLRPCParams", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "soup_xmlrpc_params_free" soup_xmlrpc_params_free :: 
    Ptr XMLRPCParams ->                     -- _obj : TInterface "Soup" "XMLRPCParams"
    IO ()


xMLRPCParamsFree ::
    (MonadIO m) =>
    XMLRPCParams ->                         -- _obj
    m ()
xMLRPCParamsFree _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    soup_xmlrpc_params_free _obj'
    touchManagedPtr _obj
    return ()

-- method XMLRPCParams::parse
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "Soup" "XMLRPCParams", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "signature", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "Soup" "XMLRPCParams", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "signature", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TVariant
-- throws : True
-- Skip return : False

foreign import ccall "soup_xmlrpc_params_parse" soup_xmlrpc_params_parse :: 
    Ptr XMLRPCParams ->                     -- _obj : TInterface "Soup" "XMLRPCParams"
    CString ->                              -- signature : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr GVariant)


xMLRPCParamsParse ::
    (MonadIO m) =>
    XMLRPCParams ->                         -- _obj
    Maybe (T.Text) ->                       -- signature
    m GVariant
xMLRPCParamsParse _obj signature = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    maybeSignature <- case signature of
        Nothing -> return nullPtr
        Just jSignature -> do
            jSignature' <- textToCString jSignature
            return jSignature'
    onException (do
        result <- propagateGError $ soup_xmlrpc_params_parse _obj' maybeSignature
        checkUnexpectedReturnNULL "soup_xmlrpc_params_parse" result
        result' <- wrapGVariantPtr result
        touchManagedPtr _obj
        freeMem maybeSignature
        return result'
     ) (do
        freeMem maybeSignature
     )