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

Represents a ssh key agent credential.
-}

module GI.Ggit.Objects.CredSshKeyFromAgent
    ( 

-- * Exported types
    CredSshKeyFromAgent(..)                 ,
    IsCredSshKeyFromAgent                   ,
    toCredSshKeyFromAgent                   ,
    noCredSshKeyFromAgent                   ,


 -- * Methods
-- ** getUsername #method:getUsername#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    CredSshKeyFromAgentGetUsernameMethodInfo,
#endif
    credSshKeyFromAgentGetUsername          ,


-- ** new #method:new#
    credSshKeyFromAgentNew                  ,




 -- * Properties
-- ** username #attr:username#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    CredSshKeyFromAgentUsernamePropertyInfo ,
#endif
    constructCredSshKeyFromAgentUsername    ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    credSshKeyFromAgentUsername             ,
#endif
    getCredSshKeyFromAgentUsername          ,




    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Ggit.Objects.Cred as Ggit.Cred
import {-# SOURCE #-} qualified GI.Ggit.Objects.Native as Ggit.Native
import {-# SOURCE #-} qualified GI.Ggit.Objects.ObjectFactoryBase as Ggit.ObjectFactoryBase
import qualified GI.Gio.Interfaces.Initable as Gio.Initable

newtype CredSshKeyFromAgent = CredSshKeyFromAgent (ManagedPtr CredSshKeyFromAgent)
foreign import ccall "ggit_cred_ssh_key_from_agent_get_type"
    c_ggit_cred_ssh_key_from_agent_get_type :: IO GType

instance GObject CredSshKeyFromAgent where
    gobjectType _ = c_ggit_cred_ssh_key_from_agent_get_type
    

class GObject o => IsCredSshKeyFromAgent o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError CredSshKeyFromAgent a) =>
    IsCredSshKeyFromAgent a
#endif
instance IsCredSshKeyFromAgent CredSshKeyFromAgent
instance Ggit.Cred.IsCred CredSshKeyFromAgent
instance Ggit.Native.IsNative CredSshKeyFromAgent
instance Ggit.ObjectFactoryBase.IsObjectFactoryBase CredSshKeyFromAgent
instance GObject.Object.IsObject CredSshKeyFromAgent
instance Gio.Initable.IsInitable CredSshKeyFromAgent

toCredSshKeyFromAgent :: (MonadIO m, IsCredSshKeyFromAgent o) => o -> m CredSshKeyFromAgent
toCredSshKeyFromAgent = liftIO . unsafeCastTo CredSshKeyFromAgent

noCredSshKeyFromAgent :: Maybe CredSshKeyFromAgent
noCredSshKeyFromAgent = Nothing

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type family ResolveCredSshKeyFromAgentMethod (t :: Symbol) (o :: *) :: * where
    ResolveCredSshKeyFromAgentMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveCredSshKeyFromAgentMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveCredSshKeyFromAgentMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveCredSshKeyFromAgentMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveCredSshKeyFromAgentMethod "init" o = Gio.Initable.InitableInitMethodInfo
    ResolveCredSshKeyFromAgentMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveCredSshKeyFromAgentMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveCredSshKeyFromAgentMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveCredSshKeyFromAgentMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveCredSshKeyFromAgentMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveCredSshKeyFromAgentMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveCredSshKeyFromAgentMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveCredSshKeyFromAgentMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveCredSshKeyFromAgentMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveCredSshKeyFromAgentMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveCredSshKeyFromAgentMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveCredSshKeyFromAgentMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveCredSshKeyFromAgentMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveCredSshKeyFromAgentMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveCredSshKeyFromAgentMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveCredSshKeyFromAgentMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveCredSshKeyFromAgentMethod "getUsername" o = CredSshKeyFromAgentGetUsernameMethodInfo
    ResolveCredSshKeyFromAgentMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveCredSshKeyFromAgentMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveCredSshKeyFromAgentMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveCredSshKeyFromAgentMethod t CredSshKeyFromAgent, O.MethodInfo info CredSshKeyFromAgent p) => O.IsLabelProxy t (CredSshKeyFromAgent -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveCredSshKeyFromAgentMethod t CredSshKeyFromAgent, O.MethodInfo info CredSshKeyFromAgent p) => O.IsLabel t (CredSshKeyFromAgent -> 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

#endif

-- VVV Prop "username"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable,PropertyWritable,PropertyConstructOnly]
   -- Nullable: (Just False,Nothing)

getCredSshKeyFromAgentUsername :: (MonadIO m, IsCredSshKeyFromAgent o) => o -> m T.Text
getCredSshKeyFromAgentUsername obj = liftIO $ checkUnexpectedNothing "getCredSshKeyFromAgentUsername" $ getObjectPropertyString obj "username"

constructCredSshKeyFromAgentUsername :: (IsCredSshKeyFromAgent o) => T.Text -> IO (GValueConstruct o)
constructCredSshKeyFromAgentUsername val = constructObjectPropertyString "username" (Just val)

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data CredSshKeyFromAgentUsernamePropertyInfo
instance AttrInfo CredSshKeyFromAgentUsernamePropertyInfo where
    type AttrAllowedOps CredSshKeyFromAgentUsernamePropertyInfo = '[ 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint CredSshKeyFromAgentUsernamePropertyInfo = (~) T.Text
    type AttrBaseTypeConstraint CredSshKeyFromAgentUsernamePropertyInfo = IsCredSshKeyFromAgent
    type AttrGetType CredSshKeyFromAgentUsernamePropertyInfo = T.Text
    type AttrLabel CredSshKeyFromAgentUsernamePropertyInfo = "username"
    type AttrOrigin CredSshKeyFromAgentUsernamePropertyInfo = CredSshKeyFromAgent
    attrGet _ = getCredSshKeyFromAgentUsername
    attrSet _ = undefined
    attrConstruct _ = constructCredSshKeyFromAgentUsername
    attrClear _ = undefined
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList CredSshKeyFromAgent
type instance O.AttributeList CredSshKeyFromAgent = CredSshKeyFromAgentAttributeList
type CredSshKeyFromAgentAttributeList = ('[ '("native", Ggit.Native.NativeNativePropertyInfo), '("username", CredSshKeyFromAgentUsernamePropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
credSshKeyFromAgentUsername :: AttrLabelProxy "username"
credSshKeyFromAgentUsername = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
type instance O.SignalList CredSshKeyFromAgent = CredSshKeyFromAgentSignalList
type CredSshKeyFromAgentSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method CredSshKeyFromAgent::new
-- method type : Constructor
-- Args : [Arg {argCName = "username", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the username.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Ggit", name = "CredSshKeyFromAgent"}))
-- throws : True
-- Skip return : False

foreign import ccall "ggit_cred_ssh_key_from_agent_new" ggit_cred_ssh_key_from_agent_new :: 
    CString ->                              -- username : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr CredSshKeyFromAgent)

{- |
Creates a new 'GI.Ggit.Objects.CredSshKeyFromAgent.CredSshKeyFromAgent'.
-}
credSshKeyFromAgentNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@username@/: the username. -}
    -> m CredSshKeyFromAgent
    {- ^ __Returns:__ a new 'GI.Ggit.Objects.CredSshKeyFromAgent.CredSshKeyFromAgent' or 'Nothing' if there was an error. /(Can throw 'Data.GI.Base.GError.GError')/ -}
credSshKeyFromAgentNew username = liftIO $ do
    username' <- textToCString username
    onException (do
        result <- propagateGError $ ggit_cred_ssh_key_from_agent_new username'
        checkUnexpectedReturnNULL "credSshKeyFromAgentNew" result
        result' <- (wrapObject CredSshKeyFromAgent) result
        freeMem username'
        return result'
     ) (do
        freeMem username'
     )

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
#endif

-- method CredSshKeyFromAgent::get_username
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "cred", argType = TInterface (Name {namespace = "Ggit", name = "CredSshKeyFromAgent"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitCredSshKeyFromAgent.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ggit_cred_ssh_key_from_agent_get_username" ggit_cred_ssh_key_from_agent_get_username :: 
    Ptr CredSshKeyFromAgent ->              -- cred : TInterface (Name {namespace = "Ggit", name = "CredSshKeyFromAgent"})
    IO CString

{- |
Gets the username for the credential.
-}
credSshKeyFromAgentGetUsername ::
    (B.CallStack.HasCallStack, MonadIO m, IsCredSshKeyFromAgent a) =>
    a
    {- ^ /@cred@/: a 'GI.Ggit.Objects.CredSshKeyFromAgent.CredSshKeyFromAgent'. -}
    -> m T.Text
    {- ^ __Returns:__ the username. -}
credSshKeyFromAgentGetUsername cred = liftIO $ do
    cred' <- unsafeManagedPtrCastPtr cred
    result <- ggit_cred_ssh_key_from_agent_get_username cred'
    checkUnexpectedReturnNULL "credSshKeyFromAgentGetUsername" result
    result' <- cstringToText result
    touchManagedPtr cred
    return result'

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data CredSshKeyFromAgentGetUsernameMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsCredSshKeyFromAgent a) => O.MethodInfo CredSshKeyFromAgentGetUsernameMethodInfo a signature where
    overloadedMethod _ = credSshKeyFromAgentGetUsername

#endif