### Method

# GLib VariantBuilder open

since: 2.24

#### Declaration

    void
    g_variant_builder_open (
      GVariantBuilder* builder,
      const GVariantType* type
    )

#### Description

Opens a subcontainer inside the given `builder`. When done adding items to the subcontainer, `g_variant_builder_close()` must be called. `type` is the type of the container: so to build a tuple of several values, `type` must 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);

Available since: 2.24

#### Parameters

`type`

  Type: `GVariantType`

  The `GVariantType` of the container.

  The data is owned by the caller of the method.