{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- 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                    ,
    noRepoFinderOverride                    ,


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

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

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

instance GObject RepoFinderOverride where
    gobjectType :: IO GType
gobjectType = IO GType
c_ostree_repo_finder_override_get_type
    

-- | Convert 'RepoFinderOverride' to and from 'Data.GI.Base.GValue.GValue' with 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue RepoFinderOverride where
    toGValue :: RepoFinderOverride -> IO GValue
toGValue o :: RepoFinderOverride
o = do
        GType
gtype <- IO GType
c_ostree_repo_finder_override_get_type
        RepoFinderOverride
-> (Ptr RepoFinderOverride -> IO GValue) -> IO GValue
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr RepoFinderOverride
o (GType
-> (GValue -> Ptr RepoFinderOverride -> IO ())
-> Ptr RepoFinderOverride
-> IO GValue
forall a. GType -> (GValue -> a -> IO ()) -> a -> IO GValue
B.GValue.buildGValue GType
gtype GValue -> Ptr RepoFinderOverride -> IO ()
forall a. GObject a => GValue -> Ptr a -> IO ()
B.GValue.set_object)
        
    fromGValue :: GValue -> IO RepoFinderOverride
fromGValue gv :: GValue
gv = do
        Ptr RepoFinderOverride
ptr <- GValue -> IO (Ptr RepoFinderOverride)
forall b. GObject b => GValue -> IO (Ptr b)
B.GValue.get_object GValue
gv :: IO (Ptr RepoFinderOverride)
        (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
        
    

-- | Type class for types which can be safely cast to `RepoFinderOverride`, for instance with `toRepoFinderOverride`.
class (GObject o, O.IsDescendantOf RepoFinderOverride o) => IsRepoFinderOverride o
instance (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 :: (MonadIO m, IsRepoFinderOverride o) => o -> m RepoFinderOverride
toRepoFinderOverride :: o -> m RepoFinderOverride
toRepoFinderOverride = IO RepoFinderOverride -> m RepoFinderOverride
forall (m :: * -> *) a. MonadIO m => IO a -> m a
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, GObject o, GObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
unsafeCastTo ManagedPtr RepoFinderOverride -> RepoFinderOverride
RepoFinderOverride

-- | A convenience alias for `Nothing` :: `Maybe` `RepoFinderOverride`.
noRepoFinderOverride :: Maybe RepoFinderOverride
noRepoFinderOverride :: Maybe RepoFinderOverride
noRepoFinderOverride = Maybe RepoFinderOverride
forall a. Maybe a
Nothing

#if defined(ENABLE_OVERLOADING)
type family ResolveRepoFinderOverrideMethod (t :: Symbol) (o :: *) :: * 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.MethodInfo 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

#endif

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

#if defined(ENABLE_OVERLOADING)
#endif

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

#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 :: m RepoFinderOverride
repoFinderOverrideNew  = IO RepoFinderOverride -> m RepoFinderOverride
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 "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 (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 :: a -> Text -> m ()
repoFinderOverrideAddUri self :: a
self uri :: Text
uri = 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 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 (m :: * -> *) a. Monad m => a -> m a
return ()

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

#endif