    {-# LANGUAGE TypeApplications #-}

    -- | Copyright  : Will Thompson and Iñaki García Etxebarria
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria
    --
    -- Information about a specific attribute.

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

    module GI.Gio.Structs.FileAttributeInfo
        (

    -- * Exported types
        FileAttributeInfo(..)                   ,
        newZeroFileAttributeInfo                ,

     -- * Methods

    #if defined(ENABLE_OVERLOADING)
        ResolveFileAttributeInfoMethod          ,
    #endif

     -- * Properties

    -- ** flags #attr:flags#
    -- | a set of t'GI.Gio.Flags.FileAttributeInfoFlags'.

    #if defined(ENABLE_OVERLOADING)
        fileAttributeInfo_flags                 ,
    #endif
        getFileAttributeInfoFlags               ,
        setFileAttributeInfoFlags               ,

    -- ** name #attr:name#
    -- | the name of the attribute.

        clearFileAttributeInfoName              ,
    #if defined(ENABLE_OVERLOADING)
        fileAttributeInfo_name                  ,
    #endif
        getFileAttributeInfoName                ,
        setFileAttributeInfoName                ,

    -- ** type #attr:type#
    -- | the t'GI.Gio.Enums.FileAttributeType' type of the attribute.

    #if defined(ENABLE_OVERLOADING)
        fileAttributeInfo_type                  ,
    #endif
        getFileAttributeInfoType                ,
        setFileAttributeInfoType                ,

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

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

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

    instance BoxedPtr FileAttributeInfo where
        boxedPtrCopy :: FileAttributeInfo -> IO FileAttributeInfo
    boxedPtrCopy = \FileAttributeInfo
    p -> FileAttributeInfo
    -> (Ptr FileAttributeInfo -> IO FileAttributeInfo)
    -> IO FileAttributeInfo
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    B.ManagedPtr.withManagedPtr FileAttributeInfo
    p (Int -> Ptr FileAttributeInfo -> IO (Ptr FileAttributeInfo)
    forall a. (HasCallStack, CallocPtr a) => Int -> Ptr a -> IO (Ptr a)
    copyBytes Int
    16 (Ptr FileAttributeInfo -> IO (Ptr FileAttributeInfo))
    -> (Ptr FileAttributeInfo -> IO FileAttributeInfo)
    -> Ptr FileAttributeInfo
    -> IO FileAttributeInfo
    forall (m :: * -> *) a b c.
    Monad m =>
    (a -> m b) -> (b -> m c) -> a -> m c
    >=> (ManagedPtr FileAttributeInfo -> FileAttributeInfo)
    -> Ptr FileAttributeInfo -> IO FileAttributeInfo
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    B.ManagedPtr.wrapPtr ManagedPtr FileAttributeInfo -> FileAttributeInfo
    FileAttributeInfo)
        boxedPtrFree :: FileAttributeInfo -> IO ()
    boxedPtrFree = \FileAttributeInfo
    x -> FileAttributeInfo -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    SP.withManagedPtr FileAttributeInfo
    x Ptr FileAttributeInfo -> IO ()
    forall a. Ptr a -> IO ()
    SP.freeMem
    instance CallocPtr FileAttributeInfo where
        boxedPtrCalloc :: IO (Ptr FileAttributeInfo)
    boxedPtrCalloc = Int -> IO (Ptr FileAttributeInfo)
    forall a. Int -> IO (Ptr a)
    callocBytes Int
    16

    -- | Construct a `FileAttributeInfo` struct initialized to zero.
    newZeroFileAttributeInfo :: MonadIO m => m FileAttributeInfo
    newZeroFileAttributeInfo :: forall (m :: * -> *). MonadIO m => m FileAttributeInfo
    newZeroFileAttributeInfo = IO FileAttributeInfo -> m FileAttributeInfo
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FileAttributeInfo -> m FileAttributeInfo)
    -> IO FileAttributeInfo -> m FileAttributeInfo
    forall a b. (a -> b) -> a -> b
    $ IO (Ptr FileAttributeInfo)
    forall a. CallocPtr a => IO (Ptr a)
    boxedPtrCalloc IO (Ptr FileAttributeInfo)
    -> (Ptr FileAttributeInfo -> IO FileAttributeInfo)
    -> IO FileAttributeInfo
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= (ManagedPtr FileAttributeInfo -> FileAttributeInfo)
    -> Ptr FileAttributeInfo -> IO FileAttributeInfo
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr FileAttributeInfo -> FileAttributeInfo
    FileAttributeInfo

    instance tag ~ 'AttrSet => Constructible FileAttributeInfo tag where
        new :: forall (m :: * -> *).
    MonadIO m =>
    (ManagedPtr FileAttributeInfo -> FileAttributeInfo)
    -> [AttrOp FileAttributeInfo tag] -> m FileAttributeInfo
    new ManagedPtr FileAttributeInfo -> FileAttributeInfo
    _ [AttrOp FileAttributeInfo tag]
    attrs = do
            FileAttributeInfo
    o <- m FileAttributeInfo
    forall (m :: * -> *). MonadIO m => m FileAttributeInfo
    newZeroFileAttributeInfo
            FileAttributeInfo -> [AttrOp FileAttributeInfo 'AttrSet] -> m ()
    forall o (m :: * -> *).
    MonadIO m =>
    o -> [AttrOp o 'AttrSet] -> m ()
    GI.Attributes.set FileAttributeInfo
    o [AttrOp FileAttributeInfo tag]
    [AttrOp FileAttributeInfo 'AttrSet]
    attrs
            FileAttributeInfo -> m FileAttributeInfo
    forall a. a -> m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return FileAttributeInfo
    o

    -- | Get the value of the “@name@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' fileAttributeInfo #name
    -- @
    getFileAttributeInfoName :: MonadIO m => FileAttributeInfo -> m (Maybe T.Text)
    getFileAttributeInfoName :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> m (Maybe Text)
    getFileAttributeInfoName FileAttributeInfo
    s = 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
    $ FileAttributeInfo
    -> (Ptr FileAttributeInfo -> IO (Maybe Text)) -> IO (Maybe Text)
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO (Maybe Text)) -> IO (Maybe Text))
    -> (Ptr FileAttributeInfo -> IO (Maybe Text)) -> IO (Maybe Text)
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        CString
    val <- Ptr CString -> IO CString
    forall a. Storable a => Ptr a -> IO a
    peek (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CString
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) :: IO CString
        Maybe Text
    result <- CString -> (CString -> IO Text) -> IO (Maybe Text)
    forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
    SP.convertIfNonNull CString
    val ((CString -> IO Text) -> IO (Maybe Text))
    -> (CString -> IO Text) -> IO (Maybe Text)
    forall a b. (a -> b) -> a -> b
    $ \CString
    val' -> do
            Text
    val'' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    val'
            Text -> IO Text
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    val''
        Maybe Text -> IO (Maybe Text)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Maybe Text
    result

    -- | Set the value of the “@name@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' fileAttributeInfo [ #name 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setFileAttributeInfoName :: MonadIO m => FileAttributeInfo -> CString -> m ()
    setFileAttributeInfoName :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> CString -> m ()
    setFileAttributeInfoName FileAttributeInfo
    s CString
    val = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO ()) -> IO ())
    -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        Ptr CString -> CString -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CString
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) (CString
    val :: CString)

    -- | Set the value of the “@name@” 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' #name
    -- @
    clearFileAttributeInfoName :: MonadIO m => FileAttributeInfo -> m ()
    clearFileAttributeInfoName :: forall (m :: * -> *). MonadIO m => FileAttributeInfo -> m ()
    clearFileAttributeInfoName FileAttributeInfo
    s = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO ()) -> IO ())
    -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        Ptr CString -> CString -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CString
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) (CString
    forall a. Ptr a
    FP.nullPtr :: CString)

    #if defined(ENABLE_OVERLOADING)
    data FileAttributeInfoNameFieldInfo
    instance AttrInfo FileAttributeInfoNameFieldInfo where
        type AttrBaseTypeConstraint FileAttributeInfoNameFieldInfo = (~) FileAttributeInfo
        type AttrAllowedOps FileAttributeInfoNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileAttributeInfoNameFieldInfo = (~) CString
        type AttrTransferTypeConstraint FileAttributeInfoNameFieldInfo = (~)CString
        type AttrTransferType FileAttributeInfoNameFieldInfo = CString
        type AttrGetType FileAttributeInfoNameFieldInfo = Maybe T.Text
        type AttrLabel FileAttributeInfoNameFieldInfo = "name"
        type AttrOrigin FileAttributeInfoNameFieldInfo = FileAttributeInfo
        attrGet = getFileAttributeInfoName
        attrSet = setFileAttributeInfoName
        attrConstruct = undefined
        attrClear = clearFileAttributeInfoName
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Structs.FileAttributeInfo.name"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Structs-FileAttributeInfo.html#g:attr:name"
            })

    fileAttributeInfo_name :: AttrLabelProxy "name"
    fileAttributeInfo_name = AttrLabelProxy

    #endif

    -- | Get the value of the “@type@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' fileAttributeInfo #type
    -- @
    getFileAttributeInfoType :: MonadIO m => FileAttributeInfo -> m Gio.Enums.FileAttributeType
    getFileAttributeInfoType :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> m FileAttributeType
    getFileAttributeInfoType FileAttributeInfo
    s = IO FileAttributeType -> m FileAttributeType
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FileAttributeType -> m FileAttributeType)
    -> IO FileAttributeType -> m FileAttributeType
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo
    -> (Ptr FileAttributeInfo -> IO FileAttributeType)
    -> IO FileAttributeType
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO FileAttributeType)
     -> IO FileAttributeType)
    -> (Ptr FileAttributeInfo -> IO FileAttributeType)
    -> IO FileAttributeType
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        CUInt
    val <- Ptr CUInt -> IO CUInt
    forall a. Storable a => Ptr a -> IO a
    peek (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CUInt
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    8) :: IO CUInt
        let val' :: FileAttributeType
    val' = (Int -> FileAttributeType
    forall a. Enum a => Int -> a
    toEnum (Int -> FileAttributeType)
    -> (CUInt -> Int) -> CUInt -> FileAttributeType
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    val
        FileAttributeType -> IO FileAttributeType
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return FileAttributeType
    val'

    -- | Set the value of the “@type@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' fileAttributeInfo [ #type 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setFileAttributeInfoType :: MonadIO m => FileAttributeInfo -> Gio.Enums.FileAttributeType -> m ()
    setFileAttributeInfoType :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> FileAttributeType -> m ()
    setFileAttributeInfoType FileAttributeInfo
    s FileAttributeType
    val = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO ()) -> IO ())
    -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        let val' :: CUInt
    val' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (FileAttributeType -> Int) -> FileAttributeType -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . FileAttributeType -> Int
    forall a. Enum a => a -> Int
    fromEnum) FileAttributeType
    val
        Ptr CUInt -> CUInt -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CUInt
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    8) (CUInt
    val' :: CUInt)

    #if defined(ENABLE_OVERLOADING)
    data FileAttributeInfoTypeFieldInfo
    instance AttrInfo FileAttributeInfoTypeFieldInfo where
        type AttrBaseTypeConstraint FileAttributeInfoTypeFieldInfo = (~) FileAttributeInfo
        type AttrAllowedOps FileAttributeInfoTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint FileAttributeInfoTypeFieldInfo = (~) Gio.Enums.FileAttributeType
        type AttrTransferTypeConstraint FileAttributeInfoTypeFieldInfo = (~)Gio.Enums.FileAttributeType
        type AttrTransferType FileAttributeInfoTypeFieldInfo = Gio.Enums.FileAttributeType
        type AttrGetType FileAttributeInfoTypeFieldInfo = Gio.Enums.FileAttributeType
        type AttrLabel FileAttributeInfoTypeFieldInfo = "type"
        type AttrOrigin FileAttributeInfoTypeFieldInfo = FileAttributeInfo
        attrGet = getFileAttributeInfoType
        attrSet = setFileAttributeInfoType
        attrConstruct = undefined
        attrClear = undefined
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Structs.FileAttributeInfo.type"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Structs-FileAttributeInfo.html#g:attr:type"
            })

    fileAttributeInfo_type :: AttrLabelProxy "type"
    fileAttributeInfo_type = AttrLabelProxy

    #endif

    -- | Get the value of the “@flags@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' fileAttributeInfo #flags
    -- @
    getFileAttributeInfoFlags :: MonadIO m => FileAttributeInfo -> m [Gio.Flags.FileAttributeInfoFlags]
    getFileAttributeInfoFlags :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> m [FileAttributeInfoFlags]
    getFileAttributeInfoFlags FileAttributeInfo
    s = IO [FileAttributeInfoFlags] -> m [FileAttributeInfoFlags]
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [FileAttributeInfoFlags] -> m [FileAttributeInfoFlags])
    -> IO [FileAttributeInfoFlags] -> m [FileAttributeInfoFlags]
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo
    -> (Ptr FileAttributeInfo -> IO [FileAttributeInfoFlags])
    -> IO [FileAttributeInfoFlags]
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO [FileAttributeInfoFlags])
     -> IO [FileAttributeInfoFlags])
    -> (Ptr FileAttributeInfo -> IO [FileAttributeInfoFlags])
    -> IO [FileAttributeInfoFlags]
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        CUInt
    val <- Ptr CUInt -> IO CUInt
    forall a. Storable a => Ptr a -> IO a
    peek (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CUInt
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    12) :: IO CUInt
        let val' :: [FileAttributeInfoFlags]
    val' = CUInt -> [FileAttributeInfoFlags]
    forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
    wordToGFlags CUInt
    val
        [FileAttributeInfoFlags] -> IO [FileAttributeInfoFlags]
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return [FileAttributeInfoFlags]
    val'

    -- | Set the value of the “@flags@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' fileAttributeInfo [ #flags 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setFileAttributeInfoFlags :: MonadIO m => FileAttributeInfo -> [Gio.Flags.FileAttributeInfoFlags] -> m ()
    setFileAttributeInfoFlags :: forall (m :: * -> *).
    MonadIO m =>
    FileAttributeInfo -> [FileAttributeInfoFlags] -> m ()
    setFileAttributeInfoFlags FileAttributeInfo
    s [FileAttributeInfoFlags]
    val = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ FileAttributeInfo -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileAttributeInfo
    s ((Ptr FileAttributeInfo -> IO ()) -> IO ())
    -> (Ptr FileAttributeInfo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileAttributeInfo
    ptr -> do
        let val' :: CUInt
    val' = [FileAttributeInfoFlags] -> CUInt
    forall b a. (Num b, IsGFlag a) => [a] -> b
    gflagsToWord [FileAttributeInfoFlags]
    val
        Ptr CUInt -> CUInt -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr FileAttributeInfo
    ptr Ptr FileAttributeInfo -> Int -> Ptr CUInt
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    12) (CUInt
    val' :: CUInt)

    #if defined(ENABLE_OVERLOADING)
    data FileAttributeInfoFlagsFieldInfo
    instance AttrInfo FileAttributeInfoFlagsFieldInfo where
        type AttrBaseTypeConstraint FileAttributeInfoFlagsFieldInfo = (~) FileAttributeInfo
        type AttrAllowedOps FileAttributeInfoFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint FileAttributeInfoFlagsFieldInfo = (~) [Gio.Flags.FileAttributeInfoFlags]
        type AttrTransferTypeConstraint FileAttributeInfoFlagsFieldInfo = (~)[Gio.Flags.FileAttributeInfoFlags]
        type AttrTransferType FileAttributeInfoFlagsFieldInfo = [Gio.Flags.FileAttributeInfoFlags]
        type AttrGetType FileAttributeInfoFlagsFieldInfo = [Gio.Flags.FileAttributeInfoFlags]
        type AttrLabel FileAttributeInfoFlagsFieldInfo = "flags"
        type AttrOrigin FileAttributeInfoFlagsFieldInfo = FileAttributeInfo
        attrGet = getFileAttributeInfoFlags
        attrSet = setFileAttributeInfoFlags
        attrConstruct = undefined
        attrClear = undefined
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gio.Structs.FileAttributeInfo.flags"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gio-2.0.32/docs/GI-Gio-Structs-FileAttributeInfo.html#g:attr:flags"
            })

    fileAttributeInfo_flags :: AttrLabelProxy "flags"
    fileAttributeInfo_flags = AttrLabelProxy

    #endif

    #if defined(ENABLE_OVERLOADING)
    instance O.HasAttributeList FileAttributeInfo
    type instance O.AttributeList FileAttributeInfo = FileAttributeInfoAttributeList
    type FileAttributeInfoAttributeList = ('[ '("name", FileAttributeInfoNameFieldInfo), '("type", FileAttributeInfoTypeFieldInfo), '("flags", FileAttributeInfoFlagsFieldInfo)] :: [(Symbol, DK.Type)])
    #endif

    #if defined(ENABLE_OVERLOADING)
    type family ResolveFileAttributeInfoMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
        ResolveFileAttributeInfoMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveFileAttributeInfoMethod t FileAttributeInfo, O.OverloadedMethod info FileAttributeInfo p) => OL.IsLabel t (FileAttributeInfo -> 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 ~ ResolveFileAttributeInfoMethod t FileAttributeInfo, O.OverloadedMethod info FileAttributeInfo p, R.HasField t FileAttributeInfo p) => R.HasField t FileAttributeInfo p where
        getField = O.overloadedMethod @info

    #endif

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

    #endif