{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- 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(..)                ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [copy]("GI.Ggit.Structs.DiffSimilarityMetric#g:method:copy"), [free]("GI.Ggit.Structs.DiffSimilarityMetric#g:method:free").
-- 
-- ==== Getters
-- /None/.
-- 
-- ==== Setters
-- /None/.

#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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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 Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.Kind as DK
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 GHC.Records as R

import qualified GI.Ggit.Callbacks as Ggit.Callbacks

-- | Memory-managed wrapper type.
newtype DiffSimilarityMetric = DiffSimilarityMetric (SP.ManagedPtr DiffSimilarityMetric)
    deriving (DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
(DiffSimilarityMetric -> DiffSimilarityMetric -> Bool)
-> (DiffSimilarityMetric -> DiffSimilarityMetric -> Bool)
-> Eq DiffSimilarityMetric
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
== :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
$c/= :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
/= :: DiffSimilarityMetric -> DiffSimilarityMetric -> Bool
Eq)

instance SP.ManagedPtrNewtype DiffSimilarityMetric where
    toManagedPtr :: DiffSimilarityMetric -> ManagedPtr DiffSimilarityMetric
toManagedPtr (DiffSimilarityMetric ManagedPtr DiffSimilarityMetric
p) = ManagedPtr DiffSimilarityMetric
p

foreign import ccall "ggit_diff_similarity_metric_get_type" c_ggit_diff_similarity_metric_get_type :: 
    IO GType

type instance O.ParentTypes DiffSimilarityMetric = '[]
instance O.HasParentTypes DiffSimilarityMetric

instance B.Types.TypedObject DiffSimilarityMetric where
    glibType :: IO GType
glibType = IO GType
c_ggit_diff_similarity_metric_get_type

instance B.Types.GBoxed DiffSimilarityMetric

-- | Convert 'DiffSimilarityMetric' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe DiffSimilarityMetric) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_ggit_diff_similarity_metric_get_type
    gvalueSet_ :: Ptr GValue -> Maybe DiffSimilarityMetric -> IO ()
gvalueSet_ Ptr GValue
gv Maybe DiffSimilarityMetric
P.Nothing = Ptr GValue -> Ptr DiffSimilarityMetric -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv (Ptr DiffSimilarityMetric
forall a. Ptr a
FP.nullPtr :: FP.Ptr DiffSimilarityMetric)
    gvalueSet_ Ptr GValue
gv (P.Just DiffSimilarityMetric
obj) = DiffSimilarityMetric
-> (Ptr DiffSimilarityMetric -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr DiffSimilarityMetric
obj (Ptr GValue -> Ptr DiffSimilarityMetric -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe DiffSimilarityMetric)
gvalueGet_ Ptr GValue
gv = do
        Ptr DiffSimilarityMetric
ptr <- Ptr GValue -> IO (Ptr DiffSimilarityMetric)
forall b. Ptr GValue -> IO (Ptr b)
B.GValue.get_boxed Ptr GValue
gv :: IO (Ptr DiffSimilarityMetric)
        if Ptr DiffSimilarityMetric
ptr Ptr DiffSimilarityMetric -> Ptr DiffSimilarityMetric -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr DiffSimilarityMetric
forall a. Ptr a
FP.nullPtr
        then DiffSimilarityMetric -> Maybe DiffSimilarityMetric
forall a. a -> Maybe a
P.Just (DiffSimilarityMetric -> Maybe DiffSimilarityMetric)
-> IO DiffSimilarityMetric -> IO (Maybe DiffSimilarityMetric)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.newBoxed ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric
DiffSimilarityMetric Ptr DiffSimilarityMetric
ptr
        else Maybe DiffSimilarityMetric -> IO (Maybe DiffSimilarityMetric)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe DiffSimilarityMetric
forall a. Maybe a
P.Nothing
        
    


#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList DiffSimilarityMetric
type instance O.AttributeList DiffSimilarityMetric = DiffSimilarityMetricAttributeList
type DiffSimilarityMetricAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#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 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
DiffSimilarityMetricFileSignatureCallback
-> DiffSimilarityMetricBufferSignatureCallback
-> DiffSimilarityMetricFreeSignatureCallback
-> DiffSimilarityMetricSimilarityCallback
-> m DiffSimilarityMetric
diffSimilarityMetricNew DiffSimilarityMetricFileSignatureCallback
fileSignature DiffSimilarityMetricBufferSignatureCallback
bufferSignature DiffSimilarityMetricFreeSignatureCallback
freeSignature DiffSimilarityMetricSimilarityCallback
similarity = IO DiffSimilarityMetric -> m DiffSimilarityMetric
forall a. IO a -> m a
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 Text
"diffSimilarityMetricNew" Ptr DiffSimilarityMetric
result
    DiffSimilarityMetric
result' <- ((ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, GBoxed 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 a. a -> IO a
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 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
DiffSimilarityMetric -> m (Maybe DiffSimilarityMetric)
diffSimilarityMetricCopy DiffSimilarityMetric
metric = IO (Maybe DiffSimilarityMetric) -> m (Maybe DiffSimilarityMetric)
forall a. IO a -> m a
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
$ \Ptr DiffSimilarityMetric
result' -> do
        DiffSimilarityMetric
result'' <- ((ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric)
-> Ptr DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr DiffSimilarityMetric -> DiffSimilarityMetric
DiffSimilarityMetric) Ptr DiffSimilarityMetric
result'
        DiffSimilarityMetric -> IO DiffSimilarityMetric
forall a. a -> IO a
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 a. a -> IO a
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.OverloadedMethod DiffSimilarityMetricCopyMethodInfo DiffSimilarityMetric signature where
    overloadedMethod = diffSimilarityMetricCopy

instance O.OverloadedMethodInfo DiffSimilarityMetricCopyMethodInfo DiffSimilarityMetric where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Ggit.Structs.DiffSimilarityMetric.diffSimilarityMetricCopy",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-ggit-1.0.14/docs/GI-Ggit-Structs-DiffSimilarityMetric.html#v: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 :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
DiffSimilarityMetric -> m ()
diffSimilarityMetricFree DiffSimilarityMetric
metric = IO () -> m ()
forall a. IO a -> m a
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 a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

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

instance O.OverloadedMethodInfo DiffSimilarityMetricFreeMethodInfo DiffSimilarityMetric where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.Ggit.Structs.DiffSimilarityMetric.diffSimilarityMetricFree",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-ggit-1.0.14/docs/GI-Ggit-Structs-DiffSimilarityMetric.html#v:diffSimilarityMetricFree"
        })


#endif

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

instance (info ~ ResolveDiffSimilarityMetricMethod t DiffSimilarityMetric, O.OverloadedMethod 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

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveDiffSimilarityMetricMethod t DiffSimilarityMetric, O.OverloadedMethod info DiffSimilarityMetric p, R.HasField t DiffSimilarityMetric p) => R.HasField t DiffSimilarityMetric p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveDiffSimilarityMetricMethod t DiffSimilarityMetric, O.OverloadedMethodInfo info DiffSimilarityMetric) => OL.IsLabel t (O.MethodProxy info DiffSimilarityMetric) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif