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

module GI.Pango.Structs.ScriptForLang
    ( 

-- * Exported types
    ScriptForLang(..)                       ,
    newZeroScriptForLang                    ,
    noScriptForLang                         ,


    ) 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


newtype ScriptForLang = ScriptForLang (ManagedPtr ScriptForLang)
instance WrappedPtr ScriptForLang where
    wrappedPtrCalloc = callocBytes 20
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 20 >=> wrapPtr ScriptForLang)
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `ScriptForLang` struct initialized to zero.
newZeroScriptForLang :: MonadIO m => m ScriptForLang
newZeroScriptForLang = liftIO $ wrappedPtrCalloc >>= wrapPtr ScriptForLang

instance tag ~ 'AttrSet => Constructible ScriptForLang tag where
    new _ attrs = do
        o <- newZeroScriptForLang
        GI.Attributes.set o attrs
        return o


noScriptForLang :: Maybe ScriptForLang
noScriptForLang = Nothing

-- XXX Skipped attribute for "ScriptForLang:lang" :: Not implemented: "Don't know how to unpack C array of type TCArray False 7 (-1) (TBasicType TInt8)"
-- XXX Skipped attribute for "ScriptForLang:scripts" :: Not implemented: "Don't know how to unpack C array of type TCArray False 3 (-1) (TInterface (Name {namespace = \"Pango\", name = \"Script\"}))"

instance O.HasAttributeList ScriptForLang
type instance O.AttributeList ScriptForLang = ScriptForLangAttributeList
type ScriptForLangAttributeList = ('[ ] :: [(Symbol, *)])

type family ResolveScriptForLangMethod (t :: Symbol) (o :: *) :: * where
    ResolveScriptForLangMethod l o = O.MethodResolutionFailed l o

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

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveScriptForLangMethod t ScriptForLang, O.MethodInfo info ScriptForLang p) => O.IsLabel t (ScriptForLang -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif