{-# 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 (Eq)
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


-- | 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 o = do
        gtype <- c_ostree_repo_finder_override_get_type
        B.ManagedPtr.withManagedPtr o (B.GValue.buildGValue gtype B.GValue.set_object)

    fromGValue gv = do
        ptr <- B.GValue.get_object gv :: IO (Ptr RepoFinderOverride)
        B.ManagedPtr.newObject 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 = liftIO . unsafeCastTo RepoFinderOverride

-- | A convenience alias for `Nothing` :: `Maybe` `RepoFinderOverride`.
noRepoFinderOverride :: Maybe RepoFinderOverride
noRepoFinderOverride = 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  = liftIO $ do
    result <- ostree_repo_finder_override_new
    checkUnexpectedReturnNULL "repoFinderOverrideNew" result
    result' <- (wrapObject RepoFinderOverride) result
    return 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 self uri = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    uri' <- textToCString uri
    ostree_repo_finder_override_add_uri self' uri'
    touchManagedPtr self
    freeMem uri'
    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