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

/No description available in the introspection data./
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.WebKit2.Objects.URIRequest
    (

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


 -- * Methods
-- ** getHttpHeaders #method:getHttpHeaders#

#if ENABLE_OVERLOADING
    URIRequestGetHttpHeadersMethodInfo      ,
#endif
    uRIRequestGetHttpHeaders                ,


-- ** getHttpMethod #method:getHttpMethod#

#if ENABLE_OVERLOADING
    URIRequestGetHttpMethodMethodInfo       ,
#endif
    uRIRequestGetHttpMethod                 ,


-- ** getUri #method:getUri#

#if ENABLE_OVERLOADING
    URIRequestGetUriMethodInfo              ,
#endif
    uRIRequestGetUri                        ,


-- ** new #method:new#

    uRIRequestNew                           ,


-- ** setUri #method:setUri#

#if ENABLE_OVERLOADING
    URIRequestSetUriMethodInfo              ,
#endif
    uRIRequestSetUri                        ,




 -- * Properties
-- ** uri #attr:uri#
{- | The URI to which the request will be made.
-}
#if ENABLE_OVERLOADING
    URIRequestUriPropertyInfo               ,
#endif
    constructURIRequestUri                  ,
    getURIRequestUri                        ,
    setURIRequestUri                        ,
#if ENABLE_OVERLOADING
    uRIRequestUri                           ,
#endif




    ) 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.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
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 GHC.OverloadedLabels as OL

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Soup.Structs.MessageHeaders as Soup.MessageHeaders

-- | Memory-managed wrapper type.
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


-- | Type class for types which can be safely cast to `URIRequest`, for instance with `toURIRequest`.
class (GObject o, O.IsDescendantOf URIRequest o) => IsURIRequest o
instance (GObject o, O.IsDescendantOf URIRequest o) => IsURIRequest o

instance O.HasParentTypes URIRequest
type instance O.ParentTypes URIRequest = '[GObject.Object.Object]

-- | Cast to `URIRequest`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toURIRequest :: (MonadIO m, IsURIRequest o) => o -> m URIRequest
toURIRequest = liftIO . unsafeCastTo URIRequest

-- | A convenience alias for `Nothing` :: `Maybe` `URIRequest`.
noURIRequest :: Maybe URIRequest
noURIRequest = Nothing

#if ENABLE_OVERLOADING
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 "getv" o = GObject.Object.ObjectGetvMethodInfo
    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 "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) => OL.IsLabel t (URIRequest -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif

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

{- |
Get the value of the “@uri@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' uRIRequest #uri
@
-}
getURIRequestUri :: (MonadIO m, IsURIRequest o) => o -> m T.Text
getURIRequestUri obj = liftIO $ checkUnexpectedNothing "getURIRequestUri" $ B.Properties.getObjectPropertyString obj "uri"

{- |
Set the value of the “@uri@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' uRIRequest [ #uri 'Data.GI.Base.Attributes.:=' value ]
@
-}
setURIRequestUri :: (MonadIO m, IsURIRequest o) => o -> T.Text -> m ()
setURIRequestUri obj val = liftIO $ B.Properties.setObjectPropertyString obj "uri" (Just val)

{- |
Construct a `GValueConstruct` with valid value for the “@uri@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructURIRequestUri :: (IsURIRequest o) => T.Text -> IO (GValueConstruct o)
constructURIRequestUri val = B.Properties.constructObjectPropertyString "uri" (Just val)

#if ENABLE_OVERLOADING
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
#endif

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

#if ENABLE_OVERLOADING
uRIRequestUri :: AttrLabelProxy "uri"
uRIRequestUri = AttrLabelProxy

#endif

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

#endif

-- 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'

#if ENABLE_OVERLOADING
#endif

-- 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 (Maybe 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'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newBoxed Soup.MessageHeaders.MessageHeaders) result'
        return result''
    touchManagedPtr request
    return maybeResult

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

#endif

-- 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'

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

#endif

-- 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'

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

#endif

-- 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 ()

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

#endif