{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- /No description available in the introspection data./

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

module GI.OSTree.Objects.RepoFinderOverride
    ( 

-- * Exported types
    RepoFinderOverride(..)                  ,
    IsRepoFinderOverride                    ,
    toRepoFinderOverride                    ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [addUri]("GI.OSTree.Objects.RepoFinderOverride#g:method:addUri"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [resolveAsync]("GI.OSTree.Interfaces.RepoFinder#g:method:resolveAsync"), [resolveFinish]("GI.OSTree.Interfaces.RepoFinder#g:method:resolveFinish"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveRepoFinderOverrideMethod         ,
#endif

-- ** addUri #method:addUri#

#if defined(ENABLE_OVERLOADING)
    RepoFinderOverrideAddUriMethodInfo      ,
#endif
    repoFinderOverrideAddUri                ,


-- ** new #method:new#

    repoFinderOverrideNew                   ,




    ) 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.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.OSTree.Interfaces.RepoFinder as OSTree.RepoFinder

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

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

foreign import ccall "ostree_repo_finder_override_get_type"
    c_ostree_repo_finder_override_get_type :: IO B.Types.GType

instance B.Types.TypedObject RepoFinderOverride where
    glibType :: IO GType
glibType = IO GType
c_ostree_repo_finder_override_get_type

instance B.Types.GObject RepoFinderOverride

-- | Type class for types which can be safely cast to `RepoFinderOverride`, for instance with `toRepoFinderOverride`.
class (SP.GObject o, O.IsDescendantOf RepoFinderOverride o) => IsRepoFinderOverride o
instance (SP.GObject o, O.IsDescendantOf RepoFinderOverride o) => IsRepoFinderOverride o

instance O.HasParentTypes RepoFinderOverride
type instance O.ParentTypes RepoFinderOverride = '[GObject.Object.Object, OSTree.RepoFinder.RepoFinder]

-- | Cast to `RepoFinderOverride`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toRepoFinderOverride :: (MIO.MonadIO m, IsRepoFinderOverride o) => o -> m RepoFinderOverride
toRepoFinderOverride :: forall (m :: * -> *) o.
(MonadIO m, IsRepoFinderOverride o) =>
o -> m RepoFinderOverride
toRepoFinderOverride = IO RepoFinderOverride -> m RepoFinderOverride
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO RepoFinderOverride -> m RepoFinderOverride)
-> (o -> IO RepoFinderOverride) -> o -> m RepoFinderOverride
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr RepoFinderOverride -> RepoFinderOverride)
-> o -> IO RepoFinderOverride
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr RepoFinderOverride -> RepoFinderOverride
RepoFinderOverride

-- | Convert 'RepoFinderOverride' 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 RepoFinderOverride) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_ostree_repo_finder_override_get_type
    gvalueSet_ :: Ptr GValue -> Maybe RepoFinderOverride -> IO ()
gvalueSet_ Ptr GValue
gv Maybe RepoFinderOverride
P.Nothing = Ptr GValue -> Ptr RepoFinderOverride -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr RepoFinderOverride
forall a. Ptr a
FP.nullPtr :: FP.Ptr RepoFinderOverride)
    gvalueSet_ Ptr GValue
gv (P.Just RepoFinderOverride
obj) = RepoFinderOverride -> (Ptr RepoFinderOverride -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr RepoFinderOverride
obj (Ptr GValue -> Ptr RepoFinderOverride -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe RepoFinderOverride)
gvalueGet_ Ptr GValue
gv = do
        Ptr RepoFinderOverride
ptr <- Ptr GValue -> IO (Ptr RepoFinderOverride)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr RepoFinderOverride)
        if Ptr RepoFinderOverride
ptr Ptr RepoFinderOverride -> Ptr RepoFinderOverride -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr RepoFinderOverride
forall a. Ptr a
FP.nullPtr
        then RepoFinderOverride -> Maybe RepoFinderOverride
forall a. a -> Maybe a
P.Just (RepoFinderOverride -> Maybe RepoFinderOverride)
-> IO RepoFinderOverride -> IO (Maybe RepoFinderOverride)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr RepoFinderOverride -> RepoFinderOverride)
-> Ptr RepoFinderOverride -> IO RepoFinderOverride
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr RepoFinderOverride -> RepoFinderOverride
RepoFinderOverride Ptr RepoFinderOverride
ptr
        else Maybe RepoFinderOverride -> IO (Maybe RepoFinderOverride)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe RepoFinderOverride
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveRepoFinderOverrideMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveRepoFinderOverrideMethod "addUri" o = RepoFinderOverrideAddUriMethodInfo
    ResolveRepoFinderOverrideMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveRepoFinderOverrideMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveRepoFinderOverrideMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveRepoFinderOverrideMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveRepoFinderOverrideMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveRepoFinderOverrideMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveRepoFinderOverrideMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveRepoFinderOverrideMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveRepoFinderOverrideMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveRepoFinderOverrideMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveRepoFinderOverrideMethod "resolveAsync" o = OSTree.RepoFinder.RepoFinderResolveAsyncMethodInfo
    ResolveRepoFinderOverrideMethod "resolveFinish" o = OSTree.RepoFinder.RepoFinderResolveFinishMethodInfo
    ResolveRepoFinderOverrideMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveRepoFinderOverrideMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveRepoFinderOverrideMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveRepoFinderOverrideMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveRepoFinderOverrideMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveRepoFinderOverrideMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveRepoFinderOverrideMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveRepoFinderOverrideMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveRepoFinderOverrideMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveRepoFinderOverrideMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveRepoFinderOverrideMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveRepoFinderOverrideMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveRepoFinderOverrideMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveRepoFinderOverrideMethod t RepoFinderOverride, O.OverloadedMethod info RepoFinderOverride p) => OL.IsLabel t (RepoFinderOverride -> 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 ~ ResolveRepoFinderOverrideMethod t RepoFinderOverride, O.OverloadedMethod info RepoFinderOverride p, R.HasField t RepoFinderOverride p) => R.HasField t RepoFinderOverride p where
    getField = O.overloadedMethod @info

#endif

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

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList RepoFinderOverride
type instance O.AttributeList RepoFinderOverride = RepoFinderOverrideAttributeList
type RepoFinderOverrideAttributeList = ('[ ] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList RepoFinderOverride = RepoFinderOverrideSignalList
type RepoFinderOverrideSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, DK.Type)])

#endif

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

foreign import ccall "ostree_repo_finder_override_new" ostree_repo_finder_override_new :: 
    IO (Ptr RepoFinderOverride)

-- | Create a new t'GI.OSTree.Objects.RepoFinderOverride.RepoFinderOverride'.
-- 
-- /Since: 2018.6/
repoFinderOverrideNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m RepoFinderOverride
    -- ^ __Returns:__ a new t'GI.OSTree.Objects.RepoFinderOverride.RepoFinderOverride'
repoFinderOverrideNew :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
m RepoFinderOverride
repoFinderOverrideNew  = IO RepoFinderOverride -> m RepoFinderOverride
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO RepoFinderOverride -> m RepoFinderOverride)
-> IO RepoFinderOverride -> m RepoFinderOverride
forall a b. (a -> b) -> a -> b
$ do
    Ptr RepoFinderOverride
result <- IO (Ptr RepoFinderOverride)
ostree_repo_finder_override_new
    Text -> Ptr RepoFinderOverride -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"repoFinderOverrideNew" Ptr RepoFinderOverride
result
    RepoFinderOverride
result' <- ((ManagedPtr RepoFinderOverride -> RepoFinderOverride)
-> Ptr RepoFinderOverride -> IO RepoFinderOverride
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
wrapObject ManagedPtr RepoFinderOverride -> RepoFinderOverride
RepoFinderOverride) Ptr RepoFinderOverride
result
    RepoFinderOverride -> IO RepoFinderOverride
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return RepoFinderOverride
result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method RepoFinderOverride::add_uri
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "self"
--           , argType =
--               TInterface
--                 Name { namespace = "OSTree" , name = "RepoFinderOverride" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "uri"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "URI to add to the repo finder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_repo_finder_override_add_uri" ostree_repo_finder_override_add_uri :: 
    Ptr RepoFinderOverride ->               -- self : TInterface (Name {namespace = "OSTree", name = "RepoFinderOverride"})
    CString ->                              -- uri : TBasicType TUTF8
    IO ()

-- | Add the given /@uri@/ to the set of URIs which the repo finder will search for
-- matching refs when 'GI.OSTree.Interfaces.RepoFinder.repoFinderResolveAsync' is called on it.
-- 
-- /Since: 2018.6/
repoFinderOverrideAddUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsRepoFinderOverride a) =>
    a
    -> T.Text
    -- ^ /@uri@/: URI to add to the repo finder
    -> m ()
repoFinderOverrideAddUri :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsRepoFinderOverride a) =>
a -> Text -> m ()
repoFinderOverrideAddUri a
self Text
uri = 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 RepoFinderOverride
self' <- a -> IO (Ptr RepoFinderOverride)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
self
    CString
uri' <- Text -> IO CString
textToCString Text
uri
    Ptr RepoFinderOverride -> CString -> IO ()
ostree_repo_finder_override_add_uri Ptr RepoFinderOverride
self' CString
uri'
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
self
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
uri'
    () -> IO ()
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data RepoFinderOverrideAddUriMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, IsRepoFinderOverride a) => O.OverloadedMethod RepoFinderOverrideAddUriMethodInfo a signature where
    overloadedMethod = repoFinderOverrideAddUri

instance O.OverloadedMethodInfo RepoFinderOverrideAddUriMethodInfo a where
    overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.OSTree.Objects.RepoFinderOverride.repoFinderOverrideAddUri",
        O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-ostree-1.0.18/docs/GI-OSTree-Objects-RepoFinderOverride.html#v:repoFinderOverrideAddUri"
        })


#endif