gi-soup-0.2.52.14: GI/Soup/Structs/MessageHeadersIter.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)
An opaque type used to iterate over a %SoupMessageHeaders
structure.
After intializing the iterator with
soup_message_headers_iter_init(), call
soup_message_headers_iter_next() to fetch data from it.
You may not modify the headers while iterating over them.
-}
module GI.Soup.Structs.MessageHeadersIter
(
-- * Exported types
MessageHeadersIter(..) ,
newZeroMessageHeadersIter ,
noMessageHeadersIter ,
-- * Methods
-- ** messageHeadersIterInit
messageHeadersIterInit ,
-- ** messageHeadersIterNext
MessageHeadersIterNextMethodInfo ,
messageHeadersIterNext ,
) where
import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.Attributes as GI.Attributes
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
newtype MessageHeadersIter = MessageHeadersIter (ForeignPtr MessageHeadersIter)
-- | Construct a `MessageHeadersIter` struct initialized to zero.
newZeroMessageHeadersIter :: MonadIO m => m MessageHeadersIter
newZeroMessageHeadersIter = liftIO $ callocBytes 24 >>= wrapPtr MessageHeadersIter
instance tag ~ 'AttrSet => Constructible MessageHeadersIter tag where
new _ attrs = do
o <- newZeroMessageHeadersIter
GI.Attributes.set o attrs
return o
noMessageHeadersIter :: Maybe MessageHeadersIter
noMessageHeadersIter = Nothing
type instance AttributeList MessageHeadersIter = MessageHeadersIterAttributeList
type MessageHeadersIterAttributeList = ('[ ] :: [(Symbol, *)])
-- method MessageHeadersIter::next
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Soup" "MessageHeadersIter", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False
foreign import ccall "soup_message_headers_iter_next" soup_message_headers_iter_next ::
Ptr MessageHeadersIter -> -- _obj : TInterface "Soup" "MessageHeadersIter"
Ptr CString -> -- name : TBasicType TUTF8
Ptr CString -> -- value : TBasicType TUTF8
IO CInt
messageHeadersIterNext ::
(MonadIO m) =>
MessageHeadersIter -- _obj
-> m (Bool,T.Text,T.Text) -- result
messageHeadersIterNext _obj = liftIO $ do
let _obj' = unsafeManagedPtrGetPtr _obj
name <- allocMem :: IO (Ptr CString)
value <- allocMem :: IO (Ptr CString)
result <- soup_message_headers_iter_next _obj' name value
let result' = (/= 0) result
name' <- peek name
name'' <- cstringToText name'
value' <- peek value
value'' <- cstringToText value'
touchManagedPtr _obj
freeMem name
freeMem value
return (result', name'', value'')
data MessageHeadersIterNextMethodInfo
instance (signature ~ (m (Bool,T.Text,T.Text)), MonadIO m) => MethodInfo MessageHeadersIterNextMethodInfo MessageHeadersIter signature where
overloadedMethod _ = messageHeadersIterNext
-- method MessageHeadersIter::init
-- method type : MemberFunction
-- Args : [Arg {argCName = "iter", argType = TInterface "Soup" "MessageHeadersIter", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferNothing},Arg {argCName = "hdrs", argType = TInterface "Soup" "MessageHeaders", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "soup_message_headers_iter_init" soup_message_headers_iter_init ::
Ptr MessageHeadersIter -> -- iter : TInterface "Soup" "MessageHeadersIter"
Ptr MessageHeaders -> -- hdrs : TInterface "Soup" "MessageHeaders"
IO ()
messageHeadersIterInit ::
(MonadIO m) =>
MessageHeaders -- hdrs
-> m (MessageHeadersIter) -- result
messageHeadersIterInit hdrs = liftIO $ do
iter <- callocBytes 24 :: IO (Ptr MessageHeadersIter)
let hdrs' = unsafeManagedPtrGetPtr hdrs
soup_message_headers_iter_init iter hdrs'
iter' <- (wrapPtr MessageHeadersIter) iter
touchManagedPtr hdrs
return iter'
type family ResolveMessageHeadersIterMethod (t :: Symbol) (o :: *) :: * where
ResolveMessageHeadersIterMethod "next" o = MessageHeadersIterNextMethodInfo
ResolveMessageHeadersIterMethod l o = MethodResolutionFailed l o
instance (info ~ ResolveMessageHeadersIterMethod t MessageHeadersIter, MethodInfo info MessageHeadersIter p) => IsLabelProxy t (MessageHeadersIter -> p) where
fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveMessageHeadersIterMethod t MessageHeadersIter, MethodInfo info MessageHeadersIter p) => IsLabel t (MessageHeadersIter -> p) where
fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif