VariantBuilder#
- class VariantBuilder(**kwargs)#
A utility type for constructing container-type Variant instances.
This is an opaque structure and may only be accessed using the following functions.
VariantBuilder is not threadsafe in any way. Do not attempt to
access it from more than one thread.
Constructors#
- class VariantBuilder
- classmethod new(type: VariantType) VariantBuilder#
Allocates and initialises a new
VariantBuilder.You should call
unref()on the return value when it is no longer needed. The memory will not be automatically freed by any other call.In most cases it is easier to place a
VariantBuilderdirectly on the stack of the calling function and initialise it withinit().Added in version 2.24.
- Parameters:
type – a container type
Methods#
- class VariantBuilder
- add_value(value: Variant) None#
Adds
valuetobuilder.It is an error to call this function in any way that would create an inconsistent value to be constructed. Some examples of this are putting different types of items into an array, putting the wrong types or number of items in a tuple, putting more than one value into a variant, etc.
If
valueis a floating reference (seeref_sink()), thebuilderinstance takes ownership ofvalue.Added in version 2.24.
- Parameters:
value – a
Variant
- close() None#
Closes the subcontainer inside the given
builderthat was opened by the most recent call toopen().It is an error to call this function in any way that would create an inconsistent value to be constructed (ie: too few values added to the subcontainer).
Added in version 2.24.
- Returns:
Trueon success,Falseif there was an error.
- end() Variant#
Ends the builder process and returns the constructed value.
It is not permissible to use
builderin any way after this call except for reference counting operations (in the case of a heap-allocatedVariantBuilder) or by reinitialising it withinit()(in the case of stack-allocated). This means that for the stack-allocated builders there is no need to callclear()after the call toend().It is an error to call this function in any way that would create an inconsistent value to be constructed (ie: insufficient number of items added to a container with a specific number of children required). It is also an error to call this function if the builder was created with an indefinite array or maybe type and no children have been added; in this case it is impossible to infer the type of the empty array.
Added in version 2.24.
- open(type: VariantType) None#
Opens a subcontainer inside the given
builder. When done adding items to the subcontainer,close()must be called.typeis the type of the container: so to build a tuple of several values,typemust include the tuple itself.It is an error to call this function in any way that would cause an inconsistent value to be constructed (ie: adding too many values or a value of an incorrect type).
Example of building a nested variant:
GVariantBuilder builder; guint32 some_number = get_number (); g_autoptr (GHashTable) some_dict = get_dict (); GHashTableIter iter; const gchar *key; const GVariant *value; g_autoptr (GVariant) output = NULL; g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ua{sv})")); g_variant_builder_add (&builder, "u", some_number); g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}")); g_hash_table_iter_init (&iter, some_dict); while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { g_variant_builder_open (&builder, G_VARIANT_TYPE ("{sv}")); g_variant_builder_add (&builder, "s", key); g_variant_builder_add (&builder, "v", value); g_variant_builder_close (&builder); } g_variant_builder_close (&builder); output = g_variant_builder_end (&builder);
Added in version 2.24.
- Parameters:
type – the
VariantTypeof the container- Returns:
a new file descriptor, or -1 if an error occurred. The return value can be used exactly like the return value from open().