Note: This document covers API impact only. For more details, see the ABI compatibility page
- | init | step 1 | step 2 | step 3 |
---|---|---|---|---|
fidl | link | link | ||
dart | link | link | link | |
go | link | link | ||
hlcpp | link | link | link | |
llcpp | link | link | link | |
rust | link | link | link |
type JsonValue = strict union { 1: int_value int32; 2: string_value string:MAX; };
void useUnion(fidllib.JsonValue value) { assert(value.$unknownData == null); switch (value.$tag) { case fidllib.JsonValueTag.intValue: print('int value: ${value.intValue}'); break; case fidllib.JsonValueTag.stringValue: print('string value: ${value.stringValue}'); break; } }
func useUnion(value lib.JsonValue) {
switch value.Which() {
case lib.JsonValueIntValue:
fmt.Printf("int value: %d\n", value.IntValue)
case lib.JsonValueStringValue:
fmt.Printf("string value: %s\n", value.StringValue)
default:
fmt.Println("unknown tag")
}
}
void use_union(fidl_test::JsonValue value) { switch (value.Which()) { case fidl_test::JsonValue::Tag::kIntValue: printf("int value: %d\n", value.int_value()); break; case fidl_test::JsonValue::Tag::kStringValue: printf("string value: %s\n", value.string_value().c_str()); break; case fidl_test::JsonValue::Tag::Invalid: printf("<uninitialized union>\n"); break; } }
void use_union(fidl_test::wire::JsonValue* value) { switch (value->which()) { case fidl_test::wire::JsonValue::Tag::kIntValue: printf("int value: %d\n", value->int_value()); break; case fidl_test::wire::JsonValue::Tag::kStringValue: printf("string value: %s\n", value->string_value().data()); break; } }
fn use_union(value: &fidl_lib::JsonValue) { match value { fidl_lib::JsonValue::IntValue(n) => println!("int value: {}", n), fidl_lib::JsonValue::StringValue(s) => println!("string: {}", s), }; }
void useUnion(fidllib.JsonValue value) { - assert(value.$unknownData == null); switch (value.$tag) { case fidllib.JsonValueTag.intValue: print('int value: ${value.intValue}'); break; case fidllib.JsonValueTag.stringValue: print('string value: ${value.stringValue}'); break; + default: + // Note: unknown variants will fail to decode until the union is marked flexible + print('unknown variant: ${value.$unknownData}'); + break; } }
void use_union(fidl_test::JsonValue value) { switch (value.Which()) { case fidl_test::JsonValue::Tag::kIntValue: printf("int value: %d\n", value.int_value()); break; case fidl_test::JsonValue::Tag::kStringValue: printf("string value: %s\n", value.string_value().c_str()); break; case fidl_test::JsonValue::Tag::Invalid: printf("<uninitialized union>\n"); break; + default: + printf("<unknown variant>\n"); } }
void use_union(fidl_test::wire::JsonValue* value) { switch (value->which()) { case fidl_test::wire::JsonValue::Tag::kIntValue: printf("int value: %d\n", value->int_value()); break; case fidl_test::wire::JsonValue::Tag::kStringValue: printf("string value: %s\n", value->string_value().data()); break; + default: + printf("<unknown variant>\n"); } }
[allow(unreachable_patterns)]
and an underscore arm to match statements on the unionfn use_union(value: &fidl_lib::JsonValue) { + #[allow(unreachable_patterns)] match value { fidl_lib::JsonValue::IntValue(n) => println!("int value: {}", n), fidl_lib::JsonValue::StringValue(s) => println!("string: {}", s), + _ => {} }; }
strict
to flexible
- type JsonValue = strict union { + type JsonValue = flexible union { 1: int_value int32; 2: string_value string:MAX; };
void useUnion(fidllib.JsonValue value) { switch (value.$tag) { case fidllib.JsonValueTag.intValue: print('int value: ${value.intValue}'); break; case fidllib.JsonValueTag.stringValue: print('string value: ${value.stringValue}'); break; - default: - // Note: unknown variants will fail to decode until the union is marked flexible + case fidllib.JsonValueTag.$unknown: print('unknown variant: ${value.$unknownData}'); break; } }
func useUnion(value lib.JsonValue) { switch value.Which() { case lib.JsonValueIntValue: fmt.Printf("int value: %d\n", value.IntValue) case lib.JsonValueStringValue: fmt.Printf("string value: %s\n", value.StringValue) + case lib.JsonValue_unknownData: + fmt.Printf("unknown data: %+v\n", value.GetUnknownData()) default: fmt.Println("unknown tag") } }
kUnknown
tag.void use_union(fidl_test::JsonValue value) { switch (value.Which()) { case fidl_test::JsonValue::Tag::kIntValue: printf("int value: %d\n", value.int_value()); break; case fidl_test::JsonValue::Tag::kStringValue: printf("string value: %s\n", value.string_value().c_str()); break; case fidl_test::JsonValue::Tag::Invalid: printf("<uninitialized union>\n"); break; - default: - printf("<unknown variant>\n"); + case fidl_test::JsonValue::Tag::kUnknown: + printf("<%lu unknown bytes>\n", value.UnknownBytes()->size()); + break; } }
kUnknown
tag.void use_union(fidl_test::wire::JsonValue* value) { switch (value->which()) { case fidl_test::wire::JsonValue::Tag::kIntValue: printf("int value: %d\n", value->int_value()); break; case fidl_test::wire::JsonValue::Tag::kStringValue: printf("string value: %s\n", value->string_value().data()); break; - default: - printf("<unknown variant>\n"); + case fidl_test::wire::JsonValue::Tag::kUnknown: + printf("<unknown data>\n"); + break; } }
fn use_union(value: &fidl_lib::JsonValue) { - #[allow(unreachable_patterns)] match value { fidl_lib::JsonValue::IntValue(n) => println!("int value: {}", n), fidl_lib::JsonValue::StringValue(s) => println!("string: {}", s), - _ => {} + fidl_lib::JsonValueUnknown!() => println!("<unknown union>"), }; }