{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- A t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder' struct is an opaque struct. It is meant to
-- not be kept around and only be used to create new t'GI.Gdk.Structs.ContentFormats.ContentFormats'
-- objects.

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

module GI.Gdk.Structs.ContentFormatsBuilder
    ( 

-- * Exported types
    ContentFormatsBuilder(..)               ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [addFormats]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:addFormats"), [addGtype]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:addGtype"), [addMimeType]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:addMimeType"), [ref]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:ref"), [toFormats]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:toFormats"), [unref]("GI.Gdk.Structs.ContentFormatsBuilder#g:method:unref").
-- 
-- ==== Getters
-- /None/.
-- 
-- ==== Setters
-- /None/.

#if defined(ENABLE_OVERLOADING)
    ResolveContentFormatsBuilderMethod      ,
#endif

-- ** addFormats #method:addFormats#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderAddFormatsMethodInfo,
#endif
    contentFormatsBuilderAddFormats         ,


-- ** addGtype #method:addGtype#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderAddGtypeMethodInfo ,
#endif
    contentFormatsBuilderAddGtype           ,


-- ** addMimeType #method:addMimeType#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderAddMimeTypeMethodInfo,
#endif
    contentFormatsBuilderAddMimeType        ,


-- ** new #method:new#

    contentFormatsBuilderNew                ,


-- ** ref #method:ref#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderRefMethodInfo      ,
#endif
    contentFormatsBuilderRef                ,


-- ** toFormats #method:toFormats#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderToFormatsMethodInfo,
#endif
    contentFormatsBuilderToFormats          ,


-- ** unref #method:unref#

#if defined(ENABLE_OVERLOADING)
    ContentFormatsBuilderUnrefMethodInfo    ,
#endif
    contentFormatsBuilderUnref              ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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 Control.Monad.IO.Class as MIO
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 GHC.Records as R

import {-# SOURCE #-} qualified GI.Gdk.Structs.ContentFormats as Gdk.ContentFormats

-- | Memory-managed wrapper type.
newtype ContentFormatsBuilder = ContentFormatsBuilder (SP.ManagedPtr ContentFormatsBuilder)
    deriving (ContentFormatsBuilder -> ContentFormatsBuilder -> Bool
(ContentFormatsBuilder -> ContentFormatsBuilder -> Bool)
-> (ContentFormatsBuilder -> ContentFormatsBuilder -> Bool)
-> Eq ContentFormatsBuilder
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ContentFormatsBuilder -> ContentFormatsBuilder -> Bool
$c/= :: ContentFormatsBuilder -> ContentFormatsBuilder -> Bool
== :: ContentFormatsBuilder -> ContentFormatsBuilder -> Bool
$c== :: ContentFormatsBuilder -> ContentFormatsBuilder -> Bool
Eq)

instance SP.ManagedPtrNewtype ContentFormatsBuilder where
    toManagedPtr :: ContentFormatsBuilder -> ManagedPtr ContentFormatsBuilder
toManagedPtr (ContentFormatsBuilder ManagedPtr ContentFormatsBuilder
p) = ManagedPtr ContentFormatsBuilder
p

foreign import ccall "gdk_content_formats_builder_get_type" c_gdk_content_formats_builder_get_type :: 
    IO GType

type instance O.ParentTypes ContentFormatsBuilder = '[]
instance O.HasParentTypes ContentFormatsBuilder

instance B.Types.TypedObject ContentFormatsBuilder where
    glibType :: IO GType
glibType = IO GType
c_gdk_content_formats_builder_get_type

instance B.Types.GBoxed ContentFormatsBuilder

-- | Convert 'ContentFormatsBuilder' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe ContentFormatsBuilder) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gdk_content_formats_builder_get_type
    gvalueSet_ :: Ptr GValue -> Maybe ContentFormatsBuilder -> IO ()
gvalueSet_ Ptr GValue
gv Maybe ContentFormatsBuilder
P.Nothing = Ptr GValue -> Ptr ContentFormatsBuilder -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv (Ptr ContentFormatsBuilder
forall a. Ptr a
FP.nullPtr :: FP.Ptr ContentFormatsBuilder)
    gvalueSet_ Ptr GValue
gv (P.Just ContentFormatsBuilder
obj) = ContentFormatsBuilder
-> (Ptr ContentFormatsBuilder -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr ContentFormatsBuilder
obj (Ptr GValue -> Ptr ContentFormatsBuilder -> IO ()
forall a. Ptr GValue -> Ptr a -> IO ()
B.GValue.set_boxed Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe ContentFormatsBuilder)
gvalueGet_ Ptr GValue
gv = do
        Ptr ContentFormatsBuilder
ptr <- Ptr GValue -> IO (Ptr ContentFormatsBuilder)
forall b. Ptr GValue -> IO (Ptr b)
B.GValue.get_boxed Ptr GValue
gv :: IO (Ptr ContentFormatsBuilder)
        if Ptr ContentFormatsBuilder
ptr Ptr ContentFormatsBuilder -> Ptr ContentFormatsBuilder -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr ContentFormatsBuilder
forall a. Ptr a
FP.nullPtr
        then ContentFormatsBuilder -> Maybe ContentFormatsBuilder
forall a. a -> Maybe a
P.Just (ContentFormatsBuilder -> Maybe ContentFormatsBuilder)
-> IO ContentFormatsBuilder -> IO (Maybe ContentFormatsBuilder)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder)
-> Ptr ContentFormatsBuilder -> IO ContentFormatsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.newBoxed ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder
ContentFormatsBuilder Ptr ContentFormatsBuilder
ptr
        else Maybe ContentFormatsBuilder -> IO (Maybe ContentFormatsBuilder)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ContentFormatsBuilder
forall a. Maybe a
P.Nothing
        
    


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

-- method ContentFormatsBuilder::new
-- method type : Constructor
-- Args: []
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name { namespace = "Gdk" , name = "ContentFormatsBuilder" })
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_new" gdk_content_formats_builder_new :: 
    IO (Ptr ContentFormatsBuilder)

-- | Create a new t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder' object. The resulting builder
-- would create an empty t'GI.Gdk.Structs.ContentFormats.ContentFormats'. Use addition functions to add
-- types to it.
contentFormatsBuilderNew ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m ContentFormatsBuilder
    -- ^ __Returns:__ a new t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
contentFormatsBuilderNew :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
m ContentFormatsBuilder
contentFormatsBuilderNew  = IO ContentFormatsBuilder -> m ContentFormatsBuilder
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ContentFormatsBuilder -> m ContentFormatsBuilder)
-> IO ContentFormatsBuilder -> m ContentFormatsBuilder
forall a b. (a -> b) -> a -> b
$ do
    Ptr ContentFormatsBuilder
result <- IO (Ptr ContentFormatsBuilder)
gdk_content_formats_builder_new
    Text -> Ptr ContentFormatsBuilder -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"contentFormatsBuilderNew" Ptr ContentFormatsBuilder
result
    ContentFormatsBuilder
result' <- ((ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder)
-> Ptr ContentFormatsBuilder -> IO ContentFormatsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder
ContentFormatsBuilder) Ptr ContentFormatsBuilder
result
    ContentFormatsBuilder -> IO ContentFormatsBuilder
forall (m :: * -> *) a. Monad m => a -> m a
return ContentFormatsBuilder
result'

#if defined(ENABLE_OVERLOADING)
#endif

-- method ContentFormatsBuilder::add_formats
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "formats"
--           , argType =
--               TInterface Name { namespace = "Gdk" , name = "ContentFormats" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the formats to add" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_add_formats" gdk_content_formats_builder_add_formats :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    Ptr Gdk.ContentFormats.ContentFormats -> -- formats : TInterface (Name {namespace = "Gdk", name = "ContentFormats"})
    IO ()

-- | Appends all formats from /@formats@/ to /@builder@/, skipping those that
-- already exist.
contentFormatsBuilderAddFormats ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> Gdk.ContentFormats.ContentFormats
    -- ^ /@formats@/: the formats to add
    -> m ()
contentFormatsBuilderAddFormats :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> ContentFormats -> m ()
contentFormatsBuilderAddFormats ContentFormatsBuilder
builder ContentFormats
formats = 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 ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    Ptr ContentFormats
formats' <- ContentFormats -> IO (Ptr ContentFormats)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormats
formats
    Ptr ContentFormatsBuilder -> Ptr ContentFormats -> IO ()
gdk_content_formats_builder_add_formats Ptr ContentFormatsBuilder
builder' Ptr ContentFormats
formats'
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    ContentFormats -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormats
formats
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderAddFormatsMethodInfo
instance (signature ~ (Gdk.ContentFormats.ContentFormats -> m ()), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderAddFormatsMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderAddFormats

instance O.OverloadedMethodInfo ContentFormatsBuilderAddFormatsMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderAddFormats",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderAddFormats"
        }


#endif

-- method ContentFormatsBuilder::add_gtype
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "type"
--           , argType = TBasicType TGType
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GType" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_add_gtype" gdk_content_formats_builder_add_gtype :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    CGType ->                               -- type : TBasicType TGType
    IO ()

-- | Appends /@gtype@/ to /@builder@/ if it has not already been added.
contentFormatsBuilderAddGtype ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> GType
    -- ^ /@type@/: a t'GType'
    -> m ()
contentFormatsBuilderAddGtype :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> GType -> m ()
contentFormatsBuilderAddGtype ContentFormatsBuilder
builder GType
type_ = 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 ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    let type_' :: CGType
type_' = GType -> CGType
gtypeToCGType GType
type_
    Ptr ContentFormatsBuilder -> CGType -> IO ()
gdk_content_formats_builder_add_gtype Ptr ContentFormatsBuilder
builder' CGType
type_'
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderAddGtypeMethodInfo
instance (signature ~ (GType -> m ()), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderAddGtypeMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderAddGtype

instance O.OverloadedMethodInfo ContentFormatsBuilderAddGtypeMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderAddGtype",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderAddGtype"
        }


#endif

-- method ContentFormatsBuilder::add_mime_type
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "mime_type"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a mime type" , sinceVersion = Nothing }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_add_mime_type" gdk_content_formats_builder_add_mime_type :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    CString ->                              -- mime_type : TBasicType TUTF8
    IO ()

-- | Appends /@mimeType@/ to /@builder@/ if it has not already been added.
contentFormatsBuilderAddMimeType ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> T.Text
    -- ^ /@mimeType@/: a mime type
    -> m ()
contentFormatsBuilderAddMimeType :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> Text -> m ()
contentFormatsBuilderAddMimeType ContentFormatsBuilder
builder Text
mimeType = 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 ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    CString
mimeType' <- Text -> IO CString
textToCString Text
mimeType
    Ptr ContentFormatsBuilder -> CString -> IO ()
gdk_content_formats_builder_add_mime_type Ptr ContentFormatsBuilder
builder' CString
mimeType'
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
mimeType'
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderAddMimeTypeMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderAddMimeTypeMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderAddMimeType

instance O.OverloadedMethodInfo ContentFormatsBuilderAddMimeTypeMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderAddMimeType",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderAddMimeType"
        }


#endif

-- method ContentFormatsBuilder::ref
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface
--                  Name { namespace = "Gdk" , name = "ContentFormatsBuilder" })
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_ref" gdk_content_formats_builder_ref :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    IO (Ptr ContentFormatsBuilder)

-- | Acquires a reference on the given /@builder@/.
-- 
-- This function is intended primarily for bindings. t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder' objects
-- should not be kept around.
contentFormatsBuilderRef ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> m ContentFormatsBuilder
    -- ^ __Returns:__ the given t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder' with
    --   its reference count increased
contentFormatsBuilderRef :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> m ContentFormatsBuilder
contentFormatsBuilderRef ContentFormatsBuilder
builder = IO ContentFormatsBuilder -> m ContentFormatsBuilder
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ContentFormatsBuilder -> m ContentFormatsBuilder)
-> IO ContentFormatsBuilder -> m ContentFormatsBuilder
forall a b. (a -> b) -> a -> b
$ do
    Ptr ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    Ptr ContentFormatsBuilder
result <- Ptr ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
gdk_content_formats_builder_ref Ptr ContentFormatsBuilder
builder'
    Text -> Ptr ContentFormatsBuilder -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"contentFormatsBuilderRef" Ptr ContentFormatsBuilder
result
    ContentFormatsBuilder
result' <- ((ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder)
-> Ptr ContentFormatsBuilder -> IO ContentFormatsBuilder
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newBoxed ManagedPtr ContentFormatsBuilder -> ContentFormatsBuilder
ContentFormatsBuilder) Ptr ContentFormatsBuilder
result
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    ContentFormatsBuilder -> IO ContentFormatsBuilder
forall (m :: * -> *) a. Monad m => a -> m a
return ContentFormatsBuilder
result'

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderRefMethodInfo
instance (signature ~ (m ContentFormatsBuilder), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderRefMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderRef

instance O.OverloadedMethodInfo ContentFormatsBuilderRefMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderRef",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderRef"
        }


#endif

-- method ContentFormatsBuilder::to_formats
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just
--               (TInterface Name { namespace = "Gdk" , name = "ContentFormats" })
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_to_formats" gdk_content_formats_builder_to_formats :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    IO (Ptr Gdk.ContentFormats.ContentFormats)

-- | Creates a new t'GI.Gdk.Structs.ContentFormats.ContentFormats' from the given /@builder@/.
-- 
-- The given t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder' is reset once this function returns;
-- you cannot call this function multiple times on the same /@builder@/ instance.
-- 
-- This function is intended primarily for bindings. C code should use
-- @/gdk_content_formats_builder_free_to_formats()/@.
contentFormatsBuilderToFormats ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> m Gdk.ContentFormats.ContentFormats
    -- ^ __Returns:__ the newly created t'GI.Gdk.Structs.ContentFormats.ContentFormats'
    --   with all the formats added to /@builder@/
contentFormatsBuilderToFormats :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> m ContentFormats
contentFormatsBuilderToFormats ContentFormatsBuilder
builder = IO ContentFormats -> m ContentFormats
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ContentFormats -> m ContentFormats)
-> IO ContentFormats -> m ContentFormats
forall a b. (a -> b) -> a -> b
$ do
    Ptr ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    Ptr ContentFormats
result <- Ptr ContentFormatsBuilder -> IO (Ptr ContentFormats)
gdk_content_formats_builder_to_formats Ptr ContentFormatsBuilder
builder'
    Text -> Ptr ContentFormats -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"contentFormatsBuilderToFormats" Ptr ContentFormats
result
    ContentFormats
result' <- ((ManagedPtr ContentFormats -> ContentFormats)
-> Ptr ContentFormats -> IO ContentFormats
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr ContentFormats -> ContentFormats
Gdk.ContentFormats.ContentFormats) Ptr ContentFormats
result
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    ContentFormats -> IO ContentFormats
forall (m :: * -> *) a. Monad m => a -> m a
return ContentFormats
result'

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderToFormatsMethodInfo
instance (signature ~ (m Gdk.ContentFormats.ContentFormats), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderToFormatsMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderToFormats

instance O.OverloadedMethodInfo ContentFormatsBuilderToFormatsMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderToFormats",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderToFormats"
        }


#endif

-- method ContentFormatsBuilder::unref
-- method type : OrdinaryMethod
-- Args: [ Arg
--           { argCName = "builder"
--           , argType =
--               TInterface
--                 Name { namespace = "Gdk" , name = "ContentFormatsBuilder" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "a #GdkContentFormatsBuilder"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gdk_content_formats_builder_unref" gdk_content_formats_builder_unref :: 
    Ptr ContentFormatsBuilder ->            -- builder : TInterface (Name {namespace = "Gdk", name = "ContentFormatsBuilder"})
    IO ()

-- | Releases a reference on the given /@builder@/.
contentFormatsBuilderUnref ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ContentFormatsBuilder
    -- ^ /@builder@/: a t'GI.Gdk.Structs.ContentFormatsBuilder.ContentFormatsBuilder'
    -> m ()
contentFormatsBuilderUnref :: forall (m :: * -> *).
(HasCallStack, MonadIO m) =>
ContentFormatsBuilder -> m ()
contentFormatsBuilderUnref ContentFormatsBuilder
builder = 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 ContentFormatsBuilder
builder' <- ContentFormatsBuilder -> IO (Ptr ContentFormatsBuilder)
forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
unsafeManagedPtrGetPtr ContentFormatsBuilder
builder
    Ptr ContentFormatsBuilder -> IO ()
gdk_content_formats_builder_unref Ptr ContentFormatsBuilder
builder'
    ContentFormatsBuilder -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr ContentFormatsBuilder
builder
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

#if defined(ENABLE_OVERLOADING)
data ContentFormatsBuilderUnrefMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod ContentFormatsBuilderUnrefMethodInfo ContentFormatsBuilder signature where
    overloadedMethod = contentFormatsBuilderUnref

instance O.OverloadedMethodInfo ContentFormatsBuilderUnrefMethodInfo ContentFormatsBuilder where
    overloadedMethodInfo = O.MethodInfo {
        O.overloadedMethodName = "GI.Gdk.Structs.ContentFormatsBuilder.contentFormatsBuilderUnref",
        O.overloadedMethodURL = "https://hackage.haskell.org/package/gi-gdk-4.0.3/docs/GI-Gdk-Structs-ContentFormatsBuilder.html#v:contentFormatsBuilderUnref"
        }


#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveContentFormatsBuilderMethod (t :: Symbol) (o :: *) :: * where
    ResolveContentFormatsBuilderMethod "addFormats" o = ContentFormatsBuilderAddFormatsMethodInfo
    ResolveContentFormatsBuilderMethod "addGtype" o = ContentFormatsBuilderAddGtypeMethodInfo
    ResolveContentFormatsBuilderMethod "addMimeType" o = ContentFormatsBuilderAddMimeTypeMethodInfo
    ResolveContentFormatsBuilderMethod "ref" o = ContentFormatsBuilderRefMethodInfo
    ResolveContentFormatsBuilderMethod "toFormats" o = ContentFormatsBuilderToFormatsMethodInfo
    ResolveContentFormatsBuilderMethod "unref" o = ContentFormatsBuilderUnrefMethodInfo
    ResolveContentFormatsBuilderMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveContentFormatsBuilderMethod t ContentFormatsBuilder, O.OverloadedMethod info ContentFormatsBuilder p) => OL.IsLabel t (ContentFormatsBuilder -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveContentFormatsBuilderMethod t ContentFormatsBuilder, O.OverloadedMethod info ContentFormatsBuilder p, R.HasField t ContentFormatsBuilder p) => R.HasField t ContentFormatsBuilder p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveContentFormatsBuilderMethod t ContentFormatsBuilder, O.OverloadedMethodInfo info ContentFormatsBuilder) => OL.IsLabel t (O.MethodProxy info ContentFormatsBuilder) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif