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

    'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' is an opaque data structure and can only be accessed
    using the following functions.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Gio.Structs.SettingsSchemaKey
        (

    -- * Exported types
        SettingsSchemaKey(..)                   ,
        noSettingsSchemaKey                     ,

     -- * Methods
    -- ** getDefaultValue #method:getDefaultValue#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetDefaultValueMethodInfo,
    #endif
        settingsSchemaKeyGetDefaultValue        ,

    -- ** getDescription #method:getDescription#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetDescriptionMethodInfo,
    #endif
        settingsSchemaKeyGetDescription         ,

    -- ** getName #method:getName#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetNameMethodInfo      ,
    #endif
        settingsSchemaKeyGetName                ,

    -- ** getRange #method:getRange#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetRangeMethodInfo     ,
    #endif
        settingsSchemaKeyGetRange               ,

    -- ** getSummary #method:getSummary#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetSummaryMethodInfo   ,
    #endif
        settingsSchemaKeyGetSummary             ,

    -- ** getValueType #method:getValueType#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyGetValueTypeMethodInfo ,
    #endif
        settingsSchemaKeyGetValueType           ,

    -- ** rangeCheck #method:rangeCheck#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyRangeCheckMethodInfo   ,
    #endif
        settingsSchemaKeyRangeCheck             ,

    -- ** ref #method:ref#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyRefMethodInfo          ,
    #endif
        settingsSchemaKeyRef                    ,

    -- ** unref #method:unref#

    #if ENABLE_OVERLOADING
        SettingsSchemaKeyUnrefMethodInfo        ,
    #endif
        settingsSchemaKeyUnref                  ,

        ) 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.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.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.GLib.Structs.VariantType as GLib.VariantType

    -- | Memory-managed wrapper type.
    newtype SettingsSchemaKey = SettingsSchemaKey (ManagedPtr SettingsSchemaKey)
    foreign import ccall "g_settings_schema_key_get_type" c_g_settings_schema_key_get_type ::
        IO GType

    instance BoxedObject SettingsSchemaKey where
        boxedType _ = c_g_settings_schema_key_get_type

    -- | A convenience alias for `Nothing` :: `Maybe` `SettingsSchemaKey`.
    noSettingsSchemaKey :: Maybe SettingsSchemaKey
    noSettingsSchemaKey = Nothing

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList SettingsSchemaKey
    type instance O.AttributeList SettingsSchemaKey = SettingsSchemaKeyAttributeList
    type SettingsSchemaKeyAttributeList = ('[ ] :: [(Symbol, *)])
    #endif

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

    foreign import ccall "g_settings_schema_key_get_default_value" g_settings_schema_key_get_default_value ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO (Ptr GVariant)

    {- |
    Gets the default value for /@key@/.

    Note that this is the default value according to the schema.  System
    administrator defaults and lockdown are not visible via this API.

    /Since: 2.40/
    -}
    settingsSchemaKeyGetDefaultValue ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m GVariant
        {- ^ __Returns:__ the default value for the key -}
    settingsSchemaKeyGetDefaultValue key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_default_value key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetDefaultValue" result
        result' <- B.GVariant.wrapGVariantPtr result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetDefaultValueMethodInfo
    instance (signature ~ (m GVariant), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetDefaultValueMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetDefaultValue

    #endif

    -- method SettingsSchemaKey::get_description
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "key", argType = TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettingsSchemaKey", 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 "g_settings_schema_key_get_description" g_settings_schema_key_get_description ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO CString

    {- |
    Gets the description for /@key@/.

    If no description has been provided in the schema for /@key@/, returns
    'Nothing'.

    The description can be one sentence to several paragraphs in length.
    Paragraphs are delimited with a double newline.  Descriptions can be
    translated and the value returned from this function is is the
    current locale.

    This function is slow.  The summary and description information for
    the schemas is not stored in the compiled schema database so this
    function has to parse all of the source XML files in the schema
    directory.

    /Since: 2.34/
    -}
    settingsSchemaKeyGetDescription ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m T.Text
        {- ^ __Returns:__ the description for /@key@/, or 'Nothing' -}
    settingsSchemaKeyGetDescription key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_description key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetDescription" result
        result' <- cstringToText result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetDescriptionMethodInfo
    instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetDescriptionMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetDescription

    #endif

    -- method SettingsSchemaKey::get_name
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "key", argType = TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettingsSchemaKey", 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 "g_settings_schema_key_get_name" g_settings_schema_key_get_name ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO CString

    {- |
    Gets the name of /@key@/.

    /Since: 2.44/
    -}
    settingsSchemaKeyGetName ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m T.Text
        {- ^ __Returns:__ the name of /@key@/. -}
    settingsSchemaKeyGetName key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_name key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetName" result
        result' <- cstringToText result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetNameMethodInfo
    instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetNameMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetName

    #endif

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

    foreign import ccall "g_settings_schema_key_get_range" g_settings_schema_key_get_range ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO (Ptr GVariant)

    {- |
    Queries the range of a key.

    This function will return a 'GVariant' that fully describes the range
    of values that are valid for /@key@/.

    The type of 'GVariant' returned is @(sv)@. The string describes
    the type of range restriction in effect. The type and meaning of
    the value contained in the variant depends on the string.

    If the string is @\'type\'@ then the variant contains an empty array.
    The element type of that empty array is the expected type of value
    and all values of that type are valid.

    If the string is @\'enum\'@ then the variant contains an array
    enumerating the possible values. Each item in the array is
    a possible valid value and no other values are valid.

    If the string is @\'flags\'@ then the variant contains an array. Each
    item in the array is a value that may appear zero or one times in an
    array to be used as the value for this key. For example, if the
    variant contained the array @[\'x\', \'y\']@ then the valid values for
    the key would be @[]@, @[\'x\']@, @[\'y\']@, @[\'x\', \'y\']@ and
    @[\'y\', \'x\']@.

    Finally, if the string is @\'range\'@ then the variant contains a pair
    of like-typed values -- the minimum and maximum permissible values
    for this key.

    This information should not be used by normal programs.  It is
    considered to be a hint for introspection purposes.  Normal programs
    should already know what is permitted by their own schema.  The
    format may change in any way in the future -- but particularly, new
    forms may be added to the possibilities described above.

    You should free the returned value with 'GI.GLib.Structs.Variant.variantUnref' when it is
    no longer needed.

    /Since: 2.40/
    -}
    settingsSchemaKeyGetRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m GVariant
        {- ^ __Returns:__ a 'GVariant' describing the range -}
    settingsSchemaKeyGetRange key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_range key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetRange" result
        result' <- B.GVariant.wrapGVariantPtr result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetRangeMethodInfo
    instance (signature ~ (m GVariant), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetRangeMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetRange

    #endif

    -- method SettingsSchemaKey::get_summary
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "key", argType = TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettingsSchemaKey", 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 "g_settings_schema_key_get_summary" g_settings_schema_key_get_summary ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO CString

    {- |
    Gets the summary for /@key@/.

    If no summary has been provided in the schema for /@key@/, returns
    'Nothing'.

    The summary is a short description of the purpose of the key; usually
    one short sentence.  Summaries can be translated and the value
    returned from this function is is the current locale.

    This function is slow.  The summary and description information for
    the schemas is not stored in the compiled schema database so this
    function has to parse all of the source XML files in the schema
    directory.

    /Since: 2.34/
    -}
    settingsSchemaKeyGetSummary ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m T.Text
        {- ^ __Returns:__ the summary for /@key@/, or 'Nothing' -}
    settingsSchemaKeyGetSummary key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_summary key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetSummary" result
        result' <- cstringToText result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetSummaryMethodInfo
    instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetSummaryMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetSummary

    #endif

    -- method SettingsSchemaKey::get_value_type
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "key", argType = TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettingsSchemaKey", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "GLib", name = "VariantType"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_settings_schema_key_get_value_type" g_settings_schema_key_get_value_type ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO (Ptr GLib.VariantType.VariantType)

    {- |
    Gets the 'GI.GLib.Structs.VariantType.VariantType' of /@key@/.

    /Since: 2.40/
    -}
    settingsSchemaKeyGetValueType ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m GLib.VariantType.VariantType
        {- ^ __Returns:__ the type of /@key@/ -}
    settingsSchemaKeyGetValueType key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_get_value_type key'
        checkUnexpectedReturnNULL "settingsSchemaKeyGetValueType" result
        result' <- (newBoxed GLib.VariantType.VariantType) result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyGetValueTypeMethodInfo
    instance (signature ~ (m GLib.VariantType.VariantType), MonadIO m) => O.MethodInfo SettingsSchemaKeyGetValueTypeMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyGetValueType

    #endif

    -- method SettingsSchemaKey::range_check
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "key", argType = TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GSettingsSchemaKey", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the value to check", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TBoolean)
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_settings_schema_key_range_check" g_settings_schema_key_range_check ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        Ptr GVariant ->                         -- value : TVariant
        IO CInt

    {- |
    Checks if the given /@value@/ is of the correct type and within the
    permitted range for /@key@/.

    It is a programmer error if /@value@/ is not of the correct type -- you
    must check for this first.

    /Since: 2.40/
    -}
    settingsSchemaKeyRangeCheck ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> GVariant
        {- ^ /@value@/: the value to check -}
        -> m Bool
        {- ^ __Returns:__ 'True' if /@value@/ is valid for /@key@/ -}
    settingsSchemaKeyRangeCheck key value = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        value' <- unsafeManagedPtrGetPtr value
        result <- g_settings_schema_key_range_check key' value'
        let result' = (/= 0) result
        touchManagedPtr key
        touchManagedPtr value
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyRangeCheckMethodInfo
    instance (signature ~ (GVariant -> m Bool), MonadIO m) => O.MethodInfo SettingsSchemaKeyRangeCheckMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyRangeCheck

    #endif

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

    foreign import ccall "g_settings_schema_key_ref" g_settings_schema_key_ref ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO (Ptr SettingsSchemaKey)

    {- |
    Increase the reference count of /@key@/, returning a new reference.

    /Since: 2.40/
    -}
    settingsSchemaKeyRef ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m SettingsSchemaKey
        {- ^ __Returns:__ a new reference to /@key@/ -}
    settingsSchemaKeyRef key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        result <- g_settings_schema_key_ref key'
        checkUnexpectedReturnNULL "settingsSchemaKeyRef" result
        result' <- (wrapBoxed SettingsSchemaKey) result
        touchManagedPtr key
        return result'

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyRefMethodInfo
    instance (signature ~ (m SettingsSchemaKey), MonadIO m) => O.MethodInfo SettingsSchemaKeyRefMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyRef

    #endif

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

    foreign import ccall "g_settings_schema_key_unref" g_settings_schema_key_unref ::
        Ptr SettingsSchemaKey ->                -- key : TInterface (Name {namespace = "Gio", name = "SettingsSchemaKey"})
        IO ()

    {- |
    Decrease the reference count of /@key@/, possibly freeing it.

    /Since: 2.40/
    -}
    settingsSchemaKeyUnref ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        SettingsSchemaKey
        {- ^ /@key@/: a 'GI.Gio.Structs.SettingsSchemaKey.SettingsSchemaKey' -}
        -> m ()
    settingsSchemaKeyUnref key = liftIO $ do
        key' <- unsafeManagedPtrGetPtr key
        g_settings_schema_key_unref key'
        touchManagedPtr key
        return ()

    #if ENABLE_OVERLOADING
    data SettingsSchemaKeyUnrefMethodInfo
    instance (signature ~ (m ()), MonadIO m) => O.MethodInfo SettingsSchemaKeyUnrefMethodInfo SettingsSchemaKey signature where
        overloadedMethod _ = settingsSchemaKeyUnref

    #endif

    #if ENABLE_OVERLOADING
    type family ResolveSettingsSchemaKeyMethod (t :: Symbol) (o :: *) :: * where
        ResolveSettingsSchemaKeyMethod "rangeCheck" o = SettingsSchemaKeyRangeCheckMethodInfo
        ResolveSettingsSchemaKeyMethod "ref" o = SettingsSchemaKeyRefMethodInfo
        ResolveSettingsSchemaKeyMethod "unref" o = SettingsSchemaKeyUnrefMethodInfo
        ResolveSettingsSchemaKeyMethod "getDefaultValue" o = SettingsSchemaKeyGetDefaultValueMethodInfo
        ResolveSettingsSchemaKeyMethod "getDescription" o = SettingsSchemaKeyGetDescriptionMethodInfo
        ResolveSettingsSchemaKeyMethod "getName" o = SettingsSchemaKeyGetNameMethodInfo
        ResolveSettingsSchemaKeyMethod "getRange" o = SettingsSchemaKeyGetRangeMethodInfo
        ResolveSettingsSchemaKeyMethod "getSummary" o = SettingsSchemaKeyGetSummaryMethodInfo
        ResolveSettingsSchemaKeyMethod "getValueType" o = SettingsSchemaKeyGetValueTypeMethodInfo
        ResolveSettingsSchemaKeyMethod l o = O.MethodResolutionFailed l o

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

    #if MIN_VERSION_base(4,9,0)
    instance (info ~ ResolveSettingsSchemaKeyMethod t SettingsSchemaKey, O.MethodInfo info SettingsSchemaKey p) => O.IsLabel t (SettingsSchemaKey -> 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

    #endif