{- |
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.WebKit2WebExtension.Structs.ConsoleMessage
    ( 

-- * Exported types
    ConsoleMessage(..)                      ,
    noConsoleMessage                        ,


 -- * Methods
-- ** copy #method:copy#
    ConsoleMessageCopyMethodInfo            ,
    consoleMessageCopy                      ,


-- ** free #method:free#
    ConsoleMessageFreeMethodInfo            ,
    consoleMessageFree                      ,


-- ** getLevel #method:getLevel#
    ConsoleMessageGetLevelMethodInfo        ,
    consoleMessageGetLevel                  ,


-- ** getLine #method:getLine#
    ConsoleMessageGetLineMethodInfo         ,
    consoleMessageGetLine                   ,


-- ** getSource #method:getSource#
    ConsoleMessageGetSourceMethodInfo       ,
    consoleMessageGetSource                 ,


-- ** getSourceId #method:getSourceId#
    ConsoleMessageGetSourceIdMethodInfo     ,
    consoleMessageGetSourceId               ,


-- ** getText #method:getText#
    ConsoleMessageGetTextMethodInfo         ,
    consoleMessageGetText                   ,




    ) 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 {-# SOURCE #-} qualified GI.WebKit2WebExtension.Enums as WebKit2WebExtension.Enums

newtype ConsoleMessage = ConsoleMessage (ManagedPtr ConsoleMessage)
foreign import ccall "webkit_console_message_get_type" c_webkit_console_message_get_type :: 
    IO GType

instance BoxedObject ConsoleMessage where
    boxedType _ = c_webkit_console_message_get_type

noConsoleMessage :: Maybe ConsoleMessage
noConsoleMessage = Nothing


instance O.HasAttributeList ConsoleMessage
type instance O.AttributeList ConsoleMessage = ConsoleMessageAttributeList
type ConsoleMessageAttributeList = ('[ ] :: [(Symbol, *)])

-- method ConsoleMessage::copy
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_console_message_copy" webkit_console_message_copy :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO (Ptr ConsoleMessage)

{- |
Make a copy of /@consoleMessage@/.

@since 2.12
-}
consoleMessageCopy ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m ConsoleMessage
    {- ^ __Returns:__ A copy of passed in 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
consoleMessageCopy consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_copy consoleMessage'
    checkUnexpectedReturnNULL "consoleMessageCopy" result
    result' <- (wrapBoxed ConsoleMessage) result
    touchManagedPtr consoleMessage
    return result'

data ConsoleMessageCopyMethodInfo
instance (signature ~ (m ConsoleMessage), MonadIO m) => O.MethodInfo ConsoleMessageCopyMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageCopy

-- method ConsoleMessage::free
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_console_message_free" webkit_console_message_free :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO ()

{- |
Free the 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageFree ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m ()
consoleMessageFree consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    webkit_console_message_free consoleMessage'
    touchManagedPtr consoleMessage
    return ()

data ConsoleMessageFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo ConsoleMessageFreeMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageFree

-- method ConsoleMessage::get_level
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessageLevel"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_console_message_get_level" webkit_console_message_get_level :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO CUInt

{- |
Gets the log level of a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageGetLevel ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m WebKit2WebExtension.Enums.ConsoleMessageLevel
    {- ^ __Returns:__ a 'GI.WebKit2WebExtension.Enums.ConsoleMessageLevel' indicating the log level of /@consoleMessage@/ -}
consoleMessageGetLevel consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_get_level consoleMessage'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr consoleMessage
    return result'

data ConsoleMessageGetLevelMethodInfo
instance (signature ~ (m WebKit2WebExtension.Enums.ConsoleMessageLevel), MonadIO m) => O.MethodInfo ConsoleMessageGetLevelMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageGetLevel

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

foreign import ccall "webkit_console_message_get_line" webkit_console_message_get_line :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO Word32

{- |
Gets the line number of a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageGetLine ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m Word32
    {- ^ __Returns:__ the line number of /@consoleMessage@/ -}
consoleMessageGetLine consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_get_line consoleMessage'
    touchManagedPtr consoleMessage
    return result

data ConsoleMessageGetLineMethodInfo
instance (signature ~ (m Word32), MonadIO m) => O.MethodInfo ConsoleMessageGetLineMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageGetLine

-- method ConsoleMessage::get_source
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessageSource"}))
-- throws : False
-- Skip return : False

foreign import ccall "webkit_console_message_get_source" webkit_console_message_get_source :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO CUInt

{- |
Gets the source of a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageGetSource ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m WebKit2WebExtension.Enums.ConsoleMessageSource
    {- ^ __Returns:__ a 'GI.WebKit2WebExtension.Enums.ConsoleMessageSource' indicating the source of /@consoleMessage@/ -}
consoleMessageGetSource consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_get_source consoleMessage'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr consoleMessage
    return result'

data ConsoleMessageGetSourceMethodInfo
instance (signature ~ (m WebKit2WebExtension.Enums.ConsoleMessageSource), MonadIO m) => O.MethodInfo ConsoleMessageGetSourceMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageGetSource

-- method ConsoleMessage::get_source_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", 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_console_message_get_source_id" webkit_console_message_get_source_id :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO CString

{- |
Gets the source identifier of a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageGetSourceId ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m T.Text
    {- ^ __Returns:__ the source identifier of /@consoleMessage@/ -}
consoleMessageGetSourceId consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_get_source_id consoleMessage'
    checkUnexpectedReturnNULL "consoleMessageGetSourceId" result
    result' <- cstringToText result
    touchManagedPtr consoleMessage
    return result'

data ConsoleMessageGetSourceIdMethodInfo
instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo ConsoleMessageGetSourceIdMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageGetSourceId

-- method ConsoleMessage::get_text
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "console_message", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitConsoleMessage", 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_console_message_get_text" webkit_console_message_get_text :: 
    Ptr ConsoleMessage ->                   -- console_message : TInterface (Name {namespace = "WebKit2WebExtension", name = "ConsoleMessage"})
    IO CString

{- |
Gets the text message of a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage'

@since 2.12
-}
consoleMessageGetText ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ConsoleMessage
    {- ^ /@consoleMessage@/: a 'GI.WebKit2WebExtension.Structs.ConsoleMessage.ConsoleMessage' -}
    -> m T.Text
    {- ^ __Returns:__ the text message of /@consoleMessage@/ -}
consoleMessageGetText consoleMessage = liftIO $ do
    consoleMessage' <- unsafeManagedPtrGetPtr consoleMessage
    result <- webkit_console_message_get_text consoleMessage'
    checkUnexpectedReturnNULL "consoleMessageGetText" result
    result' <- cstringToText result
    touchManagedPtr consoleMessage
    return result'

data ConsoleMessageGetTextMethodInfo
instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo ConsoleMessageGetTextMethodInfo ConsoleMessage signature where
    overloadedMethod _ = consoleMessageGetText

type family ResolveConsoleMessageMethod (t :: Symbol) (o :: *) :: * where
    ResolveConsoleMessageMethod "copy" o = ConsoleMessageCopyMethodInfo
    ResolveConsoleMessageMethod "free" o = ConsoleMessageFreeMethodInfo
    ResolveConsoleMessageMethod "getLevel" o = ConsoleMessageGetLevelMethodInfo
    ResolveConsoleMessageMethod "getLine" o = ConsoleMessageGetLineMethodInfo
    ResolveConsoleMessageMethod "getSource" o = ConsoleMessageGetSourceMethodInfo
    ResolveConsoleMessageMethod "getSourceId" o = ConsoleMessageGetSourceIdMethodInfo
    ResolveConsoleMessageMethod "getText" o = ConsoleMessageGetTextMethodInfo
    ResolveConsoleMessageMethod l o = O.MethodResolutionFailed l o

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

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