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

Represents the options used when merging.
-}

module GI.Ggit.Structs.MergeOptions
    ( 

-- * Exported types
    MergeOptions(..)                        ,
    noMergeOptions                          ,


 -- * Methods
-- ** copy #method:copy#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsCopyMethodInfo              ,
#endif
    mergeOptionsCopy                        ,


-- ** free #method:free#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsFreeMethodInfo              ,
#endif
    mergeOptionsFree                        ,


-- ** getFileFavor #method:getFileFavor#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsGetFileFavorMethodInfo      ,
#endif
    mergeOptionsGetFileFavor                ,


-- ** getFileFlags #method:getFileFlags#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsGetFileFlagsMethodInfo      ,
#endif
    mergeOptionsGetFileFlags                ,


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


-- ** getRenameThreshold #method:getRenameThreshold#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsGetRenameThresholdMethodInfo,
#endif
    mergeOptionsGetRenameThreshold          ,


-- ** getSimilarityMetric #method:getSimilarityMetric#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsGetSimilarityMetricMethodInfo,
#endif
    mergeOptionsGetSimilarityMetric         ,


-- ** getTargetLimit #method:getTargetLimit#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsGetTargetLimitMethodInfo    ,
#endif
    mergeOptionsGetTargetLimit              ,


-- ** new #method:new#
    mergeOptionsNew                         ,


-- ** setFileFavor #method:setFileFavor#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsSetFileFavorMethodInfo      ,
#endif
    mergeOptionsSetFileFavor                ,


-- ** setFileFlags #method:setFileFlags#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsSetFileFlagsMethodInfo      ,
#endif
    mergeOptionsSetFileFlags                ,


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


-- ** setRenameThreshold #method:setRenameThreshold#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsSetRenameThresholdMethodInfo,
#endif
    mergeOptionsSetRenameThreshold          ,


-- ** setSimilarityMetric #method:setSimilarityMetric#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsSetSimilarityMetricMethodInfo,
#endif
    mergeOptionsSetSimilarityMetric         ,


-- ** setTargetLimit #method:setTargetLimit#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    MergeOptionsSetTargetLimitMethodInfo    ,
#endif
    mergeOptionsSetTargetLimit              ,




    ) 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 {-# SOURCE #-} qualified GI.Ggit.Enums as Ggit.Enums
import {-# SOURCE #-} qualified GI.Ggit.Flags as Ggit.Flags
import {-# SOURCE #-} qualified GI.Ggit.Structs.DiffSimilarityMetric as Ggit.DiffSimilarityMetric

newtype MergeOptions = MergeOptions (ManagedPtr MergeOptions)
foreign import ccall "ggit_merge_options_get_type" c_ggit_merge_options_get_type :: 
    IO GType

instance BoxedObject MergeOptions where
    boxedType _ = c_ggit_merge_options_get_type

noMergeOptions :: Maybe MergeOptions
noMergeOptions = Nothing


#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList MergeOptions
type instance O.AttributeList MergeOptions = MergeOptionsAttributeList
type MergeOptionsAttributeList = ('[ ] :: [(Symbol, *)])
#endif

-- method MergeOptions::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Ggit", name = "MergeOptions"}))
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_new" ggit_merge_options_new :: 
    IO (Ptr MergeOptions)

{- |
Creates a new 'GI.Ggit.Structs.MergeOptions.MergeOptions'.
-}
mergeOptionsNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m MergeOptions
    {- ^ __Returns:__ a newly allocated 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
mergeOptionsNew  = liftIO $ do
    result <- ggit_merge_options_new
    checkUnexpectedReturnNULL "mergeOptionsNew" result
    result' <- (wrapBoxed MergeOptions) result
    return result'

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

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

foreign import ccall "ggit_merge_options_copy" ggit_merge_options_copy :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO (Ptr MergeOptions)

{- |
Copies /@mergeOptions@/ into a newly allocated 'GI.Ggit.Structs.MergeOptions.MergeOptions'.
-}
mergeOptionsCopy ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m MergeOptions
    {- ^ __Returns:__ a newly allocated 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
mergeOptionsCopy mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_copy mergeOptions'
    checkUnexpectedReturnNULL "mergeOptionsCopy" result
    result' <- (wrapBoxed MergeOptions) result
    touchManagedPtr mergeOptions
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsCopyMethodInfo
instance (signature ~ (m MergeOptions), MonadIO m) => O.MethodInfo MergeOptionsCopyMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsCopy

#endif

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

foreign import ccall "ggit_merge_options_free" ggit_merge_options_free :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO ()

{- |
Frees /@mergeOptions@/.
-}
mergeOptionsFree ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m ()
mergeOptionsFree mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    ggit_merge_options_free mergeOptions'
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo MergeOptionsFreeMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsFree

#endif

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

foreign import ccall "ggit_merge_options_get_file_favor" ggit_merge_options_get_file_favor :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO CUInt

{- |
Get flags for handling conflicting content.
-}
mergeOptionsGetFileFavor ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m Ggit.Enums.MergeFileFavor
    {- ^ __Returns:__ the file favor. -}
mergeOptionsGetFileFavor mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_file_favor mergeOptions'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr mergeOptions
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetFileFavorMethodInfo
instance (signature ~ (m Ggit.Enums.MergeFileFavor), MonadIO m) => O.MethodInfo MergeOptionsGetFileFavorMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetFileFavor

#endif

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

foreign import ccall "ggit_merge_options_get_file_flags" ggit_merge_options_get_file_flags :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO CUInt

{- |
Get file merging flags.
-}
mergeOptionsGetFileFlags ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m [Ggit.Flags.MergeFileFlags]
    {- ^ __Returns:__ the file merging flags. -}
mergeOptionsGetFileFlags mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_file_flags mergeOptions'
    let result' = wordToGFlags result
    touchManagedPtr mergeOptions
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetFileFlagsMethodInfo
instance (signature ~ (m [Ggit.Flags.MergeFileFlags]), MonadIO m) => O.MethodInfo MergeOptionsGetFileFlagsMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetFileFlags

#endif

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

foreign import ccall "ggit_merge_options_get_flags" ggit_merge_options_get_flags :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO CUInt

{- |
Get the tree flags to use for merging.
-}
mergeOptionsGetFlags ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m [Ggit.Flags.MergeFlags]
    {- ^ __Returns:__ the flags. -}
mergeOptionsGetFlags mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_flags mergeOptions'
    let result' = wordToGFlags result
    touchManagedPtr mergeOptions
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetFlagsMethodInfo
instance (signature ~ (m [Ggit.Flags.MergeFlags]), MonadIO m) => O.MethodInfo MergeOptionsGetFlagsMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetFlags

#endif

-- method MergeOptions::get_rename_threshold
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_get_rename_threshold" ggit_merge_options_get_rename_threshold :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO Word32

{- |
Get the rename threshold (defaults to 50). If @/GGIT_MERGE_TREE_FIND_RENAMES/@
is enabled, added files will be compared with deleted files to
determine their similarity. Files that are more similar than the rename
threshold (percentage-wise) will be treated as a rename.
-}
mergeOptionsGetRenameThreshold ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m Word32
    {- ^ __Returns:__ the rename threshold. -}
mergeOptionsGetRenameThreshold mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_rename_threshold mergeOptions'
    touchManagedPtr mergeOptions
    return result

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetRenameThresholdMethodInfo
instance (signature ~ (m Word32), MonadIO m) => O.MethodInfo MergeOptionsGetRenameThresholdMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetRenameThreshold

#endif

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

foreign import ccall "ggit_merge_options_get_similarity_metric" ggit_merge_options_get_similarity_metric :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO (Ptr Ggit.DiffSimilarityMetric.DiffSimilarityMetric)

{- |
Get the similarity metric.
-}
mergeOptionsGetSimilarityMetric ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m Ggit.DiffSimilarityMetric.DiffSimilarityMetric
    {- ^ __Returns:__ the similarity metric, or 'Nothing'. -}
mergeOptionsGetSimilarityMetric mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_similarity_metric mergeOptions'
    checkUnexpectedReturnNULL "mergeOptionsGetSimilarityMetric" result
    result' <- (newBoxed Ggit.DiffSimilarityMetric.DiffSimilarityMetric) result
    touchManagedPtr mergeOptions
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetSimilarityMetricMethodInfo
instance (signature ~ (m Ggit.DiffSimilarityMetric.DiffSimilarityMetric), MonadIO m) => O.MethodInfo MergeOptionsGetSimilarityMetricMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetSimilarityMetric

#endif

-- method MergeOptions::get_target_limit
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_get_target_limit" ggit_merge_options_get_target_limit :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    IO Word32

{- |
Get the maximum number of similarity sources to examine for renames (defaults to 200).
If the number of rename candidates (add \/ delete pairs) is greater than
this value, inexact rename detection is aborted.
-}
mergeOptionsGetTargetLimit ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> m Word32
    {- ^ __Returns:__ the target limit. -}
mergeOptionsGetTargetLimit mergeOptions = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    result <- ggit_merge_options_get_target_limit mergeOptions'
    touchManagedPtr mergeOptions
    return result

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsGetTargetLimitMethodInfo
instance (signature ~ (m Word32), MonadIO m) => O.MethodInfo MergeOptionsGetTargetLimitMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsGetTargetLimit

#endif

-- method MergeOptions::set_file_favor
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file_favor", argType = TInterface (Name {namespace = "Ggit", name = "MergeFileFavor"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the file favor.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_file_favor" ggit_merge_options_set_file_favor :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    CUInt ->                                -- file_favor : TInterface (Name {namespace = "Ggit", name = "MergeFileFavor"})
    IO ()

{- |
Set flags for handling conflicting content.
-}
mergeOptionsSetFileFavor ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> Ggit.Enums.MergeFileFavor
    {- ^ /@fileFavor@/: the file favor. -}
    -> m ()
mergeOptionsSetFileFavor mergeOptions fileFavor = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    let fileFavor' = (fromIntegral . fromEnum) fileFavor
    ggit_merge_options_set_file_favor mergeOptions' fileFavor'
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetFileFavorMethodInfo
instance (signature ~ (Ggit.Enums.MergeFileFavor -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetFileFavorMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetFileFavor

#endif

-- method MergeOptions::set_file_flags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file_flags", argType = TInterface (Name {namespace = "Ggit", name = "MergeFileFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the file flags.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_file_flags" ggit_merge_options_set_file_flags :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    CUInt ->                                -- file_flags : TInterface (Name {namespace = "Ggit", name = "MergeFileFlags"})
    IO ()

{- |
Set file merging flags.
-}
mergeOptionsSetFileFlags ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> [Ggit.Flags.MergeFileFlags]
    {- ^ /@fileFlags@/: the file flags. -}
    -> m ()
mergeOptionsSetFileFlags mergeOptions fileFlags = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    let fileFlags' = gflagsToWord fileFlags
    ggit_merge_options_set_file_flags mergeOptions' fileFlags'
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetFileFlagsMethodInfo
instance (signature ~ ([Ggit.Flags.MergeFileFlags] -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetFileFlagsMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetFileFlags

#endif

-- method MergeOptions::set_flags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Ggit", name = "MergeFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_flags" ggit_merge_options_set_flags :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    CUInt ->                                -- flags : TInterface (Name {namespace = "Ggit", name = "MergeFlags"})
    IO ()

{- |
/No description available in the introspection data./
-}
mergeOptionsSetFlags ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    -> [Ggit.Flags.MergeFlags]
    -> m ()
mergeOptionsSetFlags mergeOptions flags = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    let flags' = gflagsToWord flags
    ggit_merge_options_set_flags mergeOptions' flags'
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetFlagsMethodInfo
instance (signature ~ ([Ggit.Flags.MergeFlags] -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetFlagsMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetFlags

#endif

-- method MergeOptions::set_rename_threshold
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rename_threshold", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "similarity to consider a file renamed.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_rename_threshold" ggit_merge_options_set_rename_threshold :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    Word32 ->                               -- rename_threshold : TBasicType TUInt
    IO ()

{- |
Set the rename threshold (defaults to 50). If @/GGIT_MERGE_TREE_FIND_RENAMES/@
is enabled, added files will be compared with deleted files to
determine their similarity. Files that are more similar than the rename
threshold (percentage-wise) will be treated as a rename.
-}
mergeOptionsSetRenameThreshold ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> Word32
    {- ^ /@renameThreshold@/: similarity to consider a file renamed. -}
    -> m ()
mergeOptionsSetRenameThreshold mergeOptions renameThreshold = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    ggit_merge_options_set_rename_threshold mergeOptions' renameThreshold
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetRenameThresholdMethodInfo
instance (signature ~ (Word32 -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetRenameThresholdMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetRenameThreshold

#endif

-- method MergeOptions::set_similarity_metric
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "metric", argType = TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetric"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitSimilarityMetric.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_similarity_metric" ggit_merge_options_set_similarity_metric :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    Ptr Ggit.DiffSimilarityMetric.DiffSimilarityMetric -> -- metric : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetric"})
    IO ()

{- |
Set the similarity metric, or 'Nothing' for the default similarity metric.
-}
mergeOptionsSetSimilarityMetric ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> Ggit.DiffSimilarityMetric.DiffSimilarityMetric
    {- ^ /@metric@/: a @/GgitSimilarityMetric/@. -}
    -> m ()
mergeOptionsSetSimilarityMetric mergeOptions metric = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    metric' <- unsafeManagedPtrGetPtr metric
    ggit_merge_options_set_similarity_metric mergeOptions' metric'
    touchManagedPtr mergeOptions
    touchManagedPtr metric
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetSimilarityMetricMethodInfo
instance (signature ~ (Ggit.DiffSimilarityMetric.DiffSimilarityMetric -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetSimilarityMetricMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetSimilarityMetric

#endif

-- method MergeOptions::set_target_limit
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "merge_options", argType = TInterface (Name {namespace = "Ggit", name = "MergeOptions"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitMergeOptions.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "target_limit", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "maximum similarity source to examine for renames.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ggit_merge_options_set_target_limit" ggit_merge_options_set_target_limit :: 
    Ptr MergeOptions ->                     -- merge_options : TInterface (Name {namespace = "Ggit", name = "MergeOptions"})
    Word32 ->                               -- target_limit : TBasicType TUInt
    IO ()

{- |
Set the maximum number of similarity sources to examine for renames (defaults to 200).
If the number of rename candidates (add \/ delete pairs) is greater than
this value, inexact rename detection is aborted.
-}
mergeOptionsSetTargetLimit ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    MergeOptions
    {- ^ /@mergeOptions@/: a 'GI.Ggit.Structs.MergeOptions.MergeOptions'. -}
    -> Word32
    {- ^ /@targetLimit@/: maximum similarity source to examine for renames. -}
    -> m ()
mergeOptionsSetTargetLimit mergeOptions targetLimit = liftIO $ do
    mergeOptions' <- unsafeManagedPtrGetPtr mergeOptions
    ggit_merge_options_set_target_limit mergeOptions' targetLimit
    touchManagedPtr mergeOptions
    return ()

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data MergeOptionsSetTargetLimitMethodInfo
instance (signature ~ (Word32 -> m ()), MonadIO m) => O.MethodInfo MergeOptionsSetTargetLimitMethodInfo MergeOptions signature where
    overloadedMethod _ = mergeOptionsSetTargetLimit

#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveMergeOptionsMethod (t :: Symbol) (o :: *) :: * where
    ResolveMergeOptionsMethod "copy" o = MergeOptionsCopyMethodInfo
    ResolveMergeOptionsMethod "free" o = MergeOptionsFreeMethodInfo
    ResolveMergeOptionsMethod "getFileFavor" o = MergeOptionsGetFileFavorMethodInfo
    ResolveMergeOptionsMethod "getFileFlags" o = MergeOptionsGetFileFlagsMethodInfo
    ResolveMergeOptionsMethod "getFlags" o = MergeOptionsGetFlagsMethodInfo
    ResolveMergeOptionsMethod "getRenameThreshold" o = MergeOptionsGetRenameThresholdMethodInfo
    ResolveMergeOptionsMethod "getSimilarityMetric" o = MergeOptionsGetSimilarityMetricMethodInfo
    ResolveMergeOptionsMethod "getTargetLimit" o = MergeOptionsGetTargetLimitMethodInfo
    ResolveMergeOptionsMethod "setFileFavor" o = MergeOptionsSetFileFavorMethodInfo
    ResolveMergeOptionsMethod "setFileFlags" o = MergeOptionsSetFileFlagsMethodInfo
    ResolveMergeOptionsMethod "setFlags" o = MergeOptionsSetFlagsMethodInfo
    ResolveMergeOptionsMethod "setRenameThreshold" o = MergeOptionsSetRenameThresholdMethodInfo
    ResolveMergeOptionsMethod "setSimilarityMetric" o = MergeOptionsSetSimilarityMetricMethodInfo
    ResolveMergeOptionsMethod "setTargetLimit" o = MergeOptionsSetTargetLimitMethodInfo
    ResolveMergeOptionsMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveMergeOptionsMethod t MergeOptions, O.MethodInfo info MergeOptions p) => O.IsLabel t (MergeOptions -> 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