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

/No description available in the introspection data./
-}

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

module GI.OSTree.Objects.RepoFinderOverride
    (

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


 -- * Methods
-- ** addUri #method:addUri#

#if 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.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)
foreign import ccall "ostree_repo_finder_override_get_type"
    c_ostree_repo_finder_override_get_type :: IO GType

instance GObject RepoFinderOverride where
    gobjectType = c_ostree_repo_finder_override_get_type


-- | 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 = liftIO . unsafeCastTo RepoFinderOverride

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

#if 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 "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 (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif

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

#if ENABLE_OVERLOADING
#endif

#if 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 'GI.OSTree.Objects.RepoFinderOverride.RepoFinderOverride'.

/Since: 2018.6/
-}
repoFinderOverrideNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m RepoFinderOverride
    {- ^ __Returns:__ a new 'GI.OSTree.Objects.RepoFinderOverride.RepoFinderOverride' -}
repoFinderOverrideNew  = liftIO $ do
    result <- ostree_repo_finder_override_new
    checkUnexpectedReturnNULL "repoFinderOverrideNew" result
    result' <- (wrapObject RepoFinderOverride) result
    return result'

#if 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 self uri = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    uri' <- textToCString uri
    ostree_repo_finder_override_add_uri self' uri'
    touchManagedPtr self
    freeMem uri'
    return ()

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

#endif