{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- @GParamSpec@ encapsulates the metadata required to specify parameters, such as @GObject@ properties.
-- 
-- == Parameter names
-- 
-- A property name consists of one or more segments consisting of ASCII letters
-- and digits, separated by either the @-@ or @_@ character. The first
-- character of a property name must be a letter. These are the same rules as
-- for signal naming (see @/GObject.signal_new/@).
-- 
-- When creating and looking up a @GParamSpec@, either separator can be
-- used, but they cannot be mixed. Using @-@ is considerably more
-- efficient, and is the ‘canonical form’. Using @_@ is discouraged.

#if !defined(__HADDOCK_VERSION__)
#define ENABLE_OVERLOADING
#endif

module GI.GObject.Objects.ParamSpec
    ( 

-- * Exported types
    ParamSpec(..)                           ,
    IsParamSpec                             ,
    toParamSpec                             ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [sink]("GI.GObject.Objects.ParamSpec#g:method:sink"), [stealQdata]("GI.GObject.Objects.ParamSpec#g:method:stealQdata").
-- 
-- ==== Getters
-- [getBlurb]("GI.GObject.Objects.ParamSpec#g:method:getBlurb"), [getDefaultValue]("GI.GObject.Objects.ParamSpec#g:method:getDefaultValue"), [getName]("GI.GObject.Objects.ParamSpec#g:method:getName"), [getNameQuark]("GI.GObject.Objects.ParamSpec#g:method:getNameQuark"), [getNick]("GI.GObject.Objects.ParamSpec#g:method:getNick"), [getQdata]("GI.GObject.Objects.ParamSpec#g:method:getQdata"), [getRedirectTarget]("GI.GObject.Objects.ParamSpec#g:method:getRedirectTarget").
-- 
-- ==== Setters
-- [setQdata]("GI.GObject.Objects.ParamSpec#g:method:setQdata").

#if defined(ENABLE_OVERLOADING)
    ResolveParamSpecMethod                  ,
#endif

-- ** getBlurb #method:getBlurb#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetBlurbMethodInfo             ,
#endif
    paramSpecGetBlurb                       ,


-- ** getDefaultValue #method:getDefaultValue#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetDefaultValueMethodInfo      ,
#endif
    paramSpecGetDefaultValue                ,


-- ** getName #method:getName#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetNameMethodInfo              ,
#endif
    paramSpecGetName                        ,


-- ** getNameQuark #method:getNameQuark#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetNameQuarkMethodInfo         ,
#endif
    paramSpecGetNameQuark                   ,


-- ** getNick #method:getNick#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetNickMethodInfo              ,
#endif
    paramSpecGetNick                        ,


-- ** getQdata #method:getQdata#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetQdataMethodInfo             ,
#endif
    paramSpecGetQdata                       ,


-- ** getRedirectTarget #method:getRedirectTarget#

#if defined(ENABLE_OVERLOADING)
    ParamSpecGetRedirectTargetMethodInfo    ,
#endif
    paramSpecGetRedirectTarget              ,


-- ** isValidName #method:isValidName#

    paramSpecIsValidName                    ,


-- ** setQdata #method:setQdata#

#if defined(ENABLE_OVERLOADING)
    ParamSpecSetQdataMethodInfo             ,
#endif
    paramSpecSetQdata                       ,


-- ** sink #method:sink#

#if defined(ENABLE_OVERLOADING)
    ParamSpecSinkMethodInfo                 ,
#endif
    paramSpecSink                           ,


-- ** stealQdata #method:stealQdata#

#if defined(ENABLE_OVERLOADING)
    ParamSpecStealQdataMethodInfo           ,
#endif
    paramSpecStealQdata                     ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
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 GHC.Records as R
import qualified Data.Word as DW
import qualified Data.Int as DI
import qualified System.Posix.Types as SPT
import qualified Foreign.C.Types as FCT

-- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
#if MIN_VERSION_base(4,18,0)

#else

#endif

-- | Memory-managed wrapper type.
newtype ParamSpec = ParamSpec (SP.ManagedPtr ParamSpec)
    deriving (ParamSpec -> ParamSpec -> Bool
(ParamSpec -> ParamSpec -> Bool)
-> (ParamSpec -> ParamSpec -> Bool) -> Eq ParamSpec
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ParamSpec -> ParamSpec -> Bool
== :: ParamSpec -> ParamSpec -> Bool
$c/= :: ParamSpec -> ParamSpec -> Bool
/= :: ParamSpec -> ParamSpec -> Bool
Eq)

instance SP.ManagedPtrNewtype ParamSpec where
    toManagedPtr :: ParamSpec -> ManagedPtr ParamSpec
toManagedPtr (ParamSpec ManagedPtr ParamSpec
p) = ManagedPtr ParamSpec
p

foreign import ccall "haskell_gi_pspec_type_init_ParamSpec"
    c_haskell_gi_pspec_type_init_ParamSpec :: IO B.Types.GType

instance B.Types.TypedObject ParamSpec where
    glibType :: IO GType
glibType = IO GType
c_haskell_gi_pspec_type_init_ParamSpec

-- | Type class for types which can be safely cast to `ParamSpec`, for instance with `toParamSpec`.
class (SP.BoxedPtr o, SP.TypedObject o, O.IsDescendantOf ParamSpec o) => IsParamSpec o
instance (SP.BoxedPtr o, SP.TypedObject o, O.IsDescendantOf ParamSpec o) => IsParamSpec o

instance O.HasParentTypes ParamSpec
type instance O.ParentTypes ParamSpec = '[]

-- | Cast to `ParamSpec`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toParamSpec :: (MIO.MonadIO m, IsParamSpec o) => o -> m ParamSpec
toParamSpec :: forall (m :: * -> *) o.
(MonadIO m, IsParamSpec o) =>
o -> m ParamSpec
toParamSpec = IO ParamSpec -> m ParamSpec
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO ParamSpec -> m ParamSpec)
-> (o -> IO ParamSpec) -> o -> m ParamSpec
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr ParamSpec -> ParamSpec) -> o -> IO ParamSpec
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr ParamSpec -> ParamSpec
ParamSpec

foreign import ccall "g_value_get_param" gv_get_g_value_get_param ::
    FP.Ptr B.GValue.GValue -> IO (FP.Ptr ParamSpec)

foreign import ccall "g_value_set_param" gv_set_g_value_set_param ::
    FP.Ptr B.GValue.GValue -> FP.Ptr ParamSpec -> IO ()

-- | Convert 'ParamSpec' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe ParamSpec) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_haskell_gi_pspec_type_init_ParamSpec
    gvalueSet_ :: Ptr GValue -> Maybe ParamSpec -> IO ()
gvalueSet_ Ptr GValue
gv Maybe ParamSpec
P.Nothing = Ptr GValue -> Ptr ParamSpec -> IO ()
gv_set_g_value_set_param Ptr GValue
gv (Ptr ParamSpec
forall a. Ptr a
FP.nullPtr :: FP.Ptr ParamSpec)
    gvalueSet_ Ptr GValue
gv (P.Just ParamSpec
obj) = ParamSpec -> (Ptr ParamSpec -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ParamSpec
obj (Ptr GValue -> Ptr ParamSpec -> IO ()
gv_set_g_value_set_param Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe ParamSpec)
gvalueGet_ Ptr GValue
gv = do
        Ptr ParamSpec
ptr <- Ptr GValue -> IO (Ptr ParamSpec)
gv_get_g_value_get_param Ptr GValue
gv :: IO (FP.Ptr ParamSpec)
        if Ptr ParamSpec
ptr Ptr ParamSpec -> Ptr ParamSpec -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr ParamSpec
forall a. Ptr a
FP.nullPtr
        then ParamSpec -> Maybe ParamSpec
forall a. a -> Maybe a
P.Just (ParamSpec -> Maybe ParamSpec)
-> IO ParamSpec -> IO (Maybe ParamSpec)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr ParamSpec -> ParamSpec)
-> Ptr ParamSpec -> IO ParamSpec
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.newPtr ManagedPtr ParamSpec -> ParamSpec
ParamSpec Ptr ParamSpec
ptr
        else Maybe ParamSpec -> IO (Maybe ParamSpec)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ParamSpec
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveParamSpecMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveParamSpecMethod "sink" o = ParamSpecSinkMethodInfo
    ResolveParamSpecMethod "stealQdata" o = ParamSpecStealQdataMethodInfo
    ResolveParamSpecMethod "getBlurb" o = ParamSpecGetBlurbMethodInfo
    ResolveParamSpecMethod "getDefaultValue" o = ParamSpecGetDefaultValueMethodInfo
    ResolveParamSpecMethod "getName" o = ParamSpecGetNameMethodInfo
    ResolveParamSpecMethod "getNameQuark" o = ParamSpecGetNameQuarkMethodInfo
    ResolveParamSpecMethod "getNick" o = ParamSpecGetNickMethodInfo
    ResolveParamSpecMethod "getQdata" o = ParamSpecGetQdataMethodInfo
    ResolveParamSpecMethod "getRedirectTarget" o = ParamSpecGetRedirectTargetMethodInfo
    ResolveParamSpecMethod "setQdata" o = ParamSpecSetQdataMethodInfo
    ResolveParamSpecMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveParamSpecMethod t ParamSpec, O.OverloadedMethod info ParamSpec p) => OL.IsLabel t (ParamSpec -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveParamSpecMethod t ParamSpec, O.OverloadedMethod info ParamSpec p, R.HasField t ParamSpec p) => R.HasField t ParamSpec p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveParamSpecMethod t ParamSpec, O.OverloadedMethodInfo info ParamSpec) => OL.IsLabel t (O.MethodProxy info ParamSpec) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

foreign import ccall "g_param_spec_ref_sink" _ParamSpec_copy_g_param_spec_ref_sink :: Ptr a -> IO (Ptr a)

foreign import ccall "g_param_spec_unref" _ParamSpec_free_g_param_spec_unref :: Ptr a -> IO ()

instance BoxedPtr ParamSpec where
    boxedPtrCopy :: ParamSpec -> IO ParamSpec
boxedPtrCopy = \ParamSpec
p -> ParamSpec -> (Ptr ParamSpec -> IO ParamSpec) -> IO ParamSpec
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ParamSpec
p (Ptr ParamSpec -> IO (Ptr ParamSpec)
forall a. Ptr a -> IO (Ptr a)
_ParamSpec_copy_g_param_spec_ref_sink (Ptr ParamSpec -> IO (Ptr ParamSpec))
-> (Ptr ParamSpec -> IO ParamSpec) -> Ptr ParamSpec -> IO ParamSpec
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (ManagedPtr ParamSpec -> ParamSpec)
-> Ptr ParamSpec -> IO ParamSpec
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.wrapPtr ManagedPtr ParamSpec -> ParamSpec
ParamSpec)
    boxedPtrFree :: ParamSpec -> IO ()
boxedPtrFree = \ParamSpec
p -> ParamSpec -> (Ptr ParamSpec -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ParamSpec
p Ptr ParamSpec -> IO ()
forall a. Ptr a -> IO ()
_ParamSpec_free_g_param_spec_unref


-- method ParamSpec::get_blurb
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "pspec"
--           , argType = TParamSpec
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a valid #GParamSpec"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_param_spec_get_blurb" g_param_spec_get_blurb :: 
    Ptr GParamSpec ->                       -- pspec : TParamSpec
    IO CString

-- | Get the short description of a t'GI.GObject.Objects.ParamSpec.ParamSpec'.
paramSpecGetBlurb ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GParamSpec
    -- ^ /@pspec@/: a valid t'GI.GObject.Objects.ParamSpec.ParamSpec'
    -> m (Maybe T.Text)
    -- ^ __Returns:__ the short description of /@pspec@/.
paramSpecGetBlurb :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
GParamSpec -> m (Maybe Text)
paramSpecGetBlurb GParamSpec
pspec = IO (Maybe Text) -> m (Maybe Text)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe Text) -> m (Maybe Text))
-> IO (Maybe Text) -> m (Maybe Text)
forall a b. (a -> b) -> a -> b
$ do
    Ptr GParamSpec
pspec' <- GParamSpec -> IO (Ptr GParamSpec)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr GParamSpec
pspec
    CString
result <- Ptr GParamSpec -> IO CString
g_param_spec_get_blurb Ptr GParamSpec
pspec'
    Maybe Text
maybeResult <- CString -> (CString -> IO Text) -> IO (Maybe Text)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull CString
result ((CString -> IO Text) -> IO (Maybe Text))
-> (CString -> IO Text) -> IO (Maybe Text)
forall a b. (a -> b) -> a -> b
$ \CString
result' -> do
        Text
result'' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
result'
        Text -> IO Text
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
result''
    GParamSpec -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr GParamSpec
pspec
    Maybe Text -> IO (Maybe Text)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Text
maybeResult

#if defined(ENABLE_OVERLOADING)
data ParamSpecGetBlurbMethodInfo
instance (signature ~ (m (Maybe T.Text)), MonadIO m) => O.OverloadedMethod ParamSpecGetBlurbMethodInfo GParamSpec signature where
    overloadedMethod = paramSpecGetBlurb

instance O.OverloadedMethodInfo ParamSpecGetBlurbMethodInfo GParamSpec where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GObject.Objects.ParamSpec.paramSpecGetBlurb",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gobject-2.0.31/docs/GI-GObject-Objects-ParamSpec.html#v:paramSpecGetBlurb"
        })


#endif

-- method ParamSpec::get_default_value
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "pspec"
--           , argType = TParamSpec
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GParamSpec" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just TGValue
-- throws : False
-- Skip return : False

foreign import ccall "g_param_spec_get_default_value" g_param_spec_get_default_value :: 
    Ptr GParamSpec ->                       -- pspec : TParamSpec
    IO (Ptr GValue)

-- | Gets the default value of /@pspec@/ as a pointer to a t'GI.GObject.Structs.Value.Value'.
-- 
-- The t'GI.GObject.Structs.Value.Value' will remain valid for the life of /@pspec@/.
-- 
-- /Since: 2.38/
paramSpecGetDefaultValue ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GParamSpec
    -- ^ /@pspec@/: a t'GI.GObject.Objects.ParamSpec.ParamSpec'
    -> m GValue
    -- ^ __Returns:__ a pointer to a t'GI.GObject.Structs.Value.Value' which must not be modified
paramSpecGetDefaultValue :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
GParamSpec -> m GValue
paramSpecGetDefaultValue GParamSpec
pspec = IO GValue -> m GValue
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO GValue -> m GValue) -> IO GValue -> m GValue
forall a b. (a -> b) -> a -> b
$ do
    Ptr GParamSpec
pspec' <- GParamSpec -> IO (Ptr GParamSpec)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr GParamSpec
pspec
    Ptr GValue
result <- Ptr GParamSpec -> IO (Ptr GValue)
g_param_spec_get_default_value Ptr GParamSpec
pspec'
    Text -> Ptr GValue -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"paramSpecGetDefaultValue" Ptr GValue
result
    GValue
result' <- Ptr GValue -> IO GValue
B.GValue.newGValueFromPtr Ptr GValue
result
    GParamSpec -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr GParamSpec
pspec
    GValue -> IO GValue
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return GValue
result'

#if defined(ENABLE_OVERLOADING)
data ParamSpecGetDefaultValueMethodInfo
instance (signature ~ (m GValue), MonadIO m) => O.OverloadedMethod ParamSpecGetDefaultValueMethodInfo GParamSpec signature where
    overloadedMethod = paramSpecGetDefaultValue

instance O.OverloadedMethodInfo ParamSpecGetDefaultValueMethodInfo GParamSpec where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GObject.Objects.ParamSpec.paramSpecGetDefaultValue",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gobject-2.0.31/docs/GI-GObject-Objects-ParamSpec.html#v:paramSpecGetDefaultValue"
        })


#endif

-- method ParamSpec::get_name
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "pspec"
--           , argType = TParamSpec
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a valid #GParamSpec"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_param_spec_get_name" g_param_spec_get_name :: 
    Ptr GParamSpec ->                       -- pspec : TParamSpec
    IO CString

-- | Get the name of a t'GI.GObject.Objects.ParamSpec.ParamSpec'.
-- 
-- The name is always an \"interned\" string (as per 'GI.GLib.Functions.internString').
-- This allows for pointer-value comparisons.
paramSpecGetName ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GParamSpec
    -- ^ /@pspec@/: a valid t'GI.GObject.Objects.ParamSpec.ParamSpec'
    -> m T.Text
    -- ^ __Returns:__ the name of /@pspec@/.
paramSpecGetName :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
GParamSpec -> m Text
paramSpecGetName GParamSpec
pspec = IO Text -> m Text
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Text -> m Text) -> IO Text -> m Text
forall a b. (a -> b) -> a -> b
$ do
    Ptr GParamSpec
pspec' <- GParamSpec -> IO (Ptr GParamSpec)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr GParamSpec
pspec
    CString
result <- Ptr GParamSpec -> IO CString
g_param_spec_get_name Ptr GParamSpec
pspec'
    Text -> CString -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"paramSpecGetName" CString
result
    Text
result' <- HasCallStack => CString -> IO Text
CString -> IO Text
cstringToText CString
result
    GParamSpec -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr GParamSpec
pspec
    Text -> IO Text
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
result'

#if defined(ENABLE_OVERLOADING)
data ParamSpecGetNameMethodInfo
instance (signature ~ (m T.Text), MonadIO m) => O.OverloadedMethod ParamSpecGetNameMethodInfo GParamSpec signature where
    overloadedMethod = paramSpecGetName

instance O.OverloadedMethodInfo ParamSpecGetNameMethodInfo GParamSpec where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GObject.Objects.ParamSpec.paramSpecGetName",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gobject-2.0.31/docs/GI-GObject-Objects-ParamSpec.html#v:paramSpecGetName"
        })


#endif

-- method ParamSpec::get_name_quark
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "pspec"
--           , argType = TParamSpec
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GParamSpec" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TUInt32)
-- throws : False
-- Skip return : False

foreign import ccall "g_param_spec_get_name_quark" g_param_spec_get_name_quark :: 
    Ptr GParamSpec ->                       -- pspec : TParamSpec
    IO Word32

-- | Gets the GQuark for the name.
-- 
-- /Since: 2.46/
paramSpecGetNameQuark ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GParamSpec
    -- ^ /@pspec@/: a t'GI.GObject.Objects.ParamSpec.ParamSpec'
    -> m Word32
    -- ^ __Returns:__ the GQuark for /@pspec@/->name.
paramSpecGetNameQuark :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
GParamSpec -> m Word32
paramSpecGetNameQuark GParamSpec
pspec = IO Word32 -> m Word32
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ do
    Ptr GParamSpec
pspec' <- GParamSpec -> IO (Ptr GParamSpec)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr GParamSpec
pspec
    Word32
result <- Ptr GParamSpec -> IO Word32
g_param_spec_get_name_quark Ptr GParamSpec
pspec'
    GParamSpec -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr GParamSpec
pspec
    Word32 -> IO Word32
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Word32
result

#if defined(ENABLE_OVERLOADING)
data ParamSpecGetNameQuarkMethodInfo
instance (signature ~ (m Word32), MonadIO m) => O.OverloadedMethod ParamSpecGetNameQuarkMethodInfo GParamSpec signature where
    overloadedMethod = paramSpecGetNameQuark

instance O.OverloadedMethodInfo ParamSpecGetNameQuarkMethodInfo GParamSpec where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GObject.Objects.ParamSpec.paramSpecGetNameQuark",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gobject-2.0.31/docs/GI-GObject-Objects-ParamSpec.html#v:paramSpecGetNameQuark"
        })


#endif

-- method ParamSpec::get_nick
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "pspec"
--           , argType = TParamSpec
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a valid #GParamSpec"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , argCallbackUserData = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_param_spec_get_nick" g_param_spec_get_nick :: 
    Ptr GParamSpec ->                       -- pspec : TParamSpec