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 = 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; 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>")
}
}
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; case fidl_test::JsonValue::Tag::kUnknown: printf("<%lu unknown bytes>\n", value.UnknownBytes()->size()); 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; case fidl_test::wire::JsonValue::Tag::kUnknown: printf("<unknown data>\n"); 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), fidl_lib::JsonValueUnknown!() => println!("<unknown union>"), }; }
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; - case fidllib.JsonValueTag.$unknown: + default: + // Note: unknown variants will fail to decode until the union is marked flexible 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 with a default case in any switch statementsvoid 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; - case fidl_test::JsonValue::Tag::kUnknown: - printf("<%lu unknown bytes>\n", value.UnknownBytes()->size()); - break; + default: + printf("<unknown variant>\n"); } }
kUnknown
tag with a default case in any switch statementsvoid 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; - case fidl_test::wire::JsonValue::Tag::kUnknown: - printf("<unknown data>\n"); - 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), - fidl_lib::JsonValueUnknown!() => println!("<unknown union>"), + _ => {} }; }
flexible
to strict
- type JsonValue = flexible union { + 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; - 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"); } }
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), - _ => {} }; }