gi-gio-2.0.20: GI/Gio/Objects/IOStream.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
GIOStream represents an object that has both read and write streams.
Generally the two streams act as separate input and output streams,
but they share some common resources and state. For instance, for
seekable streams, both streams may use the same position.
Examples of 'GI.Gio.Objects.IOStream.IOStream' objects are 'GI.Gio.Objects.SocketConnection.SocketConnection', which represents
a two-way network connection; and 'GI.Gio.Objects.FileIOStream.FileIOStream', which represents a
file handle opened in read-write mode.
To do the actual reading and writing you need to get the substreams
with 'GI.Gio.Objects.IOStream.iOStreamGetInputStream' and 'GI.Gio.Objects.IOStream.iOStreamGetOutputStream'.
The 'GI.Gio.Objects.IOStream.IOStream' object owns the input and the output streams, not the other
way around, so keeping the substreams alive will not keep the 'GI.Gio.Objects.IOStream.IOStream'
object alive. If the 'GI.Gio.Objects.IOStream.IOStream' object is freed it will be closed, thus
closing the substreams, so even if the substreams stay alive they will
always return 'GI.Gio.Enums.IOErrorEnumClosed' for all operations.
To close a stream use 'GI.Gio.Objects.IOStream.iOStreamClose' which will close the common
stream object and also the individual substreams. You can also close
the substreams themselves. In most cases this only marks the
substream as closed, so further I\/O on it fails but common state in the
'GI.Gio.Objects.IOStream.IOStream' may still be open. However, some streams may support
\"half-closed\" states where one direction of the stream is actually shut down.
Operations on @/GIOStreams/@ cannot be started while another operation on the
'GI.Gio.Objects.IOStream.IOStream' or its substreams is in progress. Specifically, an application can
read from the 'GI.Gio.Objects.InputStream.InputStream' and write to the 'GI.Gio.Objects.OutputStream.OutputStream' simultaneously
(either in separate threads, or as asynchronous operations in the same
thread), but an application cannot start any 'GI.Gio.Objects.IOStream.IOStream' operation while there
is a 'GI.Gio.Objects.IOStream.IOStream', 'GI.Gio.Objects.InputStream.InputStream' or 'GI.Gio.Objects.OutputStream.OutputStream' operation in progress, and
an application can’t start any 'GI.Gio.Objects.InputStream.InputStream' or 'GI.Gio.Objects.OutputStream.OutputStream' operation
while there is a 'GI.Gio.Objects.IOStream.IOStream' operation in progress.
This is a product of individual stream operations being associated with a
given 'GI.GLib.Structs.MainContext.MainContext' (the thread-default context at the time the operation was
started), rather than entire streams being associated with a single
'GI.GLib.Structs.MainContext.MainContext'.
GIO may run operations on @/GIOStreams/@ from other (worker) threads, and this
may be exposed to application code in the behaviour of wrapper streams, such
as 'GI.Gio.Objects.BufferedInputStream.BufferedInputStream' or 'GI.Gio.Objects.TlsConnection.TlsConnection'. With such wrapper APIs,
application code may only run operations on the base (wrapped) stream when
the wrapper stream is idle. Note that the semantics of such operations may
not be well-defined due to the state the wrapper stream leaves the base
stream in (though they are guaranteed not to crash).
/Since: 2.22/
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.Gio.Objects.IOStream
(
-- * Exported types
IOStream(..) ,
IsIOStream ,
toIOStream ,
noIOStream ,
-- * Methods
-- ** clearPending #method:clearPending#
#if ENABLE_OVERLOADING
IOStreamClearPendingMethodInfo ,
#endif
iOStreamClearPending ,
-- ** close #method:close#
#if ENABLE_OVERLOADING
IOStreamCloseMethodInfo ,
#endif
iOStreamClose ,
-- ** closeAsync #method:closeAsync#
#if ENABLE_OVERLOADING
IOStreamCloseAsyncMethodInfo ,
#endif
iOStreamCloseAsync ,
-- ** closeFinish #method:closeFinish#
#if ENABLE_OVERLOADING
IOStreamCloseFinishMethodInfo ,
#endif
iOStreamCloseFinish ,
-- ** getInputStream #method:getInputStream#
#if ENABLE_OVERLOADING
IOStreamGetInputStreamMethodInfo ,
#endif
iOStreamGetInputStream ,
-- ** getOutputStream #method:getOutputStream#
#if ENABLE_OVERLOADING
IOStreamGetOutputStreamMethodInfo ,
#endif
iOStreamGetOutputStream ,
-- ** hasPending #method:hasPending#
#if ENABLE_OVERLOADING
IOStreamHasPendingMethodInfo ,
#endif
iOStreamHasPending ,
-- ** isClosed #method:isClosed#
#if ENABLE_OVERLOADING
IOStreamIsClosedMethodInfo ,
#endif
iOStreamIsClosed ,
-- ** setPending #method:setPending#
#if ENABLE_OVERLOADING
IOStreamSetPendingMethodInfo ,
#endif
iOStreamSetPending ,
-- ** spliceAsync #method:spliceAsync#
#if ENABLE_OVERLOADING
IOStreamSpliceAsyncMethodInfo ,
#endif
iOStreamSpliceAsync ,
-- ** spliceFinish #method:spliceFinish#
iOStreamSpliceFinish ,
-- * Properties
-- ** closed #attr:closed#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
IOStreamClosedPropertyInfo ,
#endif
getIOStreamClosed ,
#if ENABLE_OVERLOADING
iOStreamClosed ,
#endif
-- ** inputStream #attr:inputStream#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
IOStreamInputStreamPropertyInfo ,
#endif
getIOStreamInputStream ,
#if ENABLE_OVERLOADING
iOStreamInputStream ,
#endif
-- ** outputStream #attr:outputStream#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
IOStreamOutputStreamPropertyInfo ,
#endif
getIOStreamOutputStream ,
#if ENABLE_OVERLOADING
iOStreamOutputStream ,
#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.GClosure as B.GClosure
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.GI.Base.Properties as B.Properties
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 GHC.OverloadedLabels as OL
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Callbacks as Gio.Callbacks
import {-# SOURCE #-} qualified GI.Gio.Flags as Gio.Flags
import {-# SOURCE #-} qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import {-# SOURCE #-} qualified GI.Gio.Objects.Cancellable as Gio.Cancellable
import {-# SOURCE #-} qualified GI.Gio.Objects.InputStream as Gio.InputStream
import {-# SOURCE #-} qualified GI.Gio.Objects.OutputStream as Gio.OutputStream
-- | Memory-managed wrapper type.
newtype IOStream = IOStream (ManagedPtr IOStream)
foreign import ccall "g_io_stream_get_type"
c_g_io_stream_get_type :: IO GType
instance GObject IOStream where
gobjectType = c_g_io_stream_get_type
-- | Type class for types which can be safely cast to `IOStream`, for instance with `toIOStream`.
class (GObject o, O.IsDescendantOf IOStream o) => IsIOStream o
instance (GObject o, O.IsDescendantOf IOStream o) => IsIOStream o
instance O.HasParentTypes IOStream
type instance O.ParentTypes IOStream = '[GObject.Object.Object]
-- | Cast to `IOStream`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toIOStream :: (MonadIO m, IsIOStream o) => o -> m IOStream
toIOStream = liftIO . unsafeCastTo IOStream
-- | A convenience alias for `Nothing` :: `Maybe` `IOStream`.
noIOStream :: Maybe IOStream
noIOStream = Nothing
#if ENABLE_OVERLOADING
type family ResolveIOStreamMethod (t :: Symbol) (o :: *) :: * where
ResolveIOStreamMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
ResolveIOStreamMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
ResolveIOStreamMethod "clearPending" o = IOStreamClearPendingMethodInfo
ResolveIOStreamMethod "close" o = IOStreamCloseMethodInfo
ResolveIOStreamMethod "closeAsync" o = IOStreamCloseAsyncMethodInfo
ResolveIOStreamMethod "closeFinish" o = IOStreamCloseFinishMethodInfo
ResolveIOStreamMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
ResolveIOStreamMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
ResolveIOStreamMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
ResolveIOStreamMethod "hasPending" o = IOStreamHasPendingMethodInfo
ResolveIOStreamMethod "isClosed" o = IOStreamIsClosedMethodInfo
ResolveIOStreamMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
ResolveIOStreamMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
ResolveIOStreamMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
ResolveIOStreamMethod "ref" o = GObject.Object.ObjectRefMethodInfo
ResolveIOStreamMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
ResolveIOStreamMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
ResolveIOStreamMethod "spliceAsync" o = IOStreamSpliceAsyncMethodInfo
ResolveIOStreamMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
ResolveIOStreamMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
ResolveIOStreamMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
ResolveIOStreamMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
ResolveIOStreamMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
ResolveIOStreamMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
ResolveIOStreamMethod "getInputStream" o = IOStreamGetInputStreamMethodInfo
ResolveIOStreamMethod "getOutputStream" o = IOStreamGetOutputStreamMethodInfo
ResolveIOStreamMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
ResolveIOStreamMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
ResolveIOStreamMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
ResolveIOStreamMethod "setPending" o = IOStreamSetPendingMethodInfo
ResolveIOStreamMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
ResolveIOStreamMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveIOStreamMethod t IOStream, O.MethodInfo info IOStream p) => OL.IsLabel t (IOStream -> 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
-- VVV Prop "closed"
-- Type: TBasicType TBoolean
-- Flags: [PropertyReadable]
-- Nullable: (Nothing,Nothing)
{- |
Get the value of the “@closed@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' iOStream #closed
@
-}
getIOStreamClosed :: (MonadIO m, IsIOStream o) => o -> m Bool
getIOStreamClosed obj = liftIO $ B.Properties.getObjectPropertyBool obj "closed"
#if ENABLE_OVERLOADING
data IOStreamClosedPropertyInfo
instance AttrInfo IOStreamClosedPropertyInfo where
type AttrAllowedOps IOStreamClosedPropertyInfo = '[ 'AttrGet]
type AttrSetTypeConstraint IOStreamClosedPropertyInfo = (~) ()
type AttrBaseTypeConstraint IOStreamClosedPropertyInfo = IsIOStream
type AttrGetType IOStreamClosedPropertyInfo = Bool
type AttrLabel IOStreamClosedPropertyInfo = "closed"
type AttrOrigin IOStreamClosedPropertyInfo = IOStream
attrGet _ = getIOStreamClosed
attrSet _ = undefined
attrConstruct _ = undefined
attrClear _ = undefined
#endif
-- VVV Prop "input-stream"
-- Type: TInterface (Name {namespace = "Gio", name = "InputStream"})
-- Flags: [PropertyReadable]
-- Nullable: (Just False,Nothing)
{- |
Get the value of the “@input-stream@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' iOStream #inputStream
@
-}
getIOStreamInputStream :: (MonadIO m, IsIOStream o) => o -> m Gio.InputStream.InputStream
getIOStreamInputStream obj = liftIO $ checkUnexpectedNothing "getIOStreamInputStream" $ B.Properties.getObjectPropertyObject obj "input-stream" Gio.InputStream.InputStream
#if ENABLE_OVERLOADING
data IOStreamInputStreamPropertyInfo
instance AttrInfo IOStreamInputStreamPropertyInfo where
type AttrAllowedOps IOStreamInputStreamPropertyInfo = '[ 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint IOStreamInputStreamPropertyInfo = (~) ()
type AttrBaseTypeConstraint IOStreamInputStreamPropertyInfo = IsIOStream
type AttrGetType IOStreamInputStreamPropertyInfo = Gio.InputStream.InputStream
type AttrLabel IOStreamInputStreamPropertyInfo = "input-stream"
type AttrOrigin IOStreamInputStreamPropertyInfo = IOStream
attrGet _ = getIOStreamInputStream
attrSet _ = undefined
attrConstruct _ = undefined
attrClear _ = undefined
#endif
-- VVV Prop "output-stream"
-- Type: TInterface (Name {namespace = "Gio", name = "OutputStream"})
-- Flags: [PropertyReadable]
-- Nullable: (Just False,Nothing)
{- |
Get the value of the “@output-stream@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
@
'Data.GI.Base.Attributes.get' iOStream #outputStream
@
-}
getIOStreamOutputStream :: (MonadIO m, IsIOStream o) => o -> m Gio.OutputStream.OutputStream
getIOStreamOutputStream obj = liftIO $ checkUnexpectedNothing "getIOStreamOutputStream" $ B.Properties.getObjectPropertyObject obj "output-stream" Gio.OutputStream.OutputStream
#if ENABLE_OVERLOADING
data IOStreamOutputStreamPropertyInfo
instance AttrInfo IOStreamOutputStreamPropertyInfo where
type AttrAllowedOps IOStreamOutputStreamPropertyInfo = '[ 'AttrGet, 'AttrClear]
type AttrSetTypeConstraint IOStreamOutputStreamPropertyInfo = (~) ()
type AttrBaseTypeConstraint IOStreamOutputStreamPropertyInfo = IsIOStream
type AttrGetType IOStreamOutputStreamPropertyInfo = Gio.OutputStream.OutputStream
type AttrLabel IOStreamOutputStreamPropertyInfo = "output-stream"
type AttrOrigin IOStreamOutputStreamPropertyInfo = IOStream
attrGet _ = getIOStreamOutputStream
attrSet _ = undefined
attrConstruct _ = undefined
attrClear _ = undefined
#endif
#if ENABLE_OVERLOADING
instance O.HasAttributeList IOStream
type instance O.AttributeList IOStream = IOStreamAttributeList
type IOStreamAttributeList = ('[ '("closed", IOStreamClosedPropertyInfo), '("inputStream", IOStreamInputStreamPropertyInfo), '("outputStream", IOStreamOutputStreamPropertyInfo)] :: [(Symbol, *)])
#endif
#if ENABLE_OVERLOADING
iOStreamClosed :: AttrLabelProxy "closed"
iOStreamClosed = AttrLabelProxy
iOStreamInputStream :: AttrLabelProxy "inputStream"
iOStreamInputStream = AttrLabelProxy
iOStreamOutputStream :: AttrLabelProxy "outputStream"
iOStreamOutputStream = AttrLabelProxy
#endif
#if ENABLE_OVERLOADING
type instance O.SignalList IOStream = IOStreamSignalList
type IOStreamSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
#endif
-- method IOStream::clear_pending
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_io_stream_clear_pending" g_io_stream_clear_pending ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
IO ()
{- |
Clears the pending flag on /@stream@/.
/Since: 2.22/
-}
iOStreamClearPending ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m ()
iOStreamClearPending stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
g_io_stream_clear_pending stream'
touchManagedPtr stream
return ()
#if ENABLE_OVERLOADING
data IOStreamClearPendingMethodInfo
instance (signature ~ (m ()), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamClearPendingMethodInfo a signature where
overloadedMethod _ = iOStreamClearPending
#endif
-- method IOStream::close
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "optional #GCancellable object, %NULL to ignore", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_io_stream_close" g_io_stream_close ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Closes the stream, releasing resources related to it. This will also
close the individual input and output streams, if they are not already
closed.
Once the stream is closed, all other operations will return
'GI.Gio.Enums.IOErrorEnumClosed'. Closing a stream multiple times will not
return an error.
Closing a stream will automatically flush any outstanding buffers
in the stream.
Streams will be automatically closed when the last reference
is dropped, but you might want to call this function to make sure
resources are released as early as possible.
Some streams might keep the backing store of the stream (e.g. a file
descriptor) open after the stream is closed. See the documentation for
the individual stream for details.
On failure the first error that happened will be reported, but the
close operation will finish as much as possible. A stream that failed
to close will still return 'GI.Gio.Enums.IOErrorEnumClosed' for all operations.
Still, it is important to check and report the error to the user,
otherwise there might be a loss of data as all data might not be written.
If /@cancellable@/ is not NULL, then the operation can be cancelled by
triggering the cancellable object from another thread. If the operation
was cancelled, the error 'GI.Gio.Enums.IOErrorEnumCancelled' will be returned.
Cancelling a close will still leave the stream closed, but some streams
can use a faster close that doesn\'t block to e.g. check errors.
The default implementation of this method just calls close on the
individual input\/output streams.
/Since: 2.22/
-}
iOStreamClose ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a, Gio.Cancellable.IsCancellable b) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> Maybe (b)
{- ^ /@cancellable@/: optional 'GI.Gio.Objects.Cancellable.Cancellable' object, 'Nothing' to ignore -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
iOStreamClose stream cancellable = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
maybeCancellable <- case cancellable of
Nothing -> return nullPtr
Just jCancellable -> do
jCancellable' <- unsafeManagedPtrCastPtr jCancellable
return jCancellable'
onException (do
_ <- propagateGError $ g_io_stream_close stream' maybeCancellable
touchManagedPtr stream
whenJust cancellable touchManagedPtr
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data IOStreamCloseMethodInfo
instance (signature ~ (Maybe (b) -> m ()), MonadIO m, IsIOStream a, Gio.Cancellable.IsCancellable b) => O.MethodInfo IOStreamCloseMethodInfo a signature where
overloadedMethod _ = iOStreamClose
#endif
-- method IOStream::close_async
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "io_priority", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the io priority of the request", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "optional cancellable object", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "callback to call when the request is satisfied", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 4, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the data to pass to callback function", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_io_stream_close_async" g_io_stream_close_async ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
Int32 -> -- io_priority : TBasicType TInt
Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
Ptr () -> -- user_data : TBasicType TPtr
IO ()
{- |
Requests an asynchronous close of the stream, releasing resources
related to it. When the operation is finished /@callback@/ will be
called. You can then call 'GI.Gio.Objects.IOStream.iOStreamCloseFinish' to get
the result of the operation.
For behaviour details see 'GI.Gio.Objects.IOStream.iOStreamClose'.
The asynchronous methods have a default fallback that uses threads
to implement asynchronicity, so they are optional for inheriting
classes. However, if you override one you must override all.
/Since: 2.22/
-}
iOStreamCloseAsync ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a, Gio.Cancellable.IsCancellable b) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> Int32
{- ^ /@ioPriority@/: the io priority of the request -}
-> Maybe (b)
{- ^ /@cancellable@/: optional cancellable object -}
-> Maybe (Gio.Callbacks.AsyncReadyCallback)
{- ^ /@callback@/: callback to call when the request is satisfied -}
-> m ()
iOStreamCloseAsync stream ioPriority cancellable callback = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
maybeCancellable <- case cancellable of
Nothing -> return nullPtr
Just jCancellable -> do
jCancellable' <- unsafeManagedPtrCastPtr jCancellable
return jCancellable'
maybeCallback <- case callback of
Nothing -> return (castPtrToFunPtr nullPtr)
Just jCallback -> do
ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback))
poke ptrcallback jCallback'
return jCallback'
let userData = nullPtr
g_io_stream_close_async stream' ioPriority maybeCancellable maybeCallback userData
touchManagedPtr stream
whenJust cancellable touchManagedPtr
return ()
#if ENABLE_OVERLOADING
data IOStreamCloseAsyncMethodInfo
instance (signature ~ (Int32 -> Maybe (b) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsIOStream a, Gio.Cancellable.IsCancellable b) => O.MethodInfo IOStreamCloseAsyncMethodInfo a signature where
overloadedMethod _ = iOStreamCloseAsync
#endif
-- method IOStream::close_finish
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GAsyncResult", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_io_stream_close_finish" g_io_stream_close_finish ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
Ptr Gio.AsyncResult.AsyncResult -> -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Closes a stream.
/Since: 2.22/
-}
iOStreamCloseFinish ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a, Gio.AsyncResult.IsAsyncResult b) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> b
{- ^ /@result@/: a 'GI.Gio.Interfaces.AsyncResult.AsyncResult' -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
iOStreamCloseFinish stream result_ = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
result_' <- unsafeManagedPtrCastPtr result_
onException (do
_ <- propagateGError $ g_io_stream_close_finish stream' result_'
touchManagedPtr stream
touchManagedPtr result_
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data IOStreamCloseFinishMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsIOStream a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo IOStreamCloseFinishMethodInfo a signature where
overloadedMethod _ = iOStreamCloseFinish
#endif
-- method IOStream::get_input_stream
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gio", name = "InputStream"}))
-- throws : False
-- Skip return : False
foreign import ccall "g_io_stream_get_input_stream" g_io_stream_get_input_stream ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
IO (Ptr Gio.InputStream.InputStream)
{- |
Gets the input stream for this object. This is used
for reading.
/Since: 2.22/
-}
iOStreamGetInputStream ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m Gio.InputStream.InputStream
{- ^ __Returns:__ a 'GI.Gio.Objects.InputStream.InputStream', owned by the 'GI.Gio.Objects.IOStream.IOStream'.
Do not free. -}
iOStreamGetInputStream stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
result <- g_io_stream_get_input_stream stream'
checkUnexpectedReturnNULL "iOStreamGetInputStream" result
result' <- (newObject Gio.InputStream.InputStream) result
touchManagedPtr stream
return result'
#if ENABLE_OVERLOADING
data IOStreamGetInputStreamMethodInfo
instance (signature ~ (m Gio.InputStream.InputStream), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamGetInputStreamMethodInfo a signature where
overloadedMethod _ = iOStreamGetInputStream
#endif
-- method IOStream::get_output_stream
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gio", name = "OutputStream"}))
-- throws : False
-- Skip return : False
foreign import ccall "g_io_stream_get_output_stream" g_io_stream_get_output_stream ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
IO (Ptr Gio.OutputStream.OutputStream)
{- |
Gets the output stream for this object. This is used for
writing.
/Since: 2.22/
-}
iOStreamGetOutputStream ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m Gio.OutputStream.OutputStream
{- ^ __Returns:__ a 'GI.Gio.Objects.OutputStream.OutputStream', owned by the 'GI.Gio.Objects.IOStream.IOStream'.
Do not free. -}
iOStreamGetOutputStream stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
result <- g_io_stream_get_output_stream stream'
checkUnexpectedReturnNULL "iOStreamGetOutputStream" result
result' <- (newObject Gio.OutputStream.OutputStream) result
touchManagedPtr stream
return result'
#if ENABLE_OVERLOADING
data IOStreamGetOutputStreamMethodInfo
instance (signature ~ (m Gio.OutputStream.OutputStream), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamGetOutputStreamMethodInfo a signature where
overloadedMethod _ = iOStreamGetOutputStream
#endif
-- method IOStream::has_pending
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", 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_io_stream_has_pending" g_io_stream_has_pending ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
IO CInt
{- |
Checks if a stream has pending actions.
/Since: 2.22/
-}
iOStreamHasPending ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m Bool
{- ^ __Returns:__ 'True' if /@stream@/ has pending actions. -}
iOStreamHasPending stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
result <- g_io_stream_has_pending stream'
let result' = (/= 0) result
touchManagedPtr stream
return result'
#if ENABLE_OVERLOADING
data IOStreamHasPendingMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamHasPendingMethodInfo a signature where
overloadedMethod _ = iOStreamHasPending
#endif
-- method IOStream::is_closed
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", 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_io_stream_is_closed" g_io_stream_is_closed ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
IO CInt
{- |
Checks if a stream is closed.
/Since: 2.22/
-}
iOStreamIsClosed ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m Bool
{- ^ __Returns:__ 'True' if the stream is closed. -}
iOStreamIsClosed stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
result <- g_io_stream_is_closed stream'
let result' = (/= 0) result
touchManagedPtr stream
return result'
#if ENABLE_OVERLOADING
data IOStreamIsClosedMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamIsClosedMethodInfo a signature where
overloadedMethod _ = iOStreamIsClosed
#endif
-- method IOStream::set_pending
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_io_stream_set_pending" g_io_stream_set_pending ::
Ptr IOStream -> -- stream : TInterface (Name {namespace = "Gio", name = "IOStream"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Sets /@stream@/ to have actions pending. If the pending flag is
already set or /@stream@/ is closed, it will return 'False' and set
/@error@/.
/Since: 2.22/
-}
iOStreamSetPending ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a) =>
a
{- ^ /@stream@/: a 'GI.Gio.Objects.IOStream.IOStream' -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
iOStreamSetPending stream = liftIO $ do
stream' <- unsafeManagedPtrCastPtr stream
onException (do
_ <- propagateGError $ g_io_stream_set_pending stream'
touchManagedPtr stream
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
data IOStreamSetPendingMethodInfo
instance (signature ~ (m ()), MonadIO m, IsIOStream a) => O.MethodInfo IOStreamSetPendingMethodInfo a signature where
overloadedMethod _ = iOStreamSetPending
#endif
-- method IOStream::splice_async
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "stream1", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stream2", argType = TInterface (Name {namespace = "Gio", name = "IOStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIOStream.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Gio", name = "IOStreamSpliceFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a set of #GIOStreamSpliceFlags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "io_priority", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the io priority of the request.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "optional #GCancellable object, %NULL to ignore.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GAsyncReadyCallback.", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 6, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to @callback.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "g_io_stream_splice_async" g_io_stream_splice_async ::
Ptr IOStream -> -- stream1 : TInterface (Name {namespace = "Gio", name = "IOStream"})
Ptr IOStream -> -- stream2 : TInterface (Name {namespace = "Gio", name = "IOStream"})
CUInt -> -- flags : TInterface (Name {namespace = "Gio", name = "IOStreamSpliceFlags"})
Int32 -> -- io_priority : TBasicType TInt
Ptr Gio.Cancellable.Cancellable -> -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
Ptr () -> -- user_data : TBasicType TPtr
IO ()
{- |
Asyncronously splice the output stream of /@stream1@/ to the input stream of
/@stream2@/, and splice the output stream of /@stream2@/ to the input stream of
/@stream1@/.
When the operation is finished /@callback@/ will be called.
You can then call 'GI.Gio.Objects.IOStream.iOStreamSpliceFinish' to get the
result of the operation.
/Since: 2.28/
-}
iOStreamSpliceAsync ::
(B.CallStack.HasCallStack, MonadIO m, IsIOStream a, IsIOStream b, Gio.Cancellable.IsCancellable c) =>
a
{- ^ /@stream1@/: a 'GI.Gio.Objects.IOStream.IOStream'. -}
-> b
{- ^ /@stream2@/: a 'GI.Gio.Objects.IOStream.IOStream'. -}
-> [Gio.Flags.IOStreamSpliceFlags]
{- ^ /@flags@/: a set of 'GI.Gio.Flags.IOStreamSpliceFlags'. -}
-> Int32
{- ^ /@ioPriority@/: the io priority of the request. -}
-> Maybe (c)
{- ^ /@cancellable@/: optional 'GI.Gio.Objects.Cancellable.Cancellable' object, 'Nothing' to ignore. -}
-> Maybe (Gio.Callbacks.AsyncReadyCallback)
{- ^ /@callback@/: a 'GI.Gio.Callbacks.AsyncReadyCallback'. -}
-> m ()
iOStreamSpliceAsync stream1 stream2 flags ioPriority cancellable callback = liftIO $ do
stream1' <- unsafeManagedPtrCastPtr stream1
stream2' <- unsafeManagedPtrCastPtr stream2
let flags' = gflagsToWord flags
maybeCancellable <- case cancellable of
Nothing -> return nullPtr
Just jCancellable -> do
jCancellable' <- unsafeManagedPtrCastPtr jCancellable
return jCancellable'
maybeCallback <- case callback of
Nothing -> return (castPtrToFunPtr nullPtr)
Just jCallback -> do
ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback))
poke ptrcallback jCallback'
return jCallback'
let userData = nullPtr
g_io_stream_splice_async stream1' stream2' flags' ioPriority maybeCancellable maybeCallback userData
touchManagedPtr stream1
touchManagedPtr stream2
whenJust cancellable touchManagedPtr
return ()
#if ENABLE_OVERLOADING
data IOStreamSpliceAsyncMethodInfo
instance (signature ~ (b -> [Gio.Flags.IOStreamSpliceFlags] -> Int32 -> Maybe (c) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsIOStream a, IsIOStream b, Gio.Cancellable.IsCancellable c) => O.MethodInfo IOStreamSpliceAsyncMethodInfo a signature where
overloadedMethod _ = iOStreamSpliceAsync
#endif
-- method IOStream::splice_finish
-- method type : MemberFunction
-- Args : [Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GAsyncResult.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False
foreign import ccall "g_io_stream_splice_finish" g_io_stream_splice_finish ::
Ptr Gio.AsyncResult.AsyncResult -> -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
Ptr (Ptr GError) -> -- error
IO CInt
{- |
Finishes an asynchronous io stream splice operation.
/Since: 2.28/
-}
iOStreamSpliceFinish ::
(B.CallStack.HasCallStack, MonadIO m, Gio.AsyncResult.IsAsyncResult a) =>
a
{- ^ /@result@/: a 'GI.Gio.Interfaces.AsyncResult.AsyncResult'. -}
-> m ()
{- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
iOStreamSpliceFinish result_ = liftIO $ do
result_' <- unsafeManagedPtrCastPtr result_
onException (do
_ <- propagateGError $ g_io_stream_splice_finish result_'
touchManagedPtr result_
return ()
) (do
return ()
)
#if ENABLE_OVERLOADING
#endif