    {- |
    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.Objects.UnixOutputStream.UnixOutputStream' implements 'GI.Gio.Objects.OutputStream.OutputStream' for writing to a UNIX
    file descriptor, including asynchronous operations. (If the file
    descriptor refers to a socket or pipe, this will use @/poll()/@ to do
    asynchronous I\/O. If it refers to a regular file, it will fall back
    to doing asynchronous I\/O in another thread.)

    Note that @\<gio\/gunixoutputstream.h>@ belongs to the UNIX-specific GIO
    interfaces, thus you have to use the @gio-unix-2.0.pc@ pkg-config file
    when using it.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Gio.Objects.UnixOutputStream
        (

    -- * Exported types
        UnixOutputStream(..)                    ,
        IsUnixOutputStream                      ,
        toUnixOutputStream                      ,
        noUnixOutputStream                      ,

     -- * Methods
    -- ** getCloseFd #method:getCloseFd#

    #if ENABLE_OVERLOADING
        UnixOutputStreamGetCloseFdMethodInfo    ,
    #endif
        unixOutputStreamGetCloseFd              ,

    -- ** getFd #method:getFd#

    #if ENABLE_OVERLOADING
        UnixOutputStreamGetFdMethodInfo         ,
    #endif
        unixOutputStreamGetFd                   ,

    -- ** new #method:new#

        unixOutputStreamNew                     ,

    -- ** setCloseFd #method:setCloseFd#

    #if ENABLE_OVERLOADING
        UnixOutputStreamSetCloseFdMethodInfo    ,
    #endif
        unixOutputStreamSetCloseFd              ,

     -- * Properties
    -- ** closeFd #attr:closeFd#
    {- | Whether to close the file descriptor when the stream is closed.

    /Since: 2.20/
    -}
    #if ENABLE_OVERLOADING
        UnixOutputStreamCloseFdPropertyInfo     ,
    #endif
        constructUnixOutputStreamCloseFd        ,
        getUnixOutputStreamCloseFd              ,
        setUnixOutputStreamCloseFd              ,
    #if ENABLE_OVERLOADING
        unixOutputStreamCloseFd                 ,
    #endif

    -- ** fd #attr:fd#
    {- | The file descriptor that the stream writes to.

    /Since: 2.20/
    -}
    #if ENABLE_OVERLOADING
        UnixOutputStreamFdPropertyInfo          ,
    #endif
        constructUnixOutputStreamFd             ,
        getUnixOutputStreamFd                   ,
    #if ENABLE_OVERLOADING
        unixOutputStreamFd                      ,
    #endif

        ) 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.GObject.Objects.Object as GObject.Object
    import {-# SOURCE #-} qualified GI.Gio.Interfaces.FileDescriptorBased as Gio.FileDescriptorBased
    import {-# SOURCE #-} qualified GI.Gio.Interfaces.PollableOutputStream as Gio.PollableOutputStream
    import {-# SOURCE #-} qualified GI.Gio.Objects.OutputStream as Gio.OutputStream

    -- | Memory-managed wrapper type.
    newtype UnixOutputStream = UnixOutputStream (ManagedPtr UnixOutputStream)
    foreign import ccall "g_unix_output_stream_get_type"
        c_g_unix_output_stream_get_type :: IO GType

    instance GObject UnixOutputStream where
        gobjectType _ = c_g_unix_output_stream_get_type

    -- | Type class for types which can be safely cast to `UnixOutputStream`, for instance with `toUnixOutputStream`.
    class GObject o => IsUnixOutputStream o
    #if MIN_VERSION_base(4,9,0)
    instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError UnixOutputStream a) =>
        IsUnixOutputStream a
    #endif
    instance IsUnixOutputStream UnixOutputStream
    instance Gio.OutputStream.IsOutputStream UnixOutputStream
    instance GObject.Object.IsObject UnixOutputStream
    instance Gio.FileDescriptorBased.IsFileDescriptorBased UnixOutputStream
    instance Gio.PollableOutputStream.IsPollableOutputStream UnixOutputStream

    -- | Cast to `UnixOutputStream`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
    toUnixOutputStream :: (MonadIO m, IsUnixOutputStream o) => o -> m UnixOutputStream
    toUnixOutputStream = liftIO . unsafeCastTo UnixOutputStream

    -- | A convenience alias for `Nothing` :: `Maybe` `UnixOutputStream`.
    noUnixOutputStream :: Maybe UnixOutputStream
    noUnixOutputStream = Nothing

    #if ENABLE_OVERLOADING
    type family ResolveUnixOutputStreamMethod (t :: Symbol) (o :: *) :: * where
        ResolveUnixOutputStreamMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
        ResolveUnixOutputStreamMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
        ResolveUnixOutputStreamMethod "canPoll" o = Gio.PollableOutputStream.PollableOutputStreamCanPollMethodInfo
        ResolveUnixOutputStreamMethod "clearPending" o = Gio.OutputStream.OutputStreamClearPendingMethodInfo
        ResolveUnixOutputStreamMethod "close" o = Gio.OutputStream.OutputStreamCloseMethodInfo
        ResolveUnixOutputStreamMethod "closeAsync" o = Gio.OutputStream.OutputStreamCloseAsyncMethodInfo
        ResolveUnixOutputStreamMethod "closeFinish" o = Gio.OutputStream.OutputStreamCloseFinishMethodInfo
        ResolveUnixOutputStreamMethod "createSource" o = Gio.PollableOutputStream.PollableOutputStreamCreateSourceMethodInfo
        ResolveUnixOutputStreamMethod "flush" o = Gio.OutputStream.OutputStreamFlushMethodInfo
        ResolveUnixOutputStreamMethod "flushAsync" o = Gio.OutputStream.OutputStreamFlushAsyncMethodInfo
        ResolveUnixOutputStreamMethod "flushFinish" o = Gio.OutputStream.OutputStreamFlushFinishMethodInfo
        ResolveUnixOutputStreamMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
        ResolveUnixOutputStreamMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
        ResolveUnixOutputStreamMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
        ResolveUnixOutputStreamMethod "hasPending" o = Gio.OutputStream.OutputStreamHasPendingMethodInfo
        ResolveUnixOutputStreamMethod "isClosed" o = Gio.OutputStream.OutputStreamIsClosedMethodInfo
        ResolveUnixOutputStreamMethod "isClosing" o = Gio.OutputStream.OutputStreamIsClosingMethodInfo
        ResolveUnixOutputStreamMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
        ResolveUnixOutputStreamMethod "isWritable" o = Gio.PollableOutputStream.PollableOutputStreamIsWritableMethodInfo
        ResolveUnixOutputStreamMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
        ResolveUnixOutputStreamMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
        ResolveUnixOutputStreamMethod "ref" o = GObject.Object.ObjectRefMethodInfo
        ResolveUnixOutputStreamMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
        ResolveUnixOutputStreamMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
        ResolveUnixOutputStreamMethod "splice" o = Gio.OutputStream.OutputStreamSpliceMethodInfo
        ResolveUnixOutputStreamMethod "spliceAsync" o = Gio.OutputStream.OutputStreamSpliceAsyncMethodInfo
        ResolveUnixOutputStreamMethod "spliceFinish" o = Gio.OutputStream.OutputStreamSpliceFinishMethodInfo
        ResolveUnixOutputStreamMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
        ResolveUnixOutputStreamMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
        ResolveUnixOutputStreamMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
        ResolveUnixOutputStreamMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
        ResolveUnixOutputStreamMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
        ResolveUnixOutputStreamMethod "write" o = Gio.OutputStream.OutputStreamWriteMethodInfo
        ResolveUnixOutputStreamMethod "writeAll" o = Gio.OutputStream.OutputStreamWriteAllMethodInfo
        ResolveUnixOutputStreamMethod "writeAllAsync" o = Gio.OutputStream.OutputStreamWriteAllAsyncMethodInfo
        ResolveUnixOutputStreamMethod "writeAllFinish" o = Gio.OutputStream.OutputStreamWriteAllFinishMethodInfo
        ResolveUnixOutputStreamMethod "writeAsync" o = Gio.OutputStream.OutputStreamWriteAsyncMethodInfo
        ResolveUnixOutputStreamMethod "writeBytes" o = Gio.OutputStream.OutputStreamWriteBytesMethodInfo
        ResolveUnixOutputStreamMethod "writeBytesAsync" o = Gio.OutputStream.OutputStreamWriteBytesAsyncMethodInfo
        ResolveUnixOutputStreamMethod "writeBytesFinish" o = Gio.OutputStream.OutputStreamWriteBytesFinishMethodInfo
        ResolveUnixOutputStreamMethod "writeFinish" o = Gio.OutputStream.OutputStreamWriteFinishMethodInfo
        ResolveUnixOutputStreamMethod "writeNonblocking" o = Gio.PollableOutputStream.PollableOutputStreamWriteNonblockingMethodInfo
        ResolveUnixOutputStreamMethod "writev" o = Gio.OutputStream.OutputStreamWritevMethodInfo
        ResolveUnixOutputStreamMethod "writevAll" o = Gio.OutputStream.OutputStreamWritevAllMethodInfo
        ResolveUnixOutputStreamMethod "writevAllAsync" o = Gio.OutputStream.OutputStreamWritevAllAsyncMethodInfo
        ResolveUnixOutputStreamMethod "writevAllFinish" o = Gio.OutputStream.OutputStreamWritevAllFinishMethodInfo
        ResolveUnixOutputStreamMethod "writevAsync" o = Gio.OutputStream.OutputStreamWritevAsyncMethodInfo
        ResolveUnixOutputStreamMethod "writevFinish" o = Gio.OutputStream.OutputStreamWritevFinishMethodInfo
        ResolveUnixOutputStreamMethod "writevNonblocking" o = Gio.PollableOutputStream.PollableOutputStreamWritevNonblockingMethodInfo
        ResolveUnixOutputStreamMethod "getCloseFd" o = UnixOutputStreamGetCloseFdMethodInfo
        ResolveUnixOutputStreamMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
        ResolveUnixOutputStreamMethod "getFd" o = UnixOutputStreamGetFdMethodInfo
        ResolveUnixOutputStreamMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
        ResolveUnixOutputStreamMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
        ResolveUnixOutputStreamMethod "setCloseFd" o = UnixOutputStreamSetCloseFdMethodInfo
        ResolveUnixOutputStreamMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
        ResolveUnixOutputStreamMethod "setPending" o = Gio.OutputStream.OutputStreamSetPendingMethodInfo
        ResolveUnixOutputStreamMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
        ResolveUnixOutputStreamMethod l o = O.MethodResolutionFailed l o

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

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

    -- VVV Prop "close-fd"
       -- Type: TBasicType TBoolean
       -- Flags: [PropertyReadable,PropertyWritable]
       -- Nullable: (Just False,Just False)

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

    @
    'Data.GI.Base.Attributes.get' unixOutputStream #closeFd
    @
    -}
    getUnixOutputStreamCloseFd :: (MonadIO m, IsUnixOutputStream o) => o -> m Bool
    getUnixOutputStreamCloseFd obj = liftIO $ getObjectPropertyBool obj "close-fd"

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

    @
    'Data.GI.Base.Attributes.set' unixOutputStream [ #closeFd 'Data.GI.Base.Attributes.:=' value ]
    @
    -}
    setUnixOutputStreamCloseFd :: (MonadIO m, IsUnixOutputStream o) => o -> Bool -> m ()
    setUnixOutputStreamCloseFd obj val = liftIO $ setObjectPropertyBool obj "close-fd" val

    {- |
    Construct a `GValueConstruct` with valid value for the “@close-fd@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
    -}
    constructUnixOutputStreamCloseFd :: (IsUnixOutputStream o) => Bool -> IO (GValueConstruct o)
    constructUnixOutputStreamCloseFd val = constructObjectPropertyBool "close-fd" val

    #if ENABLE_OVERLOADING
    data UnixOutputStreamCloseFdPropertyInfo
    instance AttrInfo UnixOutputStreamCloseFdPropertyInfo where
        type AttrAllowedOps UnixOutputStreamCloseFdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
        type AttrSetTypeConstraint UnixOutputStreamCloseFdPropertyInfo = (~) Bool
        type AttrBaseTypeConstraint UnixOutputStreamCloseFdPropertyInfo = IsUnixOutputStream
        type AttrGetType UnixOutputStreamCloseFdPropertyInfo = Bool
        type AttrLabel UnixOutputStreamCloseFdPropertyInfo = "close-fd"
        type AttrOrigin UnixOutputStreamCloseFdPropertyInfo = UnixOutputStream
        attrGet _ = getUnixOutputStreamCloseFd
        attrSet _ = setUnixOutputStreamCloseFd
        attrConstruct _ = constructUnixOutputStreamCloseFd
        attrClear _ = undefined
    #endif

    -- VVV Prop "fd"
       -- Type: TBasicType TInt
       -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
       -- Nullable: (Just False,Nothing)

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

    @
    'Data.GI.Base.Attributes.get' unixOutputStream #fd
    @
    -}
    getUnixOutputStreamFd :: (MonadIO m, IsUnixOutputStream o) => o -> m Int32
    getUnixOutputStreamFd obj = liftIO $ getObjectPropertyInt32 obj "fd"

    {- |
    Construct a `GValueConstruct` with valid value for the “@fd@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
    -}
    constructUnixOutputStreamFd :: (IsUnixOutputStream o) => Int32 -> IO (GValueConstruct o)
    constructUnixOutputStreamFd val = constructObjectPropertyInt32 "fd" val

    #if ENABLE_OVERLOADING
    data UnixOutputStreamFdPropertyInfo
    instance AttrInfo UnixOutputStreamFdPropertyInfo where
        type AttrAllowedOps UnixOutputStreamFdPropertyInfo = '[ 'AttrConstruct, 'AttrGet]
        type AttrSetTypeConstraint UnixOutputStreamFdPropertyInfo = (~) Int32
        type AttrBaseTypeConstraint UnixOutputStreamFdPropertyInfo = IsUnixOutputStream
        type AttrGetType UnixOutputStreamFdPropertyInfo = Int32
        type AttrLabel UnixOutputStreamFdPropertyInfo = "fd"
        type AttrOrigin UnixOutputStreamFdPropertyInfo = UnixOutputStream
        attrGet _ = getUnixOutputStreamFd
        attrSet _ = undefined
        attrConstruct _ = constructUnixOutputStreamFd
        attrClear _ = undefined
    #endif

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList UnixOutputStream
    type instance O.AttributeList UnixOutputStream = UnixOutputStreamAttributeList
    type UnixOutputStreamAttributeList = ('[ '("closeFd", UnixOutputStreamCloseFdPropertyInfo), '("fd", UnixOutputStreamFdPropertyInfo)] :: [(Symbol, *)])
    #endif

    #if ENABLE_OVERLOADING
    unixOutputStreamCloseFd :: AttrLabelProxy "closeFd"
    unixOutputStreamCloseFd = AttrLabelProxy

    unixOutputStreamFd :: AttrLabelProxy "fd"
    unixOutputStreamFd = AttrLabelProxy

    #endif

    #if ENABLE_OVERLOADING
    type instance O.SignalList UnixOutputStream = UnixOutputStreamSignalList
    type UnixOutputStreamSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

    #endif

    -- method UnixOutputStream::new
    -- method type : Constructor
    -- Args : [Arg {argCName = "fd", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a UNIX file descriptor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "close_fd", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "%TRUE to close the file descriptor when done", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Gio", name = "UnixOutputStream"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_unix_output_stream_new" g_unix_output_stream_new ::
        Int32 ->                                -- fd : TBasicType TInt
        CInt ->                                 -- close_fd : TBasicType TBoolean
        IO (Ptr UnixOutputStream)

    {- |
    Creates a new 'GI.Gio.Objects.UnixOutputStream.UnixOutputStream' for the given /@fd@/.

    If /@closeFd@/, is 'True', the file descriptor will be closed when
    the output stream is destroyed.
    -}
    unixOutputStreamNew ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Int32
        {- ^ /@fd@/: a UNIX file descriptor -}
        -> Bool
        {- ^ /@closeFd@/: 'True' to close the file descriptor when done -}
        -> m UnixOutputStream
        {- ^ __Returns:__ a new 'GI.Gio.Objects.OutputStream.OutputStream' -}
    unixOutputStreamNew fd closeFd = liftIO $ do
        let closeFd' = (fromIntegral . fromEnum) closeFd
        result <- g_unix_output_stream_new fd closeFd'
        checkUnexpectedReturnNULL "unixOutputStreamNew" result
        result' <- (wrapObject UnixOutputStream) result
        return result'

    #if ENABLE_OVERLOADING
    #endif

    -- method UnixOutputStream::get_close_fd
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "UnixOutputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GUnixOutputStream", 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_unix_output_stream_get_close_fd" g_unix_output_stream_get_close_fd ::
        Ptr UnixOutputStream ->                 -- stream : TInterface (Name {namespace = "Gio", name = "UnixOutputStream"})
        IO CInt

    {- |
    Returns whether the file descriptor of /@stream@/ will be
    closed when the stream is closed.

    /Since: 2.20/
    -}
    unixOutputStreamGetCloseFd ::
        (B.CallStack.HasCallStack, MonadIO m, IsUnixOutputStream a) =>
        a
        {- ^ /@stream@/: a 'GI.Gio.Objects.UnixOutputStream.UnixOutputStream' -}
        -> m Bool
        {- ^ __Returns:__ 'True' if the file descriptor is closed when done -}
    unixOutputStreamGetCloseFd stream = liftIO $ do
        stream' <- unsafeManagedPtrCastPtr stream
        result <- g_unix_output_stream_get_close_fd stream'
        let result' = (/= 0) result
        touchManagedPtr stream
        return result'

    #if ENABLE_OVERLOADING
    data UnixOutputStreamGetCloseFdMethodInfo
    instance (signature ~ (m Bool), MonadIO m, IsUnixOutputStream a) => O.MethodInfo UnixOutputStreamGetCloseFdMethodInfo a signature where
        overloadedMethod _ = unixOutputStreamGetCloseFd

    #endif

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

    foreign import ccall "g_unix_output_stream_get_fd" g_unix_output_stream_get_fd ::
        Ptr UnixOutputStream ->                 -- stream : TInterface (Name {namespace = "Gio", name = "UnixOutputStream"})
        IO Int32

    {- |
    Return the UNIX file descriptor that the stream writes to.

    /Since: 2.20/
    -}
    unixOutputStreamGetFd ::
        (B.CallStack.HasCallStack, MonadIO m, IsUnixOutputStream a) =>
        a
        {- ^ /@stream@/: a 'GI.Gio.Objects.UnixOutputStream.UnixOutputStream' -}
        -> m Int32
        {- ^ __Returns:__ The file descriptor of /@stream@/ -}
    unixOutputStreamGetFd stream = liftIO $ do
        stream' <- unsafeManagedPtrCastPtr stream
        result <- g_unix_output_stream_get_fd stream'
        touchManagedPtr stream
        return result

    #if ENABLE_OVERLOADING
    data UnixOutputStreamGetFdMethodInfo
    instance (signature ~ (m Int32), MonadIO m, IsUnixOutputStream a) => O.MethodInfo UnixOutputStreamGetFdMethodInfo a signature where
        overloadedMethod _ = unixOutputStreamGetFd

    #endif

    -- method UnixOutputStream::set_close_fd
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "UnixOutputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GUnixOutputStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "close_fd", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "%TRUE to close the file descriptor when done", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "g_unix_output_stream_set_close_fd" g_unix_output_stream_set_close_fd ::
        Ptr UnixOutputStream ->                 -- stream : TInterface (Name {namespace = "Gio", name = "UnixOutputStream"})
        CInt ->                                 -- close_fd : TBasicType TBoolean
        IO ()

    {- |
    Sets whether the file descriptor of /@stream@/ shall be closed
    when the stream is closed.

    /Since: 2.20/
    -}
    unixOutputStreamSetCloseFd ::
        (B.CallStack.HasCallStack, MonadIO m, IsUnixOutputStream a) =>
        a
        {- ^ /@stream@/: a 'GI.Gio.Objects.UnixOutputStream.UnixOutputStream' -}
        -> Bool
        {- ^ /@closeFd@/: 'True' to close the file descriptor when done -}
        -> m ()
    unixOutputStreamSetCloseFd stream closeFd = liftIO $ do
        stream' <- unsafeManagedPtrCastPtr stream
        let closeFd' = (fromIntegral . fromEnum) closeFd
        g_unix_output_stream_set_close_fd stream' closeFd'
        touchManagedPtr stream
        return ()

    #if ENABLE_OVERLOADING
    data UnixOutputStreamSetCloseFdMethodInfo
    instance (signature ~ (Bool -> m ()), MonadIO m, IsUnixOutputStream a) => O.MethodInfo UnixOutputStreamSetCloseFdMethodInfo a signature where
        overloadedMethod _ = unixOutputStreamSetCloseFd

    #endif