gi-soup-0.2.52.13: GI/Soup/Structs/Buffer.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
A data buffer, generally used to represent a chunk of a
#SoupMessageBody.
@data is a #char because that's generally convenient; in some
situations you may need to cast it to #guchar or another type.
-}
module GI.Soup.Structs.Buffer
(
-- * Exported types
Buffer(..) ,
newZeroBuffer ,
noBuffer ,
-- * Methods
-- ** bufferCopy
BufferCopyMethodInfo ,
bufferCopy ,
-- ** bufferFree
BufferFreeMethodInfo ,
bufferFree ,
-- ** bufferGetAsBytes
BufferGetAsBytesMethodInfo ,
bufferGetAsBytes ,
-- ** bufferGetData
BufferGetDataMethodInfo ,
bufferGetData ,
-- ** bufferGetOwner
BufferGetOwnerMethodInfo ,
bufferGetOwner ,
-- ** bufferNew
bufferNew ,
-- ** bufferNewSubbuffer
BufferNewSubbufferMethodInfo ,
bufferNewSubbuffer ,
-- ** bufferNewWithOwner
bufferNewWithOwner ,
-- * Properties
-- ** Data
bufferReadData ,
-- ** Length
bufferReadLength ,
) where
import Prelude ()
import Data.GI.Base.ShortPrelude
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import GI.Soup.Types
import GI.Soup.Callbacks
import qualified GI.GLib as GLib
newtype Buffer = Buffer (ForeignPtr Buffer)
foreign import ccall "soup_buffer_get_type" c_soup_buffer_get_type ::
IO GType
instance BoxedObject Buffer where
boxedType _ = c_soup_buffer_get_type
-- | Construct a `Buffer` struct initialized to zero.
newZeroBuffer :: MonadIO m => m Buffer
newZeroBuffer = liftIO $ callocBoxedBytes 16 >>= wrapBoxed Buffer
noBuffer :: Maybe Buffer
noBuffer = Nothing
bufferReadData :: Buffer -> IO (Ptr ())
bufferReadData s = withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 0) :: IO (Ptr ())
return val
bufferReadLength :: Buffer -> IO Word64
bufferReadLength s = withManagedPtr s $ \ptr -> do
val <- peek (ptr `plusPtr` 8) :: IO Word64
return val
-- method Buffer::new
-- method type : Constructor
-- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TInterface "Soup" "Buffer"
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_new_take" soup_buffer_new_take ::
Ptr Word8 -> -- data : TCArray False (-1) 1 (TBasicType TUInt8)
Word64 -> -- length : TBasicType TUInt64
IO (Ptr Buffer)
bufferNew ::
(MonadIO m) =>
ByteString -- data_
-> m Buffer -- result
bufferNew data_ = liftIO $ do
let length_ = fromIntegral $ B.length data_
data_' <- packByteString data_
result <- soup_buffer_new_take data_' length_
checkUnexpectedReturnNULL "soup_buffer_new_take" result
result' <- (wrapBoxed Buffer) result
return result'
-- method Buffer::new_with_owner
-- method type : Constructor
-- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "owner", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "owner_dnotify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TInterface "Soup" "Buffer"
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_new_with_owner" soup_buffer_new_with_owner ::
Ptr Word8 -> -- data : TCArray False (-1) 1 (TBasicType TUInt8)
Word64 -> -- length : TBasicType TUInt64
Ptr () -> -- owner : TBasicType TVoid
FunPtr GLib.DestroyNotifyC -> -- owner_dnotify : TInterface "GLib" "DestroyNotify"
IO (Ptr Buffer)
bufferNewWithOwner ::
(MonadIO m) =>
ByteString -- data_
-> Ptr () -- owner
-> Maybe (GLib.DestroyNotify) -- ownerDnotify
-> m Buffer -- result
bufferNewWithOwner data_ owner ownerDnotify = liftIO $ do
let length_ = fromIntegral $ B.length data_
data_' <- packByteString data_
ptrownerDnotify <- callocMem :: IO (Ptr (FunPtr GLib.DestroyNotifyC))
maybeOwnerDnotify <- case ownerDnotify of
Nothing -> return (castPtrToFunPtr nullPtr)
Just jOwnerDnotify -> do
jOwnerDnotify' <- GLib.mkDestroyNotify (GLib.destroyNotifyWrapper (Just ptrownerDnotify) jOwnerDnotify)
poke ptrownerDnotify jOwnerDnotify'
return jOwnerDnotify'
result <- soup_buffer_new_with_owner data_' length_ owner maybeOwnerDnotify
checkUnexpectedReturnNULL "soup_buffer_new_with_owner" result
result' <- (wrapBoxed Buffer) result
freeMem data_'
return result'
-- method Buffer::copy
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Soup" "Buffer"
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_copy" soup_buffer_copy ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
IO (Ptr Buffer)
bufferCopy ::
(MonadIO m) =>
Buffer -- _obj
-> m Buffer -- result
bufferCopy _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- soup_buffer_copy _obj'
checkUnexpectedReturnNULL "soup_buffer_copy" result
result' <- (wrapBoxed Buffer) result
touchManagedPtr _obj
return result'
data BufferCopyMethodInfo
instance (signature ~ (m Buffer), MonadIO m) => MethodInfo BufferCopyMethodInfo Buffer signature where
overloadedMethod _ = bufferCopy
-- method Buffer::free
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_free" soup_buffer_free ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
IO ()
bufferFree ::
(MonadIO m) =>
Buffer -- _obj
-> m () -- result
bufferFree _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
soup_buffer_free _obj'
touchManagedPtr _obj
return ()
data BufferFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo BufferFreeMethodInfo Buffer signature where
overloadedMethod _ = bufferFree
-- method Buffer::get_as_bytes
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GLib" "Bytes"
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_get_as_bytes" soup_buffer_get_as_bytes ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
IO (Ptr GLib.Bytes)
bufferGetAsBytes ::
(MonadIO m) =>
Buffer -- _obj
-> m GLib.Bytes -- result
bufferGetAsBytes _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- soup_buffer_get_as_bytes _obj'
checkUnexpectedReturnNULL "soup_buffer_get_as_bytes" result
result' <- (wrapBoxed GLib.Bytes) result
touchManagedPtr _obj
return result'
data BufferGetAsBytesMethodInfo
instance (signature ~ (m GLib.Bytes), MonadIO m) => MethodInfo BufferGetAsBytesMethodInfo Buffer signature where
overloadedMethod _ = bufferGetAsBytes
-- method Buffer::get_data
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) 2 (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : [Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_get_data" soup_buffer_get_data ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
Ptr (Ptr Word8) -> -- data : TCArray False (-1) 2 (TBasicType TUInt8)
Ptr Word64 -> -- length : TBasicType TUInt64
IO ()
bufferGetData ::
(MonadIO m) =>
Buffer -- _obj
-> m (ByteString) -- result
bufferGetData _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
data_ <- allocMem :: IO (Ptr (Ptr Word8))
length_ <- allocMem :: IO (Ptr Word64)
soup_buffer_get_data _obj' data_ length_
length_' <- peek length_
data_' <- peek data_
data_'' <- (unpackByteStringWithLength length_') data_'
touchManagedPtr _obj
freeMem data_
freeMem length_
return data_''
data BufferGetDataMethodInfo
instance (signature ~ (m (ByteString)), MonadIO m) => MethodInfo BufferGetDataMethodInfo Buffer signature where
overloadedMethod _ = bufferGetData
-- method Buffer::get_owner
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_get_owner" soup_buffer_get_owner ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
IO ()
bufferGetOwner ::
(MonadIO m) =>
Buffer -- _obj
-> m () -- result
bufferGetOwner _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
soup_buffer_get_owner _obj'
touchManagedPtr _obj
return ()
data BufferGetOwnerMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo BufferGetOwnerMethodInfo Buffer signature where
overloadedMethod _ = bufferGetOwner
-- method Buffer::new_subbuffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offset", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Soup" "Buffer"
-- throws : False
-- Skip return : False
foreign import ccall "soup_buffer_new_subbuffer" soup_buffer_new_subbuffer ::
Ptr Buffer -> -- _obj : TInterface "Soup" "Buffer"
Word64 -> -- offset : TBasicType TUInt64
Word64 -> -- length : TBasicType TUInt64
IO (Ptr Buffer)
bufferNewSubbuffer ::
(MonadIO m) =>
Buffer -- _obj
-> Word64 -- offset
-> Word64 -- length_
-> m Buffer -- result
bufferNewSubbuffer _obj offset length_ = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
result <- soup_buffer_new_subbuffer _obj' offset length_
checkUnexpectedReturnNULL "soup_buffer_new_subbuffer" result
result' <- (wrapBoxed Buffer) result
touchManagedPtr _obj
return result'
data BufferNewSubbufferMethodInfo
instance (signature ~ (Word64 -> Word64 -> m Buffer), MonadIO m) => MethodInfo BufferNewSubbufferMethodInfo Buffer signature where
overloadedMethod _ = bufferNewSubbuffer
type family ResolveBufferMethod (t :: Symbol) (o :: *) :: * where
ResolveBufferMethod "copy" o = BufferCopyMethodInfo
ResolveBufferMethod "free" o = BufferFreeMethodInfo
ResolveBufferMethod "newSubbuffer" o = BufferNewSubbufferMethodInfo
ResolveBufferMethod "getAsBytes" o = BufferGetAsBytesMethodInfo
ResolveBufferMethod "getData" o = BufferGetDataMethodInfo
ResolveBufferMethod "getOwner" o = BufferGetOwnerMethodInfo
ResolveBufferMethod l o = MethodResolutionFailed l o
instance (info ~ ResolveBufferMethod t Buffer, MethodInfo info Buffer p) => IsLabelProxy t (Buffer -> p) where
fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveBufferMethod t Buffer, MethodInfo info Buffer p) => IsLabel t (Buffer -> p) where
fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif