{- |
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.Soup.Objects.RequestHTTP
    ( 

-- * Exported types
    RequestHTTP(..)                         ,
    IsRequestHTTP                           ,
    toRequestHTTP                           ,
    noRequestHTTP                           ,


 -- * Methods
-- ** getMessage #method:getMessage#
    RequestHTTPGetMessageMethodInfo         ,
    requestHTTPGetMessage                   ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Interfaces.Initable as Gio.Initable
import {-# SOURCE #-} qualified GI.Soup.Objects.Message as Soup.Message
import {-# SOURCE #-} qualified GI.Soup.Objects.Request as Soup.Request

newtype RequestHTTP = RequestHTTP (ManagedPtr RequestHTTP)
foreign import ccall "soup_request_http_get_type"
    c_soup_request_http_get_type :: IO GType

instance GObject RequestHTTP where
    gobjectType _ = c_soup_request_http_get_type
    

class GObject o => IsRequestHTTP o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError RequestHTTP a) =>
    IsRequestHTTP a
#endif
instance IsRequestHTTP RequestHTTP
instance Soup.Request.IsRequest RequestHTTP
instance GObject.Object.IsObject RequestHTTP
instance Gio.Initable.IsInitable RequestHTTP

toRequestHTTP :: IsRequestHTTP o => o -> IO RequestHTTP
toRequestHTTP = unsafeCastTo RequestHTTP

noRequestHTTP :: Maybe RequestHTTP
noRequestHTTP = Nothing

type family ResolveRequestHTTPMethod (t :: Symbol) (o :: *) :: * where
    ResolveRequestHTTPMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveRequestHTTPMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveRequestHTTPMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveRequestHTTPMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveRequestHTTPMethod "init" o = Gio.Initable.InitableInitMethodInfo
    ResolveRequestHTTPMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveRequestHTTPMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveRequestHTTPMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveRequestHTTPMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveRequestHTTPMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveRequestHTTPMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveRequestHTTPMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveRequestHTTPMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveRequestHTTPMethod "send" o = Soup.Request.RequestSendMethodInfo
    ResolveRequestHTTPMethod "sendAsync" o = Soup.Request.RequestSendAsyncMethodInfo
    ResolveRequestHTTPMethod "sendFinish" o = Soup.Request.RequestSendFinishMethodInfo
    ResolveRequestHTTPMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveRequestHTTPMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveRequestHTTPMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveRequestHTTPMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveRequestHTTPMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveRequestHTTPMethod "getContentLength" o = Soup.Request.RequestGetContentLengthMethodInfo
    ResolveRequestHTTPMethod "getContentType" o = Soup.Request.RequestGetContentTypeMethodInfo
    ResolveRequestHTTPMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveRequestHTTPMethod "getMessage" o = RequestHTTPGetMessageMethodInfo
    ResolveRequestHTTPMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveRequestHTTPMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveRequestHTTPMethod "getSession" o = Soup.Request.RequestGetSessionMethodInfo
    ResolveRequestHTTPMethod "getUri" o = Soup.Request.RequestGetUriMethodInfo
    ResolveRequestHTTPMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveRequestHTTPMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveRequestHTTPMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveRequestHTTPMethod t RequestHTTP, O.MethodInfo info RequestHTTP p) => O.IsLabelProxy t (RequestHTTP -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveRequestHTTPMethod t RequestHTTP, O.MethodInfo info RequestHTTP p) => O.IsLabel t (RequestHTTP -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

instance O.HasAttributeList RequestHTTP
type instance O.AttributeList RequestHTTP = RequestHTTPAttributeList
type RequestHTTPAttributeList = ('[ '("session", Soup.Request.RequestSessionPropertyInfo), '("uri", Soup.Request.RequestUriPropertyInfo)] :: [(Symbol, *)])

type instance O.SignalList RequestHTTP = RequestHTTPSignalList
type RequestHTTPSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method RequestHTTP::get_message
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "http", argType = TInterface (Name {namespace = "Soup", name = "RequestHTTP"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #SoupRequestHTTP object", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Soup", name = "Message"}))
-- throws : False
-- Skip return : False

foreign import ccall "soup_request_http_get_message" soup_request_http_get_message :: 
    Ptr RequestHTTP ->                      -- http : TInterface (Name {namespace = "Soup", name = "RequestHTTP"})
    IO (Ptr Soup.Message.Message)

{- |
Gets a new reference to the 'GI.Soup.Objects.Message.Message' associated to this SoupRequest

@since 2.40
-}
requestHTTPGetMessage ::
    (B.CallStack.HasCallStack, MonadIO m, IsRequestHTTP a) =>
    a
    {- ^ /@http@/: a 'GI.Soup.Objects.RequestHTTP.RequestHTTP' object -}
    -> m Soup.Message.Message
    {- ^ __Returns:__ a new reference to the 'GI.Soup.Objects.Message.Message' -}
requestHTTPGetMessage http = liftIO $ do
    http' <- unsafeManagedPtrCastPtr http
    result <- soup_request_http_get_message http'
    checkUnexpectedReturnNULL "requestHTTPGetMessage" result
    result' <- (wrapObject Soup.Message.Message) result
    touchManagedPtr http
    return result'

data RequestHTTPGetMessageMethodInfo
instance (signature ~ (m Soup.Message.Message), MonadIO m, IsRequestHTTP a) => O.MethodInfo RequestHTTPGetMessageMethodInfo a signature where
    overloadedMethod _ = requestHTTPGetMessage