{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Represents a similarity metric.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.Ggit.Structs.DiffSimilarityMetric
    ( 

-- * Exported types
    DiffSimilarityMetric(..)                ,
    noDiffSimilarityMetric                  ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded methods#

#if defined(ENABLE_OVERLOADING)
    ResolveDiffSimilarityMetricMethod       ,
#endif


-- ** copy #method:copy#

#if defined(ENABLE_OVERLOADING)
    DiffSimilarityMetricCopyMethodInfo      ,
#endif
    diffSimilarityMetricCopy                ,


-- ** free #method:free#

#if defined(ENABLE_OVERLOADING)
    DiffSimilarityMetricFreeMethodInfo      ,
#endif
    diffSimilarityMetricFree                ,


-- ** new #method:new#

    diffSimilarityMetricNew                 ,




    ) 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.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
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 GHC.OverloadedLabels as OL

import qualified GI.Ggit.Callbacks as Ggit.Callbacks

-- | Memory-managed wrapper type.
newtype DiffSimilarityMetric = DiffSimilarityMetric (ManagedPtr DiffSimilarityMetric)
    deriving (DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
(DiffSimilarityMetric -> DiffSimilarityMetric -> Bool)
-> (DiffSimilarityMetric -> DiffSimilarityMetric -> Bool)
-> Eq DiffSimilarityMetric
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
$c/= :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
== :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
$c== :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
Eq)
foreign import ccall "ggit_diff_similarity_metric_get_type" c_ggit_diff_similarity_metric_get_type :: 
    IO GType

instance BoxedObject DiffSimilarityMetric where
    boxedType :: DiffSimilarityMetric -> IO GType
boxedType _ = IO GType
c_ggit_diff_similarity_metric_get_type

-- | Convert 'DiffSimilarityMetric' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue DiffSimilarityMetric where
    toGValue :: DiffSimilarityMetric -> IO GValue
toGValue o :: DiffSimilarityMetric
o = do
        GType
gtype <- IO GType
c_ggit_diff_similarity_metric_get_type
        DiffSimilarityMetric
-> (Ptr DiffSimilarityMetric -> IO GValue) -> IO GValue
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr DiffSimilarityMetric
o (GType
-> (GValue -> Ptr DiffSimilarityMetric -> IO ())
-> Ptr DiffSimilarityMetric
-> IO GValue
forall a. GType -> (GValue -> a -> IO ()) -> a -> IO GValue
B.GValue.buildGValue GType
gtype GValue -> Ptr DiffSimilarityMetric -> IO ()
forall a. GValue -> Ptr a -> IO ()
B.GValue.set_boxed)
        
    fromGValue :: GValue -> IO DiffSimilarityMetric
fromGValue gv :: GValue
gv = do
        Ptr DiffSimilarityMetric
ptr <- GValue -> IO (Ptr DiffSimilarityMetric)
forall b. GValue -> IO (Ptr b)
B.GValue.get_boxed GValue
gv :: IO (Ptr DiffSimilarityMetric)
        (ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.newBoxed ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric
DiffSimilarityMetric Ptr DiffSimilarityMetric
ptr
        
    

-- | A convenience alias for `Nothing` :: `Maybe` `DiffSimilarityMetric`.
noDiffSimilarityMetric :: Maybe DiffSimilarityMetric
noDiffSimilarityMetric :: Maybe DiffSimilarityMetric
noDiffSimilarityMetric = Maybe DiffSimilarityMetric
forall a. Maybe a
Nothing


#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList DiffSimilarityMetric
type instance O.AttributeList DiffSimilarityMetric = DiffSimilarityMetricAttributeList
type DiffSimilarityMetricAttributeList = ('[ ] :: [(Symbol, *)])
#endif

-- method DiffSimilarityMetric::new
-- method type : Constructor
-- Args: [ Arg
--           { argCName = "file_signature"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "Ggit"
--                   , name = "DiffSimilarityMetricFileSignatureCallback"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GgitDiffSimilarityMetricFileSignature."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeCall
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "buffer_signature"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "Ggit"
--                   , name = "DiffSimilarityMetricBufferSignatureCallback"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GgitDiffSimilarityMetricBufferSignature."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeCall
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "free_signature"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "Ggit"
--                   , name = "DiffSimilarityMetricFreeSignatureCallback"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GgitDiffSimilarityMetricFreeSignature."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeCall
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "similarity"
--           , argType =
--               TInterface
--                 Name
--                   { namespace = "Ggit"
--                   , name = "DiffSimilarityMetricSimilarityCallback"
--                   }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GgitDiffSimilarityMetricSimilarity."
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeCall
--           , argClosure = 4
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "user_data"
--           , argType = TBasicType TPtr
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just "passed as user_data to the previous parameters."
--                 , 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_diff_similarity_metric_new" ggit_diff_similarity_metric_new :: 
    FunPtr Ggit.Callbacks.C_DiffSimilarityMetricFileSignatureCallback -> -- file_signature : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetricFileSignatureCallback"})
    FunPtr Ggit.Callbacks.C_DiffSimilarityMetricBufferSignatureCallback -> -- buffer_signature : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetricBufferSignatureCallback"})
    FunPtr Ggit.Callbacks.C_DiffSimilarityMetricFreeSignatureCallback -> -- free_signature : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetricFreeSignatureCallback"})
    FunPtr Ggit.Callbacks.C_DiffSimilarityMetricSimilarityCallback -> -- similarity : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetricSimilarityCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO (Ptr DiffSimilarityMetric)

-- | Creates a new t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric'.
diffSimilarityMetricNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Ggit.Callbacks.DiffSimilarityMetricFileSignatureCallback
    -- ^ /@fileSignature@/: a @/GgitDiffSimilarityMetricFileSignature/@.
    -> Ggit.Callbacks.DiffSimilarityMetricBufferSignatureCallback
    -- ^ /@bufferSignature@/: a @/GgitDiffSimilarityMetricBufferSignature/@.
    -> Ggit.Callbacks.DiffSimilarityMetricFreeSignatureCallback
    -- ^ /@freeSignature@/: a @/GgitDiffSimilarityMetricFreeSignature/@.
    -> Ggit.Callbacks.DiffSimilarityMetricSimilarityCallback
    -- ^ /@similarity@/: a @/GgitDiffSimilarityMetricSimilarity/@.
    -> m DiffSimilarityMetric
    -- ^ __Returns:__ a newly allocated t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric'.
diffSimilarityMetricNew :: DiffSimilarityMetricFileSignatureCallback
-> DiffSimilarityMetricBufferSignatureCallback
-> DiffSimilarityMetricFreeSignatureCallback
-> DiffSimilarityMetricSimilarityCallback
-> m DiffSimilarityMetric
diffSimilarityMetricNew fileSignature :: DiffSimilarityMetricFileSignatureCallback
fileSignature bufferSignature :: DiffSimilarityMetricBufferSignatureCallback
bufferSignature freeSignature :: DiffSimilarityMetricFreeSignatureCallback
freeSignature similarity :: DiffSimilarityMetricSimilarityCallback
similarity = IO DiffSimilarityMetric -> m DiffSimilarityMetric
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO DiffSimilarityMetric -> m DiffSimilarityMetric)
-> IO DiffSimilarityMetric -> m DiffSimilarityMetric
forall a b. (a -> b) -> a -> b
$ do
    FunPtr C_DiffSimilarityMetricFileSignatureCallback
fileSignature' <- C_DiffSimilarityMetricFileSignatureCallback
-> IO (FunPtr C_DiffSimilarityMetricFileSignatureCallback)
Ggit.Callbacks.mk_DiffSimilarityMetricFileSignatureCallback (Maybe (Ptr (FunPtr C_DiffSimilarityMetricFileSignatureCallback))
-> DiffSimilarityMetricFileSignatureCallback_WithClosures
-> C_DiffSimilarityMetricFileSignatureCallback
Ggit.Callbacks.wrap_DiffSimilarityMetricFileSignatureCallback Maybe (Ptr (FunPtr C_DiffSimilarityMetricFileSignatureCallback))
forall a. Maybe a
Nothing (DiffSimilarityMetricFileSignatureCallback
-> DiffSimilarityMetricFileSignatureCallback_WithClosures
Ggit.Callbacks.drop_closures_DiffSimilarityMetricFileSignatureCallback DiffSimilarityMetricFileSignatureCallback
fileSignature))
    FunPtr C_DiffSimilarityMetricBufferSignatureCallback
bufferSignature' <- C_DiffSimilarityMetricBufferSignatureCallback
-> IO (FunPtr C_DiffSimilarityMetricBufferSignatureCallback)
Ggit.Callbacks.mk_DiffSimilarityMetricBufferSignatureCallback (Maybe (Ptr (FunPtr C_DiffSimilarityMetricBufferSignatureCallback))
-> DiffSimilarityMetricBufferSignatureCallback_WithClosures
-> C_DiffSimilarityMetricBufferSignatureCallback
Ggit.Callbacks.wrap_DiffSimilarityMetricBufferSignatureCallback Maybe (Ptr (FunPtr C_DiffSimilarityMetricBufferSignatureCallback))
forall a. Maybe a
Nothing (DiffSimilarityMetricBufferSignatureCallback
-> DiffSimilarityMetricBufferSignatureCallback_WithClosures
Ggit.Callbacks.drop_closures_DiffSimilarityMetricBufferSignatureCallback DiffSimilarityMetricBufferSignatureCallback
bufferSignature))
    FunPtr C_DiffSimilarityMetricFreeSignatureCallback
freeSignature' <- C_DiffSimilarityMetricFreeSignatureCallback
-> IO (FunPtr C_DiffSimilarityMetricFreeSignatureCallback)
Ggit.Callbacks.mk_DiffSimilarityMetricFreeSignatureCallback (Maybe (Ptr (FunPtr C_DiffSimilarityMetricFreeSignatureCallback))
-> C_DiffSimilarityMetricFreeSignatureCallback
-> C_DiffSimilarityMetricFreeSignatureCallback
Ggit.Callbacks.wrap_DiffSimilarityMetricFreeSignatureCallback Maybe (Ptr (FunPtr C_DiffSimilarityMetricFreeSignatureCallback))
forall a. Maybe a
Nothing (DiffSimilarityMetricFreeSignatureCallback
-> C_DiffSimilarityMetricFreeSignatureCallback
Ggit.Callbacks.drop_closures_DiffSimilarityMetricFreeSignatureCallback DiffSimilarityMetricFreeSignatureCallback
freeSignature))
    FunPtr C_DiffSimilarityMetricSimilarityCallback
similarity' <- C_DiffSimilarityMetricSimilarityCallback
-> IO (FunPtr C_DiffSimilarityMetricSimilarityCallback)
Ggit.Callbacks.mk_DiffSimilarityMetricSimilarityCallback (Maybe (Ptr (FunPtr C_DiffSimilarityMetricSimilarityCallback))
-> C_DiffSimilarityMetricSimilarityCallback
-> C_DiffSimilarityMetricSimilarityCallback
Ggit.Callbacks.wrap_DiffSimilarityMetricSimilarityCallback Maybe (Ptr (FunPtr C_DiffSimilarityMetricSimilarityCallback))
forall a. Maybe a
Nothing (DiffSimilarityMetricSimilarityCallback
-> C_DiffSimilarityMetricSimilarityCallback
Ggit.Callbacks.drop_closures_DiffSimilarityMetricSimilarityCallback DiffSimilarityMetricSimilarityCallback
similarity))
    let userData :: Ptr a
userData = Ptr a
forall a. Ptr a
nullPtr
    Ptr DiffSimilarityMetric
result <- FunPtr C_DiffSimilarityMetricFileSignatureCallback
-> FunPtr C_DiffSimilarityMetricBufferSignatureCallback
-> FunPtr C_DiffSimilarityMetricFreeSignatureCallback
-> FunPtr C_DiffSimilarityMetricSimilarityCallback
-> Ptr ()
-> IO (Ptr DiffSimilarityMetric)
ggit_diff_similarity_metric_new FunPtr C_DiffSimilarityMetricFileSignatureCallback
fileSignature' FunPtr C_DiffSimilarityMetricBufferSignatureCallback
bufferSignature' FunPtr C_DiffSimilarityMetricFreeSignatureCallback
freeSignature' FunPtr C_DiffSimilarityMetricSimilarityCallback
similarity' Ptr ()
forall a. Ptr a
userData
    Text -> Ptr DiffSimilarityMetric -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL "diffSimilarityMetricNew" Ptr DiffSimilarityMetric
result
    DiffSimilarityMetric
result' <- ((ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric
DiffSimilarityMetric) Ptr DiffSimilarityMetric
result
    Ptr Any -> IO ()
forall a. Ptr a -> IO ()
safeFreeFunPtr (Ptr Any -> IO ()) -> Ptr Any -> IO ()
forall a b. (a -> b) -> a -> b
$ FunPtr C_DiffSimilarityMetricFileSignatureCallback -> Ptr Any
forall a b. FunPtr a -> Ptr b
castFunPtrToPtr FunPtr C_DiffSimilarityMetricFileSignatureCallback
fileSignature'
    Ptr Any -> IO ()
forall a. Ptr a -> IO ()
safeFreeFunPtr (Ptr Any -> IO ()) -> Ptr Any -> IO ()
forall a b. (a -> b) -> a -> b
$ FunPtr C_DiffSimilarityMetricBufferSignatureCallback -> Ptr Any
forall a b. FunPtr a -> Ptr b
castFunPtrToPtr FunPtr C_DiffSimilarityMetricBufferSignatureCallback
bufferSignature'
    Ptr Any -> IO ()
forall a. Ptr a -> IO ()
safeFreeFunPtr (Ptr Any -> IO ()) -> Ptr Any -> IO ()
forall a b. (a -> b) -> a -> b
$ FunPtr C_DiffSimilarityMetricFreeSignatureCallback -> Ptr Any
forall a b. FunPtr a -> Ptr b
castFunPtrToPtr FunPtr C_DiffSimilarityMetricFreeSignatureCallback
freeSignature'
    Ptr Any -> IO ()
forall a. Ptr a -> IO ()
safeFreeFunPtr (Ptr Any -> IO ()) -> Ptr Any -> IO ()
forall a b. (a -> b) -> a -> b
$ FunPtr C_DiffSimilarityMetricSimilarityCallback -> Ptr Any
forall a b. FunPtr a -> Ptr b
castFunPtrToPtr FunPtr C_DiffSimilarityMetricSimilarityCallback
similarity'
    DiffSimilarityMetric -> IO DiffSimilarityMetric
forall (m :: * -> *) a. Monad m => a -> m a
return DiffSimilarityMetric
result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method DiffSimilarityMetric::copy
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "metric"
--           , argType =
--               TInterface
--                 Name { namespace = "Ggit" , name = "DiffSimilarityMetric" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GgitDiffSimilarityMetric."
--                 , 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_diff_similarity_metric_copy" ggit_diff_similarity_metric_copy :: 
    Ptr DiffSimilarityMetric ->             -- metric : TInterface (Name {namespace = "Ggit", name = "DiffSimilarityMetric"})
    IO (Ptr DiffSimilarityMetric)

-- | Copies /@metric@/ into a newly allocated t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric'.
diffSimilarityMetricCopy ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    DiffSimilarityMetric
    -- ^ /@metric@/: a t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric'.
    -> m (Maybe DiffSimilarityMetric)
    -- ^ __Returns:__ a newly allocated t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric' or 'P.Nothing'.
diffSimilarityMetricCopy :: DiffSimilarityMetric -> m (Maybe DiffSimilarityMetric)
diffSimilarityMetricCopy metric :: DiffSimilarityMetric
metric = IO (Maybe DiffSimilarityMetric) -> m (Maybe DiffSimilarityMetric)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe DiffSimilarityMetric) -> m (Maybe DiffSimilarityMetric))
-> IO (Maybe DiffSimilarityMetric)
-> m (Maybe DiffSimilarityMetric)
forall a b. (a -> b) -> a -> b
$ do
    Ptr DiffSimilarityMetric
metric' <- DiffSimilarityMetric -> IO (Ptr DiffSimilarityMetric)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr DiffSimilarityMetric
metric
    Ptr DiffSimilarityMetric
result <- Ptr DiffSimilarityMetric -> IO (Ptr DiffSimilarityMetric)
ggit_diff_similarity_metric_copy Ptr DiffSimilarityMetric
metric'
    Maybe DiffSimilarityMetric
maybeResult <- Ptr DiffSimilarityMetric
-> (Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric)
-> IO (Maybe DiffSimilarityMetric)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
convertIfNonNull Ptr DiffSimilarityMetric
result ((Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric)
 -> IO (Maybe DiffSimilarityMetric))
-> (Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric)
-> IO (Maybe DiffSimilarityMetric)
forall a b. (a -> b) -> a -> b
$ \result' :: Ptr DiffSimilarityMetric
result' -> do
        DiffSimilarityMetric
result'' <- ((ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric
DiffSimilarityMetric) Ptr DiffSimilarityMetric
result'
        DiffSimilarityMetric -> IO DiffSimilarityMetric
forall (m :: * -> *) a. Monad m => a -> m a
return DiffSimilarityMetric
result''
    DiffSimilarityMetric -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr DiffSimilarityMetric
metric
    Maybe DiffSimilarityMetric -> IO (Maybe DiffSimilarityMetric)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe DiffSimilarityMetric
maybeResult

#if defined(ENABLE_OVERLOADING)
data DiffSimilarityMetricCopyMethodInfo
instance (signature ~ (m (Maybe DiffSimilarityMetric)), MonadIO m) => O.MethodInfo DiffSimilarityMetricCopyMethodInfo DiffSimilarityMetric signature where
    overloadedMethod = diffSimilarityMetricCopy

#endif

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

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

-- | Frees /@metric@/.
diffSimilarityMetricFree ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    DiffSimilarityMetric
    -- ^ /@metric@/: a t'GI.Ggit.Structs.DiffSimilarityMetric.DiffSimilarityMetric'.
    -> m ()
diffSimilarityMetricFree :: DiffSimilarityMetric -> m ()
diffSimilarityMetricFree metric :: DiffSimilarityMetric
metric = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr DiffSimilarityMetric
metric' <- DiffSimilarityMetric -> IO (Ptr DiffSimilarityMetric)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr DiffSimilarityMetric
metric
    Ptr DiffSimilarityMetric -> IO ()
ggit_diff_similarity_metric_free Ptr DiffSimilarityMetric
metric'
    DiffSimilarityMetric -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr DiffSimilarityMetric
metric
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data DiffSimilarityMetricFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo DiffSimilarityMetricFreeMethodInfo DiffSimilarityMetric signature where
    overloadedMethod = diffSimilarityMetricFree

#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveDiffSimilarityMetricMethod (t :: Symbol) (o :: *) :: * where
    ResolveDiffSimilarityMetricMethod "copy" o = DiffSimilarityMetricCopyMethodInfo
    ResolveDiffSimilarityMetricMethod "free" o = DiffSimilarityMetricFreeMethodInfo
    ResolveDiffSimilarityMetricMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDiffSimilarityMetricMethod t DiffSimilarityMetric, O.MethodInfo info DiffSimilarityMetric p) => OL.IsLabel t (DiffSimilarityMetric -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#endif