{- |
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.WebKit2.Objects.URIRequest
    ( 

-- * Exported types
    URIRequest(..)                          ,
    IsURIRequest                            ,
    toURIRequest                            ,
    noURIRequest                            ,


 -- * Methods
-- ** getHttpHeaders #method:getHttpHeaders#
    URIRequestGetHttpHeadersMethodInfo      ,
    uRIRequestGetHttpHeaders                ,


-- ** getHttpMethod #method:getHttpMethod#
    URIRequestGetHttpMethodMethodInfo       ,
    uRIRequestGetHttpMethod                 ,


-- ** getUri #method:getUri#
    URIRequestGetUriMethodInfo              ,
    uRIRequestGetUri                        ,


-- ** new #method:new#
    uRIRequestNew                           ,


-- ** setUri #method:setUri#
    URIRequestSetUriMethodInfo              ,
    uRIRequestSetUri                        ,




 -- * Properties
-- ** uri #attr:uri#
    URIRequestUriPropertyInfo               ,
    constructURIRequestUri                  ,
    getURIRequestUri                        ,
    setURIRequestUri                        ,
    uRIRequestUri                           ,




    ) 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.Soup.Structs.MessageHeaders as Soup.MessageHeaders

newtype URIRequest = URIRequest (ManagedPtr URIRequest)
foreign import ccall "webkit_uri_request_get_type"
    c_webkit_uri_request_get_type :: IO GType

instance GObject URIRequest where
    gobjectType _ = c_webkit_uri_request_get_type
    

class GObject o => IsURIRequest o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError URIRequest a) =>
    IsURIRequest a
#endif
instance IsURIRequest URIRequest
instance GObject.Object.IsObject URIRequest

toURIRequest :: IsURIRequest o => o -> IO URIRequest
toURIRequest = unsafeCastTo URIRequest

noURIRequest :: Maybe URIRequest
noURIRequest = Nothing

type family ResolveURIRequestMethod (t :: Symbol) (o :: *) :: * where
    ResolveURIRequestMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveURIRequestMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveURIRequestMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveURIRequestMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveURIRequestMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveURIRequestMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveURIRequestMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveURIRequestMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveURIRequestMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveURIRequestMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveURIRequestMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveURIRequestMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveURIRequestMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveURIRequestMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveURIRequestMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveURIRequestMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveURIRequestMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveURIRequestMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveURIRequestMethod "getHttpHeaders" o = URIRequestGetHttpHeadersMethodInfo
    ResolveURIRequestMethod "getHttpMethod" o = URIRequestGetHttpMethodMethodInfo
    ResolveURIRequestMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveURIRequestMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveURIRequestMethod "getUri" o = URIRequestGetUriMethodInfo
    ResolveURIRequestMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveURIRequestMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveURIRequestMethod "setUri" o = URIRequestSetUriMethodInfo
    ResolveURIRequestMethod l o = O.MethodResolutionFailed l o

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

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

-- VVV Prop "uri"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just False)

getURIRequestUri :: (MonadIO m, IsURIRequest o) => o -> m T.Text
getURIRequestUri obj = liftIO $ checkUnexpectedNothing "getURIRequestUri" $ getObjectPropertyString obj "uri"

setURIRequestUri :: (MonadIO m, IsURIRequest o) => o -> T.Text -> m ()
setURIRequestUri obj val = liftIO $ setObjectPropertyString obj "uri" (Just val)

constructURIRequestUri :: (IsURIRequest o) => T.Text -> IO (GValueConstruct o)
constructURIRequestUri val = constructObjectPropertyString "uri" (Just val)

data URIRequestUriPropertyInfo
instance AttrInfo URIRequestUriPropertyInfo where
    type AttrAllowedOps URIRequestUriPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint URIRequestUriPropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint URIRequestUriPropertyInfo = IsURIRequest
    type AttrGetType URIRequestUriPropertyInfo = T.Text
    type AttrLabel URIRequestUriPropertyInfo = "uri"
    type AttrOrigin URIRequestUriPropertyInfo = URIRequest
    attrGet _ = getURIRequestUri
    attrSet _ = setURIRequestUri
    attrConstruct _ = constructURIRequestUri
    attrClear _ = undefined

instance O.HasAttributeList URIRequest
type instance O.AttributeList URIRequest = URIRequestAttributeList
type URIRequestAttributeList = ('[ '("uri", URIRequestUriPropertyInfo)] :: [(Symbol, *)])

uRIRequestUri :: AttrLabelProxy "uri"
uRIRequestUri = AttrLabelProxy

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

-- method URIRequest::new
-- method type : Constructor
-- Args : [Arg {argCName = "uri", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an URI", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2", name = "URIRequest"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_uri_request_new" webkit_uri_request_new :: 
    CString ->                              -- uri : TBasicType TUTF8
    IO (Ptr URIRequest)

{- |
Creates a new 'GI.WebKit2.Objects.URIRequest.URIRequest' for the given URI.
-}
uRIRequestNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@uri@/: an URI -}
    -> m URIRequest
    {- ^ __Returns:__ a new 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
uRIRequestNew uri = liftIO $ do
    uri' <- textToCString uri
    result <- webkit_uri_request_new uri'
    checkUnexpectedReturnNULL "uRIRequestNew" result
    result' <- (wrapObject URIRequest) result
    freeMem uri'
    return result'

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

foreign import ccall "webkit_uri_request_get_http_headers" webkit_uri_request_get_http_headers :: 
    Ptr URIRequest ->                       -- request : TInterface (Name {namespace = "WebKit2", name = "URIRequest"})
    IO (Ptr Soup.MessageHeaders.MessageHeaders)

{- |
Get the HTTP headers of a 'GI.WebKit2.Objects.URIRequest.URIRequest' as a 'GI.Soup.Structs.MessageHeaders.MessageHeaders'.
-}
uRIRequestGetHttpHeaders ::
    (B.CallStack.HasCallStack, MonadIO m, IsURIRequest a) =>
    a
    {- ^ /@request@/: a 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
    -> m Soup.MessageHeaders.MessageHeaders
    {- ^ __Returns:__ a 'GI.Soup.Structs.MessageHeaders.MessageHeaders' with the HTTP headers of /@request@/
   or 'Nothing' if /@request@/ is not an HTTP request. -}
uRIRequestGetHttpHeaders request = liftIO $ do
    request' <- unsafeManagedPtrCastPtr request
    result <- webkit_uri_request_get_http_headers request'
    checkUnexpectedReturnNULL "uRIRequestGetHttpHeaders" result
    result' <- (newBoxed Soup.MessageHeaders.MessageHeaders) result
    touchManagedPtr request
    return result'

data URIRequestGetHttpHeadersMethodInfo
instance (signature ~ (m Soup.MessageHeaders.MessageHeaders), MonadIO m, IsURIRequest a) => O.MethodInfo URIRequestGetHttpHeadersMethodInfo a signature where
    overloadedMethod _ = uRIRequestGetHttpHeaders

-- method URIRequest::get_http_method
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "request", argType = TInterface (Name {namespace = "WebKit2", name = "URIRequest"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitURIRequest", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_uri_request_get_http_method" webkit_uri_request_get_http_method :: 
    Ptr URIRequest ->                       -- request : TInterface (Name {namespace = "WebKit2", name = "URIRequest"})
    IO CString

{- |
Get the HTTP method of the 'GI.WebKit2.Objects.URIRequest.URIRequest'.

@since 2.12
-}
uRIRequestGetHttpMethod ::
    (B.CallStack.HasCallStack, MonadIO m, IsURIRequest a) =>
    a
    {- ^ /@request@/: a 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
    -> m T.Text
    {- ^ __Returns:__ the HTTP method of the 'GI.WebKit2.Objects.URIRequest.URIRequest' or 'Nothing' if /@request@/ is not
   an HTTP request. -}
uRIRequestGetHttpMethod request = liftIO $ do
    request' <- unsafeManagedPtrCastPtr request
    result <- webkit_uri_request_get_http_method request'
    checkUnexpectedReturnNULL "uRIRequestGetHttpMethod" result
    result' <- cstringToText result
    touchManagedPtr request
    return result'

data URIRequestGetHttpMethodMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsURIRequest a) => O.MethodInfo URIRequestGetHttpMethodMethodInfo a signature where
    overloadedMethod _ = uRIRequestGetHttpMethod

-- method URIRequest::get_uri
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "request", argType = TInterface (Name {namespace = "WebKit2", name = "URIRequest"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitURIRequest", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_uri_request_get_uri" webkit_uri_request_get_uri :: 
    Ptr URIRequest ->                       -- request : TInterface (Name {namespace = "WebKit2", name = "URIRequest"})
    IO CString

{- |
/No description available in the introspection data./
-}
uRIRequestGetUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsURIRequest a) =>
    a
    {- ^ /@request@/: a 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
    -> m T.Text
    {- ^ __Returns:__ the uri of the 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
uRIRequestGetUri request = liftIO $ do
    request' <- unsafeManagedPtrCastPtr request
    result <- webkit_uri_request_get_uri request'
    checkUnexpectedReturnNULL "uRIRequestGetUri" result
    result' <- cstringToText result
    touchManagedPtr request
    return result'

data URIRequestGetUriMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsURIRequest a) => O.MethodInfo URIRequestGetUriMethodInfo a signature where
    overloadedMethod _ = uRIRequestGetUri

-- method URIRequest::set_uri
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "request", argType = TInterface (Name {namespace = "WebKit2", name = "URIRequest"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitURIRequest", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "uri", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an URI", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_uri_request_set_uri" webkit_uri_request_set_uri :: 
    Ptr URIRequest ->                       -- request : TInterface (Name {namespace = "WebKit2", name = "URIRequest"})
    CString ->                              -- uri : TBasicType TUTF8
    IO ()

{- |
Set the URI of /@request@/
-}
uRIRequestSetUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsURIRequest a) =>
    a
    {- ^ /@request@/: a 'GI.WebKit2.Objects.URIRequest.URIRequest' -}
    -> T.Text
    {- ^ /@uri@/: an URI -}
    -> m ()
uRIRequestSetUri request uri = liftIO $ do
    request' <- unsafeManagedPtrCastPtr request
    uri' <- textToCString uri
    webkit_uri_request_set_uri request' uri'
    touchManagedPtr request
    freeMem uri'
    return ()

data URIRequestSetUriMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, IsURIRequest a) => O.MethodInfo URIRequestSetUriMethodInfo a signature where
    overloadedMethod _ = uRIRequestSetUri