    {-# LANGUAGE TypeApplications #-}

    -- | Copyright  : Will Thompson and Iñaki García Etxebarria
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria
    --
    -- A t'GI.Gtk.Structs.FileFilterInfo.FileFilterInfo'-struct is used to pass information about the
    -- tested file to 'GI.Gtk.Objects.FileFilter.fileFilterFilter'.

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

    module GI.Gtk.Structs.FileFilterInfo
        (

    -- * Exported types
        FileFilterInfo(..)                      ,
        newZeroFileFilterInfo                   ,

     -- * Methods

    #if defined(ENABLE_OVERLOADING)
        ResolveFileFilterInfoMethod             ,
    #endif

     -- * Properties

    -- ** contains #attr:contains#
    -- | Flags indicating which of the following fields need
    --   are filled

    #if defined(ENABLE_OVERLOADING)
        fileFilterInfo_contains                 ,
    #endif
        getFileFilterInfoContains               ,
        setFileFilterInfoContains               ,

    -- ** displayName #attr:displayName#
    -- | the string that will be used to display the file
    --   in the file chooser

        clearFileFilterInfoDisplayName          ,
    #if defined(ENABLE_OVERLOADING)
        fileFilterInfo_displayName              ,
    #endif
        getFileFilterInfoDisplayName            ,
        setFileFilterInfoDisplayName            ,

    -- ** filename #attr:filename#
    -- | the filename of the file being tested

        clearFileFilterInfoFilename             ,
    #if defined(ENABLE_OVERLOADING)
        fileFilterInfo_filename                 ,
    #endif
        getFileFilterInfoFilename               ,
        setFileFilterInfoFilename               ,

    -- ** mimeType #attr:mimeType#
    -- | the mime type of the file

        clearFileFilterInfoMimeType             ,
    #if defined(ENABLE_OVERLOADING)
        fileFilterInfo_mimeType                 ,
    #endif
        getFileFilterInfoMimeType               ,
        setFileFilterInfoMimeType               ,

    -- ** uri #attr:uri#
    -- | the URI for the file being tested

        clearFileFilterInfoUri                  ,
    #if defined(ENABLE_OVERLOADING)
        fileFilterInfo_uri                      ,
    #endif
        getFileFilterInfoUri                    ,
        setFileFilterInfoUri                    ,

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

    #else
    import {-# SOURCE #-} qualified GI.Gtk.Flags as Gtk.Flags

    #endif

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

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

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

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

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

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

    -- | Set the value of the “@contains@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' fileFilterInfo [ #contains 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setFileFilterInfoContains :: MonadIO m => FileFilterInfo -> [Gtk.Flags.FileFilterFlags] -> m ()
    setFileFilterInfoContains :: forall (m :: * -> *).
    MonadIO m =>
    FileFilterInfo -> [FileFilterFlags] -> m ()
    setFileFilterInfoContains FileFilterInfo
    s [FileFilterFlags]
    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
    $ FileFilterInfo -> (Ptr FileFilterInfo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr FileFilterInfo
    s ((Ptr FileFilterInfo -> IO ()) -> IO ())
    -> (Ptr FileFilterInfo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr FileFilterInfo
    ptr -> do
        let val' :: CUInt
    val' = [FileFilterFlags] -> CUInt
    forall b a. (Num b, IsGFlag a) => [a] -> b
    gflagsToWord [FileFilterFlags]
    val
        Ptr CUInt -> CUInt -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr FileFilterInfo
    ptr Ptr FileFilterInfo -> Int -> Ptr CUInt
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) (CUInt
    val' :: CUInt)

    #if defined(ENABLE_OVERLOADING)
    data FileFilterInfoContainsFieldInfo
    instance AttrInfo FileFilterInfoContainsFieldInfo where
        type AttrBaseTypeConstraint FileFilterInfoContainsFieldInfo = (~) FileFilterInfo
        type AttrAllowedOps FileFilterInfoContainsFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint FileFilterInfoContainsFieldInfo = (~) [Gtk.Flags.FileFilterFlags]
        type AttrTransferTypeConstraint FileFilterInfoContainsFieldInfo = (~)[Gtk.Flags.FileFilterFlags]
        type AttrTransferType FileFilterInfoContainsFieldInfo = [Gtk.Flags.FileFilterFlags]
        type AttrGetType FileFilterInfoContainsFieldInfo = [Gtk.Flags.FileFilterFlags]
        type AttrLabel FileFilterInfoContainsFieldInfo = "contains"
        type AttrOrigin FileFilterInfoContainsFieldInfo = FileFilterInfo
        attrGet = getFileFilterInfoContains
        attrSet = setFileFilterInfoContains
        attrConstruct = undefined
        attrClear = undefined
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gtk.Structs.FileFilterInfo.contains"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtk-3.0.43/docs/GI-Gtk-Structs-FileFilterInfo.html#g:attr:contains"
            })

    fileFilterInfo_contains :: AttrLabelProxy "contains"
    fileFilterInfo_contains = AttrLabelProxy

    #endif

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

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

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

    #if defined(ENABLE_OVERLOADING)
    data FileFilterInfoFilenameFieldInfo
    instance AttrInfo FileFilterInfoFilenameFieldInfo where
        type AttrBaseTypeConstraint FileFilterInfoFilenameFieldInfo = (~) FileFilterInfo
        type AttrAllowedOps FileFilterInfoFilenameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileFilterInfoFilenameFieldInfo = (~) CString
        type AttrTransferTypeConstraint FileFilterInfoFilenameFieldInfo = (~)CString
        type AttrTransferType FileFilterInfoFilenameFieldInfo = CString
        type AttrGetType FileFilterInfoFilenameFieldInfo = Maybe T.Text
        type AttrLabel FileFilterInfoFilenameFieldInfo = "filename"
        type AttrOrigin FileFilterInfoFilenameFieldInfo = FileFilterInfo
        attrGet = getFileFilterInfoFilename
        attrSet = setFileFilterInfoFilename
        attrConstruct = undefined
        attrClear = clearFileFilterInfoFilename
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gtk.Structs.FileFilterInfo.filename"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtk-3.0.43/docs/GI-Gtk-Structs-FileFilterInfo.html#g:attr:filename"
            })

    fileFilterInfo_filename :: AttrLabelProxy "filename"
    fileFilterInfo_filename = AttrLabelProxy

    #endif

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

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

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

    #if defined(ENABLE_OVERLOADING)
    data FileFilterInfoUriFieldInfo
    instance AttrInfo FileFilterInfoUriFieldInfo where
        type AttrBaseTypeConstraint FileFilterInfoUriFieldInfo = (~) FileFilterInfo
        type AttrAllowedOps FileFilterInfoUriFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileFilterInfoUriFieldInfo = (~) CString
        type AttrTransferTypeConstraint FileFilterInfoUriFieldInfo = (~)CString
        type AttrTransferType FileFilterInfoUriFieldInfo = CString
        type AttrGetType FileFilterInfoUriFieldInfo = Maybe T.Text
        type AttrLabel FileFilterInfoUriFieldInfo = "uri"
        type AttrOrigin FileFilterInfoUriFieldInfo = FileFilterInfo
        attrGet = getFileFilterInfoUri
        attrSet = setFileFilterInfoUri
        attrConstruct = undefined
        attrClear = clearFileFilterInfoUri
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gtk.Structs.FileFilterInfo.uri"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtk-3.0.43/docs/GI-Gtk-Structs-FileFilterInfo.html#g:attr:uri"
            })

    fileFilterInfo_uri :: AttrLabelProxy "uri"
    fileFilterInfo_uri = AttrLabelProxy

    #endif

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

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

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

    #if defined(ENABLE_OVERLOADING)
    data FileFilterInfoDisplayNameFieldInfo
    instance AttrInfo FileFilterInfoDisplayNameFieldInfo where
        type AttrBaseTypeConstraint FileFilterInfoDisplayNameFieldInfo = (~) FileFilterInfo
        type AttrAllowedOps FileFilterInfoDisplayNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileFilterInfoDisplayNameFieldInfo = (~) CString
        type AttrTransferTypeConstraint FileFilterInfoDisplayNameFieldInfo = (~)CString
        type AttrTransferType FileFilterInfoDisplayNameFieldInfo = CString
        type AttrGetType FileFilterInfoDisplayNameFieldInfo = Maybe T.Text
        type AttrLabel FileFilterInfoDisplayNameFieldInfo = "display_name"
        type AttrOrigin FileFilterInfoDisplayNameFieldInfo = FileFilterInfo
        attrGet = getFileFilterInfoDisplayName
        attrSet = setFileFilterInfoDisplayName
        attrConstruct = undefined
        attrClear = clearFileFilterInfoDisplayName
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gtk.Structs.FileFilterInfo.displayName"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtk-3.0.43/docs/GI-Gtk-Structs-FileFilterInfo.html#g:attr:displayName"
            })

    fileFilterInfo_displayName :: AttrLabelProxy "displayName"
    fileFilterInfo_displayName = AttrLabelProxy

    #endif

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

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

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

    #if defined(ENABLE_OVERLOADING)
    data FileFilterInfoMimeTypeFieldInfo
    instance AttrInfo FileFilterInfoMimeTypeFieldInfo where
        type AttrBaseTypeConstraint FileFilterInfoMimeTypeFieldInfo = (~) FileFilterInfo
        type AttrAllowedOps FileFilterInfoMimeTypeFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
        type AttrSetTypeConstraint FileFilterInfoMimeTypeFieldInfo = (~) CString
        type AttrTransferTypeConstraint FileFilterInfoMimeTypeFieldInfo = (~)CString
        type AttrTransferType FileFilterInfoMimeTypeFieldInfo = CString
        type AttrGetType FileFilterInfoMimeTypeFieldInfo = Maybe T.Text
        type AttrLabel FileFilterInfoMimeTypeFieldInfo = "mime_type"
        type AttrOrigin FileFilterInfoMimeTypeFieldInfo = FileFilterInfo
        attrGet = getFileFilterInfoMimeType
        attrSet = setFileFilterInfoMimeType
        attrConstruct = undefined
        attrClear = clearFileFilterInfoMimeType
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Gtk.Structs.FileFilterInfo.mimeType"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gtk-3.0.43/docs/GI-Gtk-Structs-FileFilterInfo.html#g:attr:mimeType"
            })

    fileFilterInfo_mimeType :: AttrLabelProxy "mimeType"
    fileFilterInfo_mimeType = AttrLabelProxy

    #endif

    #if defined(ENABLE_OVERLOADING)
    instance O.HasAttributeList FileFilterInfo
    type instance O.AttributeList FileFilterInfo = FileFilterInfoAttributeList
    type FileFilterInfoAttributeList = ('[ '("contains", FileFilterInfoContainsFieldInfo), '("filename", FileFilterInfoFilenameFieldInfo), '("uri", FileFilterInfoUriFieldInfo), '("displayName", FileFilterInfoDisplayNameFieldInfo), '("mimeType", FileFilterInfoMimeTypeFieldInfo)] :: [(Symbol, DK.Type)])
    #endif

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

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

    #endif

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

    #endif