{- |
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.GtkSource.Objects.FileSaver
    ( 

-- * Exported types
    FileSaver(..)                           ,
    IsFileSaver                             ,
    toFileSaver                             ,
    noFileSaver                             ,


 -- * Methods
-- ** getBuffer #method:getBuffer#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetBufferMethodInfo            ,
#endif
    fileSaverGetBuffer                      ,


-- ** getCompressionType #method:getCompressionType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetCompressionTypeMethodInfo   ,
#endif
    fileSaverGetCompressionType             ,


-- ** getEncoding #method:getEncoding#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetEncodingMethodInfo          ,
#endif
    fileSaverGetEncoding                    ,


-- ** getFile #method:getFile#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetFileMethodInfo              ,
#endif
    fileSaverGetFile                        ,


-- ** getFlags #method:getFlags#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetFlagsMethodInfo             ,
#endif
    fileSaverGetFlags                       ,


-- ** getLocation #method:getLocation#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetLocationMethodInfo          ,
#endif
    fileSaverGetLocation                    ,


-- ** getNewlineType #method:getNewlineType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverGetNewlineTypeMethodInfo       ,
#endif
    fileSaverGetNewlineType                 ,


-- ** new #method:new#
    fileSaverNew                            ,


-- ** newWithTarget #method:newWithTarget#
    fileSaverNewWithTarget                  ,


-- ** saveAsync #method:saveAsync#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSaveAsyncMethodInfo            ,
#endif
    fileSaverSaveAsync                      ,


-- ** saveFinish #method:saveFinish#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSaveFinishMethodInfo           ,
#endif
    fileSaverSaveFinish                     ,


-- ** setCompressionType #method:setCompressionType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSetCompressionTypeMethodInfo   ,
#endif
    fileSaverSetCompressionType             ,


-- ** setEncoding #method:setEncoding#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSetEncodingMethodInfo          ,
#endif
    fileSaverSetEncoding                    ,


-- ** setFlags #method:setFlags#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSetFlagsMethodInfo             ,
#endif
    fileSaverSetFlags                       ,


-- ** setNewlineType #method:setNewlineType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverSetNewlineTypeMethodInfo       ,
#endif
    fileSaverSetNewlineType                 ,




 -- * Properties
-- ** buffer #attr:buffer#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverBufferPropertyInfo             ,
#endif
    constructFileSaverBuffer                ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverBuffer                         ,
#endif
    getFileSaverBuffer                      ,


-- ** compressionType #attr:compressionType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverCompressionTypePropertyInfo    ,
#endif
    constructFileSaverCompressionType       ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverCompressionType                ,
#endif
    getFileSaverCompressionType             ,
    setFileSaverCompressionType             ,


-- ** encoding #attr:encoding#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverEncodingPropertyInfo           ,
#endif
    clearFileSaverEncoding                  ,
    constructFileSaverEncoding              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverEncoding                       ,
#endif
    getFileSaverEncoding                    ,
    setFileSaverEncoding                    ,


-- ** file #attr:file#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverFilePropertyInfo               ,
#endif
    constructFileSaverFile                  ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverFile                           ,
#endif
    getFileSaverFile                        ,


-- ** flags #attr:flags#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverFlagsPropertyInfo              ,
#endif
    constructFileSaverFlags                 ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverFlags                          ,
#endif
    getFileSaverFlags                       ,
    setFileSaverFlags                       ,


-- ** location #attr:location#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverLocationPropertyInfo           ,
#endif
    constructFileSaverLocation              ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverLocation                       ,
#endif
    getFileSaverLocation                    ,


-- ** newlineType #attr:newlineType#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    FileSaverNewlineTypePropertyInfo        ,
#endif
    constructFileSaverNewlineType           ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    fileSaverNewlineType                    ,
#endif
    getFileSaverNewlineType                 ,
    setFileSaverNewlineType                 ,




    ) 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.Callbacks as GLib.Callbacks
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Callbacks as Gio.Callbacks
import qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import qualified GI.Gio.Interfaces.File as Gio.File
import qualified GI.Gio.Objects.Cancellable as Gio.Cancellable
import {-# SOURCE #-} qualified GI.GtkSource.Enums as GtkSource.Enums
import {-# SOURCE #-} qualified GI.GtkSource.Flags as GtkSource.Flags
import {-# SOURCE #-} qualified GI.GtkSource.Objects.Buffer as GtkSource.Buffer
import {-# SOURCE #-} qualified GI.GtkSource.Objects.File as GtkSource.File
import {-# SOURCE #-} qualified GI.GtkSource.Structs.Encoding as GtkSource.Encoding

newtype FileSaver = FileSaver (ManagedPtr FileSaver)
foreign import ccall "gtk_source_file_saver_get_type"
    c_gtk_source_file_saver_get_type :: IO GType

instance GObject FileSaver where
    gobjectType _ = c_gtk_source_file_saver_get_type
    

class GObject o => IsFileSaver o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError FileSaver a) =>
    IsFileSaver a
#endif
instance IsFileSaver FileSaver
instance GObject.Object.IsObject FileSaver

toFileSaver :: (MonadIO m, IsFileSaver o) => o -> m FileSaver
toFileSaver = liftIO . unsafeCastTo FileSaver

noFileSaver :: Maybe FileSaver
noFileSaver = Nothing

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveFileSaverMethod (t :: Symbol) (o :: *) :: * where
    ResolveFileSaverMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveFileSaverMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveFileSaverMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveFileSaverMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveFileSaverMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveFileSaverMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveFileSaverMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveFileSaverMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveFileSaverMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveFileSaverMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveFileSaverMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveFileSaverMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveFileSaverMethod "saveAsync" o = FileSaverSaveAsyncMethodInfo
    ResolveFileSaverMethod "saveFinish" o = FileSaverSaveFinishMethodInfo
    ResolveFileSaverMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveFileSaverMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveFileSaverMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveFileSaverMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveFileSaverMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveFileSaverMethod "getBuffer" o = FileSaverGetBufferMethodInfo
    ResolveFileSaverMethod "getCompressionType" o = FileSaverGetCompressionTypeMethodInfo
    ResolveFileSaverMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveFileSaverMethod "getEncoding" o = FileSaverGetEncodingMethodInfo
    ResolveFileSaverMethod "getFile" o = FileSaverGetFileMethodInfo
    ResolveFileSaverMethod "getFlags" o = FileSaverGetFlagsMethodInfo
    ResolveFileSaverMethod "getLocation" o = FileSaverGetLocationMethodInfo
    ResolveFileSaverMethod "getNewlineType" o = FileSaverGetNewlineTypeMethodInfo
    ResolveFileSaverMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveFileSaverMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveFileSaverMethod "setCompressionType" o = FileSaverSetCompressionTypeMethodInfo
    ResolveFileSaverMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveFileSaverMethod "setEncoding" o = FileSaverSetEncodingMethodInfo
    ResolveFileSaverMethod "setFlags" o = FileSaverSetFlagsMethodInfo
    ResolveFileSaverMethod "setNewlineType" o = FileSaverSetNewlineTypeMethodInfo
    ResolveFileSaverMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveFileSaverMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveFileSaverMethod t FileSaver, O.MethodInfo info FileSaver p) => O.IsLabel t (FileSaver -> 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 "buffer"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "Buffer"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Just False,Nothing)

getFileSaverBuffer :: (MonadIO m, IsFileSaver o) => o -> m GtkSource.Buffer.Buffer
getFileSaverBuffer obj = liftIO $ checkUnexpectedNothing "getFileSaverBuffer" $ getObjectPropertyObject obj "buffer" GtkSource.Buffer.Buffer

constructFileSaverBuffer :: (IsFileSaver o, GtkSource.Buffer.IsBuffer a) => a -> IO (GValueConstruct o)
constructFileSaverBuffer val = constructObjectPropertyObject "buffer" (Just val)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverBufferPropertyInfo
instance AttrInfo FileSaverBufferPropertyInfo where
    type AttrAllowedOps FileSaverBufferPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FileSaverBufferPropertyInfo = GtkSource.Buffer.IsBuffer
    type AttrBaseTypeConstraint FileSaverBufferPropertyInfo = IsFileSaver
    type AttrGetType FileSaverBufferPropertyInfo = GtkSource.Buffer.Buffer
    type AttrLabel FileSaverBufferPropertyInfo = "buffer"
    type AttrOrigin FileSaverBufferPropertyInfo = FileSaver
    attrGet _ = getFileSaverBuffer
    attrSet _ = undefined
    attrConstruct _ = constructFileSaverBuffer
    attrClear _ = undefined
#endif

-- VVV Prop "compression-type"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "CompressionType"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just False)

getFileSaverCompressionType :: (MonadIO m, IsFileSaver o) => o -> m GtkSource.Enums.CompressionType
getFileSaverCompressionType obj = liftIO $ getObjectPropertyEnum obj "compression-type"

setFileSaverCompressionType :: (MonadIO m, IsFileSaver o) => o -> GtkSource.Enums.CompressionType -> m ()
setFileSaverCompressionType obj val = liftIO $ setObjectPropertyEnum obj "compression-type" val

constructFileSaverCompressionType :: (IsFileSaver o) => GtkSource.Enums.CompressionType -> IO (GValueConstruct o)
constructFileSaverCompressionType val = constructObjectPropertyEnum "compression-type" val

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverCompressionTypePropertyInfo
instance AttrInfo FileSaverCompressionTypePropertyInfo where
    type AttrAllowedOps FileSaverCompressionTypePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint FileSaverCompressionTypePropertyInfo = (~) GtkSource.Enums.CompressionType
    type AttrBaseTypeConstraint FileSaverCompressionTypePropertyInfo = IsFileSaver
    type AttrGetType FileSaverCompressionTypePropertyInfo = GtkSource.Enums.CompressionType
    type AttrLabel FileSaverCompressionTypePropertyInfo = "compression-type"
    type AttrOrigin FileSaverCompressionTypePropertyInfo = FileSaver
    attrGet _ = getFileSaverCompressionType
    attrSet _ = setFileSaverCompressionType
    attrConstruct _ = constructFileSaverCompressionType
    attrClear _ = undefined
#endif

-- VVV Prop "encoding"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "Encoding"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just True)

getFileSaverEncoding :: (MonadIO m, IsFileSaver o) => o -> m GtkSource.Encoding.Encoding
getFileSaverEncoding obj = liftIO $ checkUnexpectedNothing "getFileSaverEncoding" $ getObjectPropertyBoxed obj "encoding" GtkSource.Encoding.Encoding

setFileSaverEncoding :: (MonadIO m, IsFileSaver o) => o -> GtkSource.Encoding.Encoding -> m ()
setFileSaverEncoding obj val = liftIO $ setObjectPropertyBoxed obj "encoding" (Just val)

constructFileSaverEncoding :: (IsFileSaver o) => GtkSource.Encoding.Encoding -> IO (GValueConstruct o)
constructFileSaverEncoding val = constructObjectPropertyBoxed "encoding" (Just val)

clearFileSaverEncoding :: (MonadIO m, IsFileSaver o) => o -> m ()
clearFileSaverEncoding obj = liftIO $ setObjectPropertyBoxed obj "encoding" (Nothing :: Maybe GtkSource.Encoding.Encoding)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverEncodingPropertyInfo
instance AttrInfo FileSaverEncodingPropertyInfo where
    type AttrAllowedOps FileSaverEncodingPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FileSaverEncodingPropertyInfo = (~) GtkSource.Encoding.Encoding
    type AttrBaseTypeConstraint FileSaverEncodingPropertyInfo = IsFileSaver
    type AttrGetType FileSaverEncodingPropertyInfo = GtkSource.Encoding.Encoding
    type AttrLabel FileSaverEncodingPropertyInfo = "encoding"
    type AttrOrigin FileSaverEncodingPropertyInfo = FileSaver
    attrGet _ = getFileSaverEncoding
    attrSet _ = setFileSaverEncoding
    attrConstruct _ = constructFileSaverEncoding
    attrClear _ = clearFileSaverEncoding
#endif

-- VVV Prop "file"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "File"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Just False,Nothing)

getFileSaverFile :: (MonadIO m, IsFileSaver o) => o -> m GtkSource.File.File
getFileSaverFile obj = liftIO $ checkUnexpectedNothing "getFileSaverFile" $ getObjectPropertyObject obj "file" GtkSource.File.File

constructFileSaverFile :: (IsFileSaver o, GtkSource.File.IsFile a) => a -> IO (GValueConstruct o)
constructFileSaverFile val = constructObjectPropertyObject "file" (Just val)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverFilePropertyInfo
instance AttrInfo FileSaverFilePropertyInfo where
    type AttrAllowedOps FileSaverFilePropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FileSaverFilePropertyInfo = GtkSource.File.IsFile
    type AttrBaseTypeConstraint FileSaverFilePropertyInfo = IsFileSaver
    type AttrGetType FileSaverFilePropertyInfo = GtkSource.File.File
    type AttrLabel FileSaverFilePropertyInfo = "file"
    type AttrOrigin FileSaverFilePropertyInfo = FileSaver
    attrGet _ = getFileSaverFile
    attrSet _ = undefined
    attrConstruct _ = constructFileSaverFile
    attrClear _ = undefined
#endif

-- VVV Prop "flags"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "FileSaverFlags"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just False)

getFileSaverFlags :: (MonadIO m, IsFileSaver o) => o -> m [GtkSource.Flags.FileSaverFlags]
getFileSaverFlags obj = liftIO $ getObjectPropertyFlags obj "flags"

setFileSaverFlags :: (MonadIO m, IsFileSaver o) => o -> [GtkSource.Flags.FileSaverFlags] -> m ()
setFileSaverFlags obj val = liftIO $ setObjectPropertyFlags obj "flags" val

constructFileSaverFlags :: (IsFileSaver o) => [GtkSource.Flags.FileSaverFlags] -> IO (GValueConstruct o)
constructFileSaverFlags val = constructObjectPropertyFlags "flags" val

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverFlagsPropertyInfo
instance AttrInfo FileSaverFlagsPropertyInfo where
    type AttrAllowedOps FileSaverFlagsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint FileSaverFlagsPropertyInfo = (~) [GtkSource.Flags.FileSaverFlags]
    type AttrBaseTypeConstraint FileSaverFlagsPropertyInfo = IsFileSaver
    type AttrGetType FileSaverFlagsPropertyInfo = [GtkSource.Flags.FileSaverFlags]
    type AttrLabel FileSaverFlagsPropertyInfo = "flags"
    type AttrOrigin FileSaverFlagsPropertyInfo = FileSaver
    attrGet _ = getFileSaverFlags
    attrSet _ = setFileSaverFlags
    attrConstruct _ = constructFileSaverFlags
    attrClear _ = undefined
#endif

-- VVV Prop "location"
   -- Type: TInterface (Name {namespace = "Gio", name = "File"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Just False,Nothing)

getFileSaverLocation :: (MonadIO m, IsFileSaver o) => o -> m Gio.File.File
getFileSaverLocation obj = liftIO $ checkUnexpectedNothing "getFileSaverLocation" $ getObjectPropertyObject obj "location" Gio.File.File

constructFileSaverLocation :: (IsFileSaver o, Gio.File.IsFile a) => a -> IO (GValueConstruct o)
constructFileSaverLocation val = constructObjectPropertyObject "location" (Just val)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverLocationPropertyInfo
instance AttrInfo FileSaverLocationPropertyInfo where
    type AttrAllowedOps FileSaverLocationPropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint FileSaverLocationPropertyInfo = Gio.File.IsFile
    type AttrBaseTypeConstraint FileSaverLocationPropertyInfo = IsFileSaver
    type AttrGetType FileSaverLocationPropertyInfo = Gio.File.File
    type AttrLabel FileSaverLocationPropertyInfo = "location"
    type AttrOrigin FileSaverLocationPropertyInfo = FileSaver
    attrGet _ = getFileSaverLocation
    attrSet _ = undefined
    attrConstruct _ = constructFileSaverLocation
    attrClear _ = undefined
#endif

-- VVV Prop "newline-type"
   -- Type: TInterface (Name {namespace = "GtkSource", name = "NewlineType"})
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstruct]
   -- Nullable: (Just False,Just False)

getFileSaverNewlineType :: (MonadIO m, IsFileSaver o) => o -> m GtkSource.Enums.NewlineType
getFileSaverNewlineType obj = liftIO $ getObjectPropertyEnum obj "newline-type"

setFileSaverNewlineType :: (MonadIO m, IsFileSaver o) => o -> GtkSource.Enums.NewlineType -> m ()
setFileSaverNewlineType obj val = liftIO $ setObjectPropertyEnum obj "newline-type" val

constructFileSaverNewlineType :: (IsFileSaver o) => GtkSource.Enums.NewlineType -> IO (GValueConstruct o)
constructFileSaverNewlineType val = constructObjectPropertyEnum "newline-type" val

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverNewlineTypePropertyInfo
instance AttrInfo FileSaverNewlineTypePropertyInfo where
    type AttrAllowedOps FileSaverNewlineTypePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint FileSaverNewlineTypePropertyInfo = (~) GtkSource.Enums.NewlineType
    type AttrBaseTypeConstraint FileSaverNewlineTypePropertyInfo = IsFileSaver
    type AttrGetType FileSaverNewlineTypePropertyInfo = GtkSource.Enums.NewlineType
    type AttrLabel FileSaverNewlineTypePropertyInfo = "newline-type"
    type AttrOrigin FileSaverNewlineTypePropertyInfo = FileSaver
    attrGet _ = getFileSaverNewlineType
    attrSet _ = setFileSaverNewlineType
    attrConstruct _ = constructFileSaverNewlineType
    attrClear _ = undefined
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList FileSaver
type instance O.AttributeList FileSaver = FileSaverAttributeList
type FileSaverAttributeList = ('[ '("buffer", FileSaverBufferPropertyInfo), '("compressionType", FileSaverCompressionTypePropertyInfo), '("encoding", FileSaverEncodingPropertyInfo), '("file", FileSaverFilePropertyInfo), '("flags", FileSaverFlagsPropertyInfo), '("location", FileSaverLocationPropertyInfo), '("newlineType", FileSaverNewlineTypePropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
fileSaverBuffer :: AttrLabelProxy "buffer"
fileSaverBuffer = AttrLabelProxy

fileSaverCompressionType :: AttrLabelProxy "compressionType"
fileSaverCompressionType = AttrLabelProxy

fileSaverEncoding :: AttrLabelProxy "encoding"
fileSaverEncoding = AttrLabelProxy

fileSaverFile :: AttrLabelProxy "file"
fileSaverFile = AttrLabelProxy

fileSaverFlags :: AttrLabelProxy "flags"
fileSaverFlags = AttrLabelProxy

fileSaverLocation :: AttrLabelProxy "location"
fileSaverLocation = AttrLabelProxy

fileSaverNewlineType :: AttrLabelProxy "newlineType"
fileSaverNewlineType = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type instance O.SignalList FileSaver = FileSaverSignalList
type FileSaverSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method FileSaver::new
-- method type : Constructor
-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "GtkSource", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkSourceBuffer to save.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file", argType = TInterface (Name {namespace = "GtkSource", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkSourceFile.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "FileSaver"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_new" gtk_source_file_saver_new :: 
    Ptr GtkSource.Buffer.Buffer ->          -- buffer : TInterface (Name {namespace = "GtkSource", name = "Buffer"})
    Ptr GtkSource.File.File ->              -- file : TInterface (Name {namespace = "GtkSource", name = "File"})
    IO (Ptr FileSaver)

{- |
Creates a new 'GI.GtkSource.Objects.FileSaver.FileSaver' object. The /@buffer@/ will be saved to the
'GI.GtkSource.Objects.File.File'\'s location.

This constructor is suitable for a simple \"save\" operation, when the /@file@/
already contains a non-'Nothing' 'GI.GtkSource.Objects.File.File':@/location/@.

@since 3.14
-}
fileSaverNew ::
    (B.CallStack.HasCallStack, MonadIO m, GtkSource.Buffer.IsBuffer a, GtkSource.File.IsFile b) =>
    a
    {- ^ /@buffer@/: the 'GI.GtkSource.Objects.Buffer.Buffer' to save. -}
    -> b
    {- ^ /@file@/: the 'GI.GtkSource.Objects.File.File'. -}
    -> m FileSaver
    {- ^ __Returns:__ a new 'GI.GtkSource.Objects.FileSaver.FileSaver' object. -}
fileSaverNew buffer file = liftIO $ do
    buffer' <- unsafeManagedPtrCastPtr buffer
    file' <- unsafeManagedPtrCastPtr file
    result <- gtk_source_file_saver_new buffer' file'
    checkUnexpectedReturnNULL "fileSaverNew" result
    result' <- (wrapObject FileSaver) result
    touchManagedPtr buffer
    touchManagedPtr file
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
#endif

-- method FileSaver::new_with_target
-- method type : Constructor
-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "GtkSource", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkSourceBuffer to save.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file", argType = TInterface (Name {namespace = "GtkSource", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GtkSourceFile.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target_location", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GFile where to save the buffer to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "FileSaver"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_new_with_target" gtk_source_file_saver_new_with_target :: 
    Ptr GtkSource.Buffer.Buffer ->          -- buffer : TInterface (Name {namespace = "GtkSource", name = "Buffer"})
    Ptr GtkSource.File.File ->              -- file : TInterface (Name {namespace = "GtkSource", name = "File"})
    Ptr Gio.File.File ->                    -- target_location : TInterface (Name {namespace = "Gio", name = "File"})
    IO (Ptr FileSaver)

{- |
Creates a new 'GI.GtkSource.Objects.FileSaver.FileSaver' object with a target location. When the
file saving is finished successfully, /@targetLocation@/ is set to the /@file@/\'s
'GI.GtkSource.Objects.File.File':@/location/@ property. If an error occurs, the previous valid
location is still available in 'GI.GtkSource.Objects.File.File'.

This constructor is suitable for a \"save as\" operation, or for saving a new
buffer for the first time.

@since 3.14
-}
fileSaverNewWithTarget ::
    (B.CallStack.HasCallStack, MonadIO m, GtkSource.Buffer.IsBuffer a, GtkSource.File.IsFile b, Gio.File.IsFile c) =>
    a
    {- ^ /@buffer@/: the 'GI.GtkSource.Objects.Buffer.Buffer' to save. -}
    -> b
    {- ^ /@file@/: the 'GI.GtkSource.Objects.File.File'. -}
    -> c
    {- ^ /@targetLocation@/: the 'GI.Gio.Interfaces.File.File' where to save the buffer to. -}
    -> m FileSaver
    {- ^ __Returns:__ a new 'GI.GtkSource.Objects.FileSaver.FileSaver' object. -}
fileSaverNewWithTarget buffer file targetLocation = liftIO $ do
    buffer' <- unsafeManagedPtrCastPtr buffer
    file' <- unsafeManagedPtrCastPtr file
    targetLocation' <- unsafeManagedPtrCastPtr targetLocation
    result <- gtk_source_file_saver_new_with_target buffer' file' targetLocation'
    checkUnexpectedReturnNULL "fileSaverNewWithTarget" result
    result' <- (wrapObject FileSaver) result
    touchManagedPtr buffer
    touchManagedPtr file
    touchManagedPtr targetLocation
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
#endif

-- method FileSaver::get_buffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "Buffer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_buffer" gtk_source_file_saver_get_buffer :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO (Ptr GtkSource.Buffer.Buffer)

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetBuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m GtkSource.Buffer.Buffer
    {- ^ __Returns:__ the 'GI.GtkSource.Objects.Buffer.Buffer' to save. -}
fileSaverGetBuffer saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_buffer saver'
    checkUnexpectedReturnNULL "fileSaverGetBuffer" result
    result' <- (newObject GtkSource.Buffer.Buffer) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetBufferMethodInfo
instance (signature ~ (m GtkSource.Buffer.Buffer), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetBufferMethodInfo a signature where
    overloadedMethod _ = fileSaverGetBuffer

#endif

-- method FileSaver::get_compression_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "CompressionType"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_compression_type" gtk_source_file_saver_get_compression_type :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO CUInt

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetCompressionType ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m GtkSource.Enums.CompressionType
    {- ^ __Returns:__ the compression type. -}
fileSaverGetCompressionType saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_compression_type saver'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetCompressionTypeMethodInfo
instance (signature ~ (m GtkSource.Enums.CompressionType), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetCompressionTypeMethodInfo a signature where
    overloadedMethod _ = fileSaverGetCompressionType

#endif

-- method FileSaver::get_encoding
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "Encoding"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_encoding" gtk_source_file_saver_get_encoding :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO (Ptr GtkSource.Encoding.Encoding)

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetEncoding ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m GtkSource.Encoding.Encoding
    {- ^ __Returns:__ the encoding. -}
fileSaverGetEncoding saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_encoding saver'
    checkUnexpectedReturnNULL "fileSaverGetEncoding" result
    result' <- (newBoxed GtkSource.Encoding.Encoding) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetEncodingMethodInfo
instance (signature ~ (m GtkSource.Encoding.Encoding), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetEncodingMethodInfo a signature where
    overloadedMethod _ = fileSaverGetEncoding

#endif

-- method FileSaver::get_file
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "File"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_file" gtk_source_file_saver_get_file :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO (Ptr GtkSource.File.File)

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetFile ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m GtkSource.File.File
    {- ^ __Returns:__ the 'GI.GtkSource.Objects.File.File'. -}
fileSaverGetFile saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_file saver'
    checkUnexpectedReturnNULL "fileSaverGetFile" result
    result' <- (newObject GtkSource.File.File) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetFileMethodInfo
instance (signature ~ (m GtkSource.File.File), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetFileMethodInfo a signature where
    overloadedMethod _ = fileSaverGetFile

#endif

-- method FileSaver::get_flags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "FileSaverFlags"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_flags" gtk_source_file_saver_get_flags :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO CUInt

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetFlags ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m [GtkSource.Flags.FileSaverFlags]
    {- ^ __Returns:__ the flags. -}
fileSaverGetFlags saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_flags saver'
    let result' = wordToGFlags result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetFlagsMethodInfo
instance (signature ~ (m [GtkSource.Flags.FileSaverFlags]), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetFlagsMethodInfo a signature where
    overloadedMethod _ = fileSaverGetFlags

#endif

-- method FileSaver::get_location
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gio", name = "File"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_location" gtk_source_file_saver_get_location :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO (Ptr Gio.File.File)

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetLocation ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m Gio.File.File
    {- ^ __Returns:__ the 'GI.Gio.Interfaces.File.File' where to save the buffer to. -}
fileSaverGetLocation saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_location saver'
    checkUnexpectedReturnNULL "fileSaverGetLocation" result
    result' <- (newObject Gio.File.File) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetLocationMethodInfo
instance (signature ~ (m Gio.File.File), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetLocationMethodInfo a signature where
    overloadedMethod _ = fileSaverGetLocation

#endif

-- method FileSaver::get_newline_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GtkSource", name = "NewlineType"}))
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_get_newline_type" gtk_source_file_saver_get_newline_type :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    IO CUInt

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverGetNewlineType ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> m GtkSource.Enums.NewlineType
    {- ^ __Returns:__ the newline type. -}
fileSaverGetNewlineType saver = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result <- gtk_source_file_saver_get_newline_type saver'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr saver
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverGetNewlineTypeMethodInfo
instance (signature ~ (m GtkSource.Enums.NewlineType), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverGetNewlineTypeMethodInfo a signature where
    overloadedMethod _ = fileSaverGetNewlineType

#endif

-- method FileSaver::save_async
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", 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 I/O priority of the request. E.g. %G_PRIORITY_LOW,\n  %G_PRIORITY_DEFAULT or %G_PRIORITY_HIGH.", 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 = "progress_callback", argType = TInterface (Name {namespace = "Gio", name = "FileProgressCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "function to call back with\n  progress information, or %NULL if progress information is not needed.", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 4, argDestroy = 5, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "progress_callback_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass to @progress_callback.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "progress_callback_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "function to call on\n  @progress_callback_data when the @progress_callback is no longer needed, or\n  %NULL.", sinceVersion = Nothing}, argScope = ScopeTypeAsync, 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 to call when the request is\n  satisfied.", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 7, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data to pass 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 "gtk_source_file_saver_save_async" gtk_source_file_saver_save_async :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    Int32 ->                                -- io_priority : TBasicType TInt
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    FunPtr Gio.Callbacks.C_FileProgressCallback -> -- progress_callback : TInterface (Name {namespace = "Gio", name = "FileProgressCallback"})
    Ptr () ->                               -- progress_callback_data : TBasicType TPtr
    FunPtr GLib.Callbacks.C_DestroyNotify -> -- progress_callback_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
    FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

{- |
Saves asynchronously the buffer into the file. See the 'GI.Gio.Interfaces.AsyncResult.AsyncResult'
documentation to know how to use this function.

@since 3.14
-}
fileSaverSaveAsync ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a, Gio.Cancellable.IsCancellable b) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> Int32
    {- ^ /@ioPriority@/: the I\/O priority of the request. E.g. 'GI.GLib.Constants.PRIORITY_LOW',
  'GI.GLib.Constants.PRIORITY_DEFAULT' or 'GI.GLib.Constants.PRIORITY_HIGH'. -}
    -> Maybe (b)
    {- ^ /@cancellable@/: optional 'GI.Gio.Objects.Cancellable.Cancellable' object, 'Nothing' to ignore. -}
    -> Maybe (Gio.Callbacks.FileProgressCallback)
    {- ^ /@progressCallback@/: function to call back with
  progress information, or 'Nothing' if progress information is not needed. -}
    -> Maybe (Gio.Callbacks.AsyncReadyCallback)
    {- ^ /@callback@/: a 'GI.Gio.Callbacks.AsyncReadyCallback' to call when the request is
  satisfied. -}
    -> m ()
fileSaverSaveAsync saver ioPriority cancellable progressCallback callback = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    maybeProgressCallback <- case progressCallback of
        Nothing -> return (castPtrToFunPtr nullPtr)
        Just jProgressCallback -> do
            jProgressCallback' <- Gio.Callbacks.mk_FileProgressCallback (Gio.Callbacks.wrap_FileProgressCallback Nothing (Gio.Callbacks.drop_closures_FileProgressCallback jProgressCallback))
            return jProgressCallback'
    ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
    maybeCallback <- case callback of
        Nothing -> return (castPtrToFunPtr nullPtr)
        Just jCallback -> do
            jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback))
            poke ptrcallback jCallback'
            return jCallback'
    let progressCallbackData = castFunPtrToPtr maybeProgressCallback
    let progressCallbackNotify = safeFreeFunPtrPtr
    let userData = nullPtr
    gtk_source_file_saver_save_async saver' ioPriority maybeCancellable maybeProgressCallback progressCallbackData progressCallbackNotify maybeCallback userData
    touchManagedPtr saver
    whenJust cancellable touchManagedPtr
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSaveAsyncMethodInfo
instance (signature ~ (Int32 -> Maybe (b) -> Maybe (Gio.Callbacks.FileProgressCallback) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsFileSaver a, Gio.Cancellable.IsCancellable b) => O.MethodInfo FileSaverSaveAsyncMethodInfo a signature where
    overloadedMethod _ = fileSaverSaveAsync

#endif

-- method FileSaver::save_finish
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", 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 "gtk_source_file_saver_save_finish" gtk_source_file_saver_save_finish :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    Ptr Gio.AsyncResult.AsyncResult ->      -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Finishes a file saving started with 'GI.GtkSource.Objects.FileSaver.fileSaverSaveAsync'.

If the file has been saved successfully, the following 'GI.GtkSource.Objects.File.File'
properties will be updated: the location, the encoding, the newline type and
the compression type.

Since the 3.20 version, 'GI.Gtk.Objects.TextBuffer.textBufferSetModified' is called with 'False'
if the file has been saved successfully.

@since 3.14
-}
fileSaverSaveFinish ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a, Gio.AsyncResult.IsAsyncResult b) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> b
    {- ^ /@result@/: a 'GI.Gio.Interfaces.AsyncResult.AsyncResult'. -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
fileSaverSaveFinish saver result_ = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    result_' <- unsafeManagedPtrCastPtr result_
    onException (do
        _ <- propagateGError $ gtk_source_file_saver_save_finish saver' result_'
        touchManagedPtr saver
        touchManagedPtr result_
        return ()
     ) (do
        return ()
     )

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSaveFinishMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, IsFileSaver a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo FileSaverSaveFinishMethodInfo a signature where
    overloadedMethod _ = fileSaverSaveFinish

#endif

-- method FileSaver::set_compression_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "compression_type", argType = TInterface (Name {namespace = "GtkSource", name = "CompressionType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new compression type.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_set_compression_type" gtk_source_file_saver_set_compression_type :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    CUInt ->                                -- compression_type : TInterface (Name {namespace = "GtkSource", name = "CompressionType"})
    IO ()

{- |
Sets the compression type. By default the compression type is taken from the
'GI.GtkSource.Objects.File.File'.

@since 3.14
-}
fileSaverSetCompressionType ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> GtkSource.Enums.CompressionType
    {- ^ /@compressionType@/: the new compression type. -}
    -> m ()
fileSaverSetCompressionType saver compressionType = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    let compressionType' = (fromIntegral . fromEnum) compressionType
    gtk_source_file_saver_set_compression_type saver' compressionType'
    touchManagedPtr saver
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSetCompressionTypeMethodInfo
instance (signature ~ (GtkSource.Enums.CompressionType -> m ()), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverSetCompressionTypeMethodInfo a signature where
    overloadedMethod _ = fileSaverSetCompressionType

#endif

-- method FileSaver::set_encoding
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "encoding", argType = TInterface (Name {namespace = "GtkSource", name = "Encoding"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the new encoding, or %NULL for UTF-8.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_set_encoding" gtk_source_file_saver_set_encoding :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    Ptr GtkSource.Encoding.Encoding ->      -- encoding : TInterface (Name {namespace = "GtkSource", name = "Encoding"})
    IO ()

{- |
Sets the encoding. If /@encoding@/ is 'Nothing', the UTF-8 encoding will be set.
By default the encoding is taken from the 'GI.GtkSource.Objects.File.File'.

@since 3.14
-}
fileSaverSetEncoding ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> Maybe (GtkSource.Encoding.Encoding)
    {- ^ /@encoding@/: the new encoding, or 'Nothing' for UTF-8. -}
    -> m ()
fileSaverSetEncoding saver encoding = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    maybeEncoding <- case encoding of
        Nothing -> return nullPtr
        Just jEncoding -> do
            jEncoding' <- unsafeManagedPtrGetPtr jEncoding
            return jEncoding'
    gtk_source_file_saver_set_encoding saver' maybeEncoding
    touchManagedPtr saver
    whenJust encoding touchManagedPtr
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSetEncodingMethodInfo
instance (signature ~ (Maybe (GtkSource.Encoding.Encoding) -> m ()), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverSetEncodingMethodInfo a signature where
    overloadedMethod _ = fileSaverSetEncoding

#endif

-- method FileSaver::set_flags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaverFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new flags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_set_flags" gtk_source_file_saver_set_flags :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    CUInt ->                                -- flags : TInterface (Name {namespace = "GtkSource", name = "FileSaverFlags"})
    IO ()

{- |
/No description available in the introspection data./

@since 3.14
-}
fileSaverSetFlags ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> [GtkSource.Flags.FileSaverFlags]
    {- ^ /@flags@/: the new flags. -}
    -> m ()
fileSaverSetFlags saver flags = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    let flags' = gflagsToWord flags
    gtk_source_file_saver_set_flags saver' flags'
    touchManagedPtr saver
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSetFlagsMethodInfo
instance (signature ~ ([GtkSource.Flags.FileSaverFlags] -> m ()), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverSetFlagsMethodInfo a signature where
    overloadedMethod _ = fileSaverSetFlags

#endif

-- method FileSaver::set_newline_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "saver", argType = TInterface (Name {namespace = "GtkSource", name = "FileSaver"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceFileSaver.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "newline_type", argType = TInterface (Name {namespace = "GtkSource", name = "NewlineType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new newline type.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_source_file_saver_set_newline_type" gtk_source_file_saver_set_newline_type :: 
    Ptr FileSaver ->                        -- saver : TInterface (Name {namespace = "GtkSource", name = "FileSaver"})
    CUInt ->                                -- newline_type : TInterface (Name {namespace = "GtkSource", name = "NewlineType"})
    IO ()

{- |
Sets the newline type. By default the newline type is taken from the
'GI.GtkSource.Objects.File.File'.

@since 3.14
-}
fileSaverSetNewlineType ::
    (B.CallStack.HasCallStack, MonadIO m, IsFileSaver a) =>
    a
    {- ^ /@saver@/: a 'GI.GtkSource.Objects.FileSaver.FileSaver'. -}
    -> GtkSource.Enums.NewlineType
    {- ^ /@newlineType@/: the new newline type. -}
    -> m ()
fileSaverSetNewlineType saver newlineType = liftIO $ do
    saver' <- unsafeManagedPtrCastPtr saver
    let newlineType' = (fromIntegral . fromEnum) newlineType
    gtk_source_file_saver_set_newline_type saver' newlineType'
    touchManagedPtr saver
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data FileSaverSetNewlineTypeMethodInfo
instance (signature ~ (GtkSource.Enums.NewlineType -> m ()), MonadIO m, IsFileSaver a) => O.MethodInfo FileSaverSetNewlineTypeMethodInfo a signature where
    overloadedMethod _ = fileSaverSetNewlineType

#endif