+#define BT_ASSERT_PRE_DEV_FOR_BORROW_VAR_FIELD_SEL_CLASS_OPT(_field) \
+ do { \
+ struct bt_field_variant *_var_field = (void *) field; \
+ BT_ASSERT_PRE_DEV("has-selected-field", \
+ _var_field->selected_field, \
+ "Variant field has no selected field: %!+f", \
+ (_field)); \
+ } while (0)
+
+static
+const struct bt_field_class_variant_option *
+borrow_variant_field_selected_class_option(const struct bt_field *field)
+{
+ const struct bt_field_class_named_field_class_container *container_fc;
+ const struct bt_field_variant *var_field = (const void *) field;
+
+ BT_ASSERT_DBG(field);
+ container_fc = (const void *) field->class;
+ return container_fc->named_fcs->pdata[var_field->selected_index];
+}
+
+const struct bt_field_class_variant_option *
+bt_field_variant_borrow_selected_option_class_const(
+ const struct bt_field *field)
+{
+ BT_ASSERT_PRE_DEV_FIELD_NON_NULL(field);
+ BT_ASSERT_PRE_DEV_FIELD_IS_VARIANT("field", field, "Field");
+ BT_ASSERT_PRE_DEV_FOR_BORROW_VAR_FIELD_SEL_CLASS_OPT(field);
+ return borrow_variant_field_selected_class_option(field);
+}
+
+const struct bt_field_class_variant_with_selector_field_integer_unsigned_option *
+bt_field_variant_with_selector_field_integer_unsigned_borrow_selected_option_class_const(
+ const struct bt_field *field)
+{
+ BT_ASSERT_PRE_DEV_FIELD_NON_NULL(field);
+ BT_ASSERT_PRE_DEV_FIELD_HAS_CLASS_TYPE("field", field,
+ "variant-field-with-unsigned-selector-field",
+ BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD,
+ "Field");
+ BT_ASSERT_PRE_DEV_FOR_BORROW_VAR_FIELD_SEL_CLASS_OPT(field);
+ return (const void *) borrow_variant_field_selected_class_option(field);
+}
+
+const struct bt_field_class_variant_with_selector_field_integer_signed_option *
+bt_field_variant_with_selector_field_integer_signed_borrow_selected_option_class_const(
+ const struct bt_field *field)
+{
+ BT_ASSERT_PRE_DEV_FIELD_NON_NULL(field);
+ BT_ASSERT_PRE_DEV_FIELD_HAS_CLASS_TYPE("field", field,
+ "variant-field-with-signed-selector-field",
+ BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD,
+ "Field");
+ BT_ASSERT_PRE_DEV_FOR_BORROW_VAR_FIELD_SEL_CLASS_OPT(field);
+ return (const void *) borrow_variant_field_selected_class_option(field);
+}
+
+enum bt_field_variant_select_option_by_index_status
+bt_field_variant_select_option_by_index(