{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.OSTree.Objects.ChecksumInputStream
    ( 

-- * Exported types
    ChecksumInputStream(..)                 ,
    IsChecksumInputStream                   ,
    toChecksumInputStream                   ,
    noChecksumInputStream                   ,


 -- * Methods
-- ** new #method:new#
    checksumInputStreamNew                  ,




 -- * Properties
-- ** checksum #attr:checksum#
    ChecksumInputStreamChecksumPropertyInfo ,
    checksumInputStreamChecksum             ,
    constructChecksumInputStreamChecksum    ,
    getChecksumInputStreamChecksum          ,




    ) 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.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.GLib.Structs.Checksum as GLib.Checksum
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Objects.FilterInputStream as Gio.FilterInputStream
import qualified GI.Gio.Objects.InputStream as Gio.InputStream

newtype ChecksumInputStream = ChecksumInputStream (ManagedPtr ChecksumInputStream)
foreign import ccall "ostree_checksum_input_stream_get_type"
    c_ostree_checksum_input_stream_get_type :: IO GType

instance GObject ChecksumInputStream where
    gobjectType _ = c_ostree_checksum_input_stream_get_type
    

class GObject o => IsChecksumInputStream o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError ChecksumInputStream a) =>
    IsChecksumInputStream a
#endif
instance IsChecksumInputStream ChecksumInputStream
instance Gio.FilterInputStream.IsFilterInputStream ChecksumInputStream
instance Gio.InputStream.IsInputStream ChecksumInputStream
instance GObject.Object.IsObject ChecksumInputStream

toChecksumInputStream :: IsChecksumInputStream o => o -> IO ChecksumInputStream
toChecksumInputStream = unsafeCastTo ChecksumInputStream

noChecksumInputStream :: Maybe ChecksumInputStream
noChecksumInputStream = Nothing

type family ResolveChecksumInputStreamMethod (t :: Symbol) (o :: *) :: * where
    ResolveChecksumInputStreamMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveChecksumInputStreamMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveChecksumInputStreamMethod "clearPending" o = Gio.InputStream.InputStreamClearPendingMethodInfo
    ResolveChecksumInputStreamMethod "close" o = Gio.InputStream.InputStreamCloseMethodInfo
    ResolveChecksumInputStreamMethod "closeAsync" o = Gio.InputStream.InputStreamCloseAsyncMethodInfo
    ResolveChecksumInputStreamMethod "closeFinish" o = Gio.InputStream.InputStreamCloseFinishMethodInfo
    ResolveChecksumInputStreamMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveChecksumInputStreamMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveChecksumInputStreamMethod "hasPending" o = Gio.InputStream.InputStreamHasPendingMethodInfo
    ResolveChecksumInputStreamMethod "isClosed" o = Gio.InputStream.InputStreamIsClosedMethodInfo
    ResolveChecksumInputStreamMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveChecksumInputStreamMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveChecksumInputStreamMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveChecksumInputStreamMethod "read" o = Gio.InputStream.InputStreamReadMethodInfo
    ResolveChecksumInputStreamMethod "readAll" o = Gio.InputStream.InputStreamReadAllMethodInfo
    ResolveChecksumInputStreamMethod "readAllAsync" o = Gio.InputStream.InputStreamReadAllAsyncMethodInfo
    ResolveChecksumInputStreamMethod "readAllFinish" o = Gio.InputStream.InputStreamReadAllFinishMethodInfo
    ResolveChecksumInputStreamMethod "readAsync" o = Gio.InputStream.InputStreamReadAsyncMethodInfo
    ResolveChecksumInputStreamMethod "readBytes" o = Gio.InputStream.InputStreamReadBytesMethodInfo
    ResolveChecksumInputStreamMethod "readBytesAsync" o = Gio.InputStream.InputStreamReadBytesAsyncMethodInfo
    ResolveChecksumInputStreamMethod "readBytesFinish" o = Gio.InputStream.InputStreamReadBytesFinishMethodInfo
    ResolveChecksumInputStreamMethod "readFinish" o = Gio.InputStream.InputStreamReadFinishMethodInfo
    ResolveChecksumInputStreamMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveChecksumInputStreamMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveChecksumInputStreamMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveChecksumInputStreamMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveChecksumInputStreamMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveChecksumInputStreamMethod "skip" o = Gio.InputStream.InputStreamSkipMethodInfo
    ResolveChecksumInputStreamMethod "skipAsync" o = Gio.InputStream.InputStreamSkipAsyncMethodInfo
    ResolveChecksumInputStreamMethod "skipFinish" o = Gio.InputStream.InputStreamSkipFinishMethodInfo
    ResolveChecksumInputStreamMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveChecksumInputStreamMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveChecksumInputStreamMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveChecksumInputStreamMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveChecksumInputStreamMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveChecksumInputStreamMethod "getBaseStream" o = Gio.FilterInputStream.FilterInputStreamGetBaseStreamMethodInfo
    ResolveChecksumInputStreamMethod "getCloseBaseStream" o = Gio.FilterInputStream.FilterInputStreamGetCloseBaseStreamMethodInfo
    ResolveChecksumInputStreamMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveChecksumInputStreamMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveChecksumInputStreamMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveChecksumInputStreamMethod "setCloseBaseStream" o = Gio.FilterInputStream.FilterInputStreamSetCloseBaseStreamMethodInfo
    ResolveChecksumInputStreamMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveChecksumInputStreamMethod "setPending" o = Gio.InputStream.InputStreamSetPendingMethodInfo
    ResolveChecksumInputStreamMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveChecksumInputStreamMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveChecksumInputStreamMethod t ChecksumInputStream, O.MethodInfo info ChecksumInputStream p) => O.IsLabel t (ChecksumInputStream -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

-- VVV Prop "checksum"
   -- Type: TBasicType TPtr
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Nothing,Nothing)

getChecksumInputStreamChecksum :: (MonadIO m, IsChecksumInputStream o) => o -> m (Ptr ())
getChecksumInputStreamChecksum obj = liftIO $ getObjectPropertyPtr obj "checksum"

constructChecksumInputStreamChecksum :: (IsChecksumInputStream o) => Ptr () -> IO (GValueConstruct o)
constructChecksumInputStreamChecksum val = constructObjectPropertyPtr "checksum" val

data ChecksumInputStreamChecksumPropertyInfo
instance AttrInfo ChecksumInputStreamChecksumPropertyInfo where
    type AttrAllowedOps ChecksumInputStreamChecksumPropertyInfo = '[ 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint ChecksumInputStreamChecksumPropertyInfo = (~) (Ptr ())
    type AttrBaseTypeConstraint ChecksumInputStreamChecksumPropertyInfo = IsChecksumInputStream
    type AttrGetType ChecksumInputStreamChecksumPropertyInfo = (Ptr ())
    type AttrLabel ChecksumInputStreamChecksumPropertyInfo = "checksum"
    type AttrOrigin ChecksumInputStreamChecksumPropertyInfo = ChecksumInputStream
    attrGet _ = getChecksumInputStreamChecksum
    attrSet _ = undefined
    attrConstruct _ = constructChecksumInputStreamChecksum
    attrClear _ = undefined

instance O.HasAttributeList ChecksumInputStream
type instance O.AttributeList ChecksumInputStream = ChecksumInputStreamAttributeList
type ChecksumInputStreamAttributeList = ('[ '("baseStream", Gio.FilterInputStream.FilterInputStreamBaseStreamPropertyInfo), '("checksum", ChecksumInputStreamChecksumPropertyInfo), '("closeBaseStream", Gio.FilterInputStream.FilterInputStreamCloseBaseStreamPropertyInfo)] :: [(Symbol, *)])

checksumInputStreamChecksum :: AttrLabelProxy "checksum"
checksumInputStreamChecksum = AttrLabelProxy

type instance O.SignalList ChecksumInputStream = ChecksumInputStreamSignalList
type ChecksumInputStreamSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method ChecksumInputStream::new
-- method type : Constructor
-- Args : [Arg {argCName = "stream", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "checksum", argType = TInterface (Name {namespace = "GLib", name = "Checksum"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "OSTree", name = "ChecksumInputStream"}))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_input_stream_new" ostree_checksum_input_stream_new :: 
    Ptr Gio.InputStream.InputStream ->      -- stream : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr GLib.Checksum.Checksum ->           -- checksum : TInterface (Name {namespace = "GLib", name = "Checksum"})
    IO (Ptr ChecksumInputStream)

{- |
/No description available in the introspection data./
-}
checksumInputStreamNew ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.InputStream.IsInputStream a) =>
    a
    -> GLib.Checksum.Checksum
    -> m ChecksumInputStream
checksumInputStreamNew stream checksum = liftIO $ do
    stream' <- unsafeManagedPtrCastPtr stream
    checksum' <- unsafeManagedPtrGetPtr checksum
    result <- ostree_checksum_input_stream_new stream' checksum'
    checkUnexpectedReturnNULL "checksumInputStreamNew" result
    result' <- (wrapObject ChecksumInputStream) result
    touchManagedPtr stream
    touchManagedPtr checksum
    return result'