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

    Acts as a lightweight registry for possible valid file attributes.
    The registry stores Key-Value pair formats as @/GFileAttributeInfos/@.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Gio.Structs.FileAttributeInfoList
        (

    -- * Exported types
        FileAttributeInfoList(..)               ,
        newZeroFileAttributeInfoList            ,
        noFileAttributeInfoList                 ,

     -- * Methods
    -- ** add #method:add#

    #if ENABLE_OVERLOADING
        FileAttributeInfoListAddMethodInfo      ,
    #endif
        fileAttributeInfoListAdd                ,

    -- ** dup #method:dup#

    #if ENABLE_OVERLOADING
        FileAttributeInfoListDupMethodInfo      ,
    #endif
        fileAttributeInfoListDup                ,

    -- ** lookup #method:lookup#

    #if ENABLE_OVERLOADING
        FileAttributeInfoListLookupMethodInfo   ,
    #endif
        fileAttributeInfoListLookup             ,

    -- ** new #method:new#

        fileAttributeInfoListNew                ,

    -- ** ref #method:ref#

    #if ENABLE_OVERLOADING
        FileAttributeInfoListRefMethodInfo      ,
    #endif
        fileAttributeInfoListRef                ,

    -- ** unref #method:unref#

    #if ENABLE_OVERLOADING
        FileAttributeInfoListUnrefMethodInfo    ,
    #endif
        fileAttributeInfoListUnref              ,

     -- * Properties
    -- ** infos #attr:infos#
    {- | an array of @/GFileAttributeInfos/@.
    -}
        clearFileAttributeInfoListInfos         ,
    #if ENABLE_OVERLOADING
        fileAttributeInfoList_infos             ,
    #endif
        getFileAttributeInfoListInfos           ,
        setFileAttributeInfoListInfos           ,

    -- ** nInfos #attr:nInfos#
    {- | the number of values in the array.
    -}
    #if ENABLE_OVERLOADING
        fileAttributeInfoList_nInfos            ,
    #endif
        getFileAttributeInfoListNInfos          ,
        setFileAttributeInfoListNInfos          ,

        ) 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 {-# SOURCE #-} qualified GI.Gio.Enums as Gio.Enums
    import {-# SOURCE #-} qualified GI.Gio.Flags as Gio.Flags
    import {-# SOURCE #-} qualified GI.Gio.Structs.FileAttributeInfo as Gio.FileAttributeInfo

    -- | Memory-managed wrapper type.
    newtype FileAttributeInfoList = FileAttributeInfoList (ManagedPtr FileAttributeInfoList)
    foreign import ccall "g_file_attribute_info_list_get_type" c_g_file_attribute_info_list_get_type ::
        IO GType

    instance BoxedObject FileAttributeInfoList where
        boxedType _ = c_g_file_attribute_info_list_get_type

    -- | Construct a `FileAttributeInfoList` struct initialized to zero.
    newZeroFileAttributeInfoList :: MonadIO m => m FileAttributeInfoList
    newZeroFileAttributeInfoList = liftIO $ callocBoxedBytes 16 >>= wrapBoxed FileAttributeInfoList

    instance tag ~ 'AttrSet => Constructible FileAttributeInfoList tag where
        new _ attrs = do
            o <- newZeroFileAttributeInfoList
            GI.Attributes.set o attrs
            return o

    -- | A convenience alias for `Nothing` :: `Maybe` `FileAttributeInfoList`.
    noFileAttributeInfoList :: Maybe FileAttributeInfoList
    noFileAttributeInfoList = Nothing

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

    @
    'Data.GI.Base.Attributes.get' fileAttributeInfoList #infos
    @
    -}
    getFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> m (Maybe Gio.FileAttributeInfo.FileAttributeInfo)
    getFileAttributeInfoListInfos s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gio.FileAttributeInfo.FileAttributeInfo)
        result <- SP.convertIfNonNull val $ \val' -> do
            val'' <- (newPtr Gio.FileAttributeInfo.FileAttributeInfo) val'
            return val''
        return result

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

    @
    'Data.GI.Base.Attributes.set' fileAttributeInfoList [ #infos 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> Ptr Gio.FileAttributeInfo.FileAttributeInfo -> m ()
    setFileAttributeInfoListInfos s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 0) (val :: Ptr Gio.FileAttributeInfo.FileAttributeInfo)

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

    @
    'Data.GI.Base.Attributes.clear' #infos
    @
    -}
    clearFileAttributeInfoListInfos :: MonadIO m => FileAttributeInfoList -> m ()
    clearFileAttributeInfoListInfos s = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr Gio.FileAttributeInfo.FileAttributeInfo)

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListInfosFieldInfo
    instance AttrInfo FileAttributeInfoListInfosFieldInfo where
        type AttrAllowedOps FileAttributeInfoListInfosFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileAttributeInfoListInfosFieldInfo = (~) (Ptr Gio.FileAttributeInfo.FileAttributeInfo)
        type AttrBaseTypeConstraint FileAttributeInfoListInfosFieldInfo = (~) FileAttributeInfoList
        type AttrGetType FileAttributeInfoListInfosFieldInfo = Maybe Gio.FileAttributeInfo.FileAttributeInfo
        type AttrLabel FileAttributeInfoListInfosFieldInfo = "infos"
        type AttrOrigin FileAttributeInfoListInfosFieldInfo = FileAttributeInfoList
        attrGet _ = getFileAttributeInfoListInfos
        attrSet _ = setFileAttributeInfoListInfos
        attrConstruct = undefined
        attrClear _ = clearFileAttributeInfoListInfos

    fileAttributeInfoList_infos :: AttrLabelProxy "infos"
    fileAttributeInfoList_infos = AttrLabelProxy

    #endif

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

    @
    'Data.GI.Base.Attributes.get' fileAttributeInfoList #nInfos
    @
    -}
    getFileAttributeInfoListNInfos :: MonadIO m => FileAttributeInfoList -> m Int32
    getFileAttributeInfoListNInfos s = liftIO $ withManagedPtr s $ \ptr -> do
        val <- peek (ptr `plusPtr` 8) :: IO Int32
        return val

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

    @
    'Data.GI.Base.Attributes.set' fileAttributeInfoList [ #nInfos 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setFileAttributeInfoListNInfos :: MonadIO m => FileAttributeInfoList -> Int32 -> m ()
    setFileAttributeInfoListNInfos s val = liftIO $ withManagedPtr s $ \ptr -> do
        poke (ptr `plusPtr` 8) (val :: Int32)

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListNInfosFieldInfo
    instance AttrInfo FileAttributeInfoListNInfosFieldInfo where
        type AttrAllowedOps FileAttributeInfoListNInfosFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint FileAttributeInfoListNInfosFieldInfo = (~) Int32
        type AttrBaseTypeConstraint FileAttributeInfoListNInfosFieldInfo = (~) FileAttributeInfoList
        type AttrGetType FileAttributeInfoListNInfosFieldInfo = Int32
        type AttrLabel FileAttributeInfoListNInfosFieldInfo = "n_infos"
        type AttrOrigin FileAttributeInfoListNInfosFieldInfo = FileAttributeInfoList
        attrGet _ = getFileAttributeInfoListNInfos
        attrSet _ = setFileAttributeInfoListNInfos
        attrConstruct = undefined
        attrClear _ = undefined

    fileAttributeInfoList_nInfos :: AttrLabelProxy "nInfos"
    fileAttributeInfoList_nInfos = AttrLabelProxy

    #endif

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList FileAttributeInfoList
    type instance O.AttributeList FileAttributeInfoList = FileAttributeInfoListAttributeList
    type FileAttributeInfoListAttributeList = ('[ '("infos", FileAttributeInfoListInfosFieldInfo), '("nInfos", FileAttributeInfoListNInfosFieldInfo)] :: [(Symbol, *)])
    #endif

    -- method FileAttributeInfoList::new
    -- method type : Constructor
    -- Args : []
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_file_attribute_info_list_new" g_file_attribute_info_list_new ::
        IO (Ptr FileAttributeInfoList)

    {- |
    Creates a new file attribute info list.
    -}
    fileAttributeInfoListNew ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m FileAttributeInfoList
        {- ^ __Returns:__ a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -}
    fileAttributeInfoListNew  = liftIO $ do
        result <- g_file_attribute_info_list_new
        checkUnexpectedReturnNULL "fileAttributeInfoListNew" result
        result' <- (wrapBoxed FileAttributeInfoList) result
        return result'

    #if ENABLE_OVERLOADING
    #endif

    -- method FileAttributeInfoList::add
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the attribute to add.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "type", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GFileAttributeType for the attribute.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GFileAttributeInfoFlags for the attribute.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_file_attribute_info_list_add" g_file_attribute_info_list_add ::
        Ptr FileAttributeInfoList ->            -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})
        CString ->                              -- name : TBasicType TUTF8
        CUInt ->                                -- type : TInterface (Name {namespace = "Gio", name = "FileAttributeType"})
        CUInt ->                                -- flags : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoFlags"})
        IO ()

    {- |
    Adds a new attribute with /@name@/ to the /@list@/, setting
    its /@type@/ and /@flags@/.
    -}
    fileAttributeInfoListAdd ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FileAttributeInfoList
        {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -}
        -> T.Text
        {- ^ /@name@/: the name of the attribute to add. -}
        -> Gio.Enums.FileAttributeType
        {- ^ /@type@/: the 'GI.Gio.Enums.FileAttributeType' for the attribute. -}
        -> [Gio.Flags.FileAttributeInfoFlags]
        {- ^ /@flags@/: 'GI.Gio.Flags.FileAttributeInfoFlags' for the attribute. -}
        -> m ()
    fileAttributeInfoListAdd list name type_ flags = liftIO $ do
        list' <- unsafeManagedPtrGetPtr list
        name' <- textToCString name
        let type_' = (fromIntegral . fromEnum) type_
        let flags' = gflagsToWord flags
        g_file_attribute_info_list_add list' name' type_' flags'
        touchManagedPtr list
        freeMem name'
        return ()

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListAddMethodInfo
    instance (signature ~ (T.Text -> Gio.Enums.FileAttributeType -> [Gio.Flags.FileAttributeInfoFlags] -> m ()), MonadIO m) => O.MethodInfo FileAttributeInfoListAddMethodInfo FileAttributeInfoList signature where
        overloadedMethod _ = fileAttributeInfoListAdd

    #endif

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

    foreign import ccall "g_file_attribute_info_list_dup" g_file_attribute_info_list_dup ::
        Ptr FileAttributeInfoList ->            -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})
        IO (Ptr FileAttributeInfoList)

    {- |
    Makes a duplicate of a file attribute info list.
    -}
    fileAttributeInfoListDup ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FileAttributeInfoList
        {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to duplicate. -}
        -> m FileAttributeInfoList
        {- ^ __Returns:__ a copy of the given /@list@/. -}
    fileAttributeInfoListDup list = liftIO $ do
        list' <- unsafeManagedPtrGetPtr list
        result <- g_file_attribute_info_list_dup list'
        checkUnexpectedReturnNULL "fileAttributeInfoListDup" result
        result' <- (wrapBoxed FileAttributeInfoList) result
        touchManagedPtr list
        return result'

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListDupMethodInfo
    instance (signature ~ (m FileAttributeInfoList), MonadIO m) => O.MethodInfo FileAttributeInfoListDupMethodInfo FileAttributeInfoList signature where
        overloadedMethod _ = fileAttributeInfoListDup

    #endif

    -- method FileAttributeInfoList::lookup
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileAttributeInfoList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the attribute to lookup.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "FileAttributeInfo"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_file_attribute_info_list_lookup" g_file_attribute_info_list_lookup ::
        Ptr FileAttributeInfoList ->            -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})
        CString ->                              -- name : TBasicType TUTF8
        IO (Ptr Gio.FileAttributeInfo.FileAttributeInfo)

    {- |
    Gets the file attribute with the name /@name@/ from /@list@/.
    -}
    fileAttributeInfoListLookup ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FileAttributeInfoList
        {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList'. -}
        -> T.Text
        {- ^ /@name@/: the name of the attribute to lookup. -}
        -> m Gio.FileAttributeInfo.FileAttributeInfo
        {- ^ __Returns:__ a 'GI.Gio.Structs.FileAttributeInfo.FileAttributeInfo' for the /@name@/, or 'Nothing' if an
    attribute isn\'t found. -}
    fileAttributeInfoListLookup list name = liftIO $ do
        list' <- unsafeManagedPtrGetPtr list
        name' <- textToCString name
        result <- g_file_attribute_info_list_lookup list' name'
        checkUnexpectedReturnNULL "fileAttributeInfoListLookup" result
        result' <- (newPtr Gio.FileAttributeInfo.FileAttributeInfo) result
        touchManagedPtr list
        freeMem name'
        return result'

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListLookupMethodInfo
    instance (signature ~ (T.Text -> m Gio.FileAttributeInfo.FileAttributeInfo), MonadIO m) => O.MethodInfo FileAttributeInfoListLookupMethodInfo FileAttributeInfoList signature where
        overloadedMethod _ = fileAttributeInfoListLookup

    #endif

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

    foreign import ccall "g_file_attribute_info_list_ref" g_file_attribute_info_list_ref ::
        Ptr FileAttributeInfoList ->            -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})
        IO (Ptr FileAttributeInfoList)

    {- |
    References a file attribute info list.
    -}
    fileAttributeInfoListRef ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FileAttributeInfoList
        {- ^ /@list@/: a 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to reference. -}
        -> m FileAttributeInfoList
        {- ^ __Returns:__ 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' or 'Nothing' on error. -}
    fileAttributeInfoListRef list = liftIO $ do
        list' <- unsafeManagedPtrGetPtr list
        result <- g_file_attribute_info_list_ref list'
        checkUnexpectedReturnNULL "fileAttributeInfoListRef" result
        result' <- (wrapBoxed FileAttributeInfoList) result
        touchManagedPtr list
        return result'

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListRefMethodInfo
    instance (signature ~ (m FileAttributeInfoList), MonadIO m) => O.MethodInfo FileAttributeInfoListRefMethodInfo FileAttributeInfoList signature where
        overloadedMethod _ = fileAttributeInfoListRef

    #endif

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

    foreign import ccall "g_file_attribute_info_list_unref" g_file_attribute_info_list_unref ::
        Ptr FileAttributeInfoList ->            -- list : TInterface (Name {namespace = "Gio", name = "FileAttributeInfoList"})
        IO ()

    {- |
    Removes a reference from the given /@list@/. If the reference count
    falls to zero, the /@list@/ is deleted.
    -}
    fileAttributeInfoListUnref ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FileAttributeInfoList
        {- ^ /@list@/: The 'GI.Gio.Structs.FileAttributeInfoList.FileAttributeInfoList' to unreference. -}
        -> m ()
    fileAttributeInfoListUnref list = liftIO $ do
        list' <- unsafeManagedPtrGetPtr list
        g_file_attribute_info_list_unref list'
        touchManagedPtr list
        return ()

    #if ENABLE_OVERLOADING
    data FileAttributeInfoListUnrefMethodInfo
    instance (signature ~ (m ()), MonadIO m) => O.MethodInfo FileAttributeInfoListUnrefMethodInfo FileAttributeInfoList signature where
        overloadedMethod _ = fileAttributeInfoListUnref

    #endif

    #if ENABLE_OVERLOADING
    type family ResolveFileAttributeInfoListMethod (t :: Symbol) (o :: *) :: * where
        ResolveFileAttributeInfoListMethod "add" o = FileAttributeInfoListAddMethodInfo
        ResolveFileAttributeInfoListMethod "dup" o = FileAttributeInfoListDupMethodInfo
        ResolveFileAttributeInfoListMethod "lookup" o = FileAttributeInfoListLookupMethodInfo
        ResolveFileAttributeInfoListMethod "ref" o = FileAttributeInfoListRefMethodInfo
        ResolveFileAttributeInfoListMethod "unref" o = FileAttributeInfoListUnrefMethodInfo
        ResolveFileAttributeInfoListMethod l o = O.MethodResolutionFailed l o

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

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