YANG provides the "union" data type which is processed by matching values against each member type.

   type union {
     type int32;
     type boolean;
     type string;


In this example the value "test" would be tried as an int32 and fail.

Then it would be tried as boolean (true or false) and fail.

Then it would match as a string.  Internally, the typedef for the string would be used.

The val_value_t struct that represents YANG data contains a "typdef" field.

This will be set to the member type that matched if the base type is union (NCX_BT_UNION).

     member type == val->typdef

In addition, the YANG type name for this type is also available using the function val_get_yang_typename

const xmlChar *type_name = val_get_yang_typename(val);


For example:


  type union {
      type ipv4-address;
      type ipv6-address;

In this case, both member types have base type string.

In order to tell them apart, the val_get_yang_typename() function will return "ipv4-address"

if the first typedef matched, and "ipv6-address" if the second typedef matched.