blob: 639e10a6dd05d955cdf774d03752e63e0a3749ca [file] [log] [blame] [view]
<!-- WARNING: This file is machine generated by //src/tests/fidl/source_compatibility/gen, do not edit. -->
Note: This document covers API impact only. For more details, see the
[ABI compatibility page](/docs/development/languages/fidl/guides/compatibility/README.md)
# Add an enum member
## Overview
-|[init](#init)|[step 1](#step-1)|[step 2](#step-2)|[step 3](#step-3)
---|---|---|---|---
fidl|[link](#fidl-init)||[link](#fidl-2)|
dart|[link](#dart-init)|||[link](#dart-3)
go|[link](#go-init)|||[link](#go-3)
hlcpp|[link](#hlcpp-init)|||[link](#hlcpp-3)
llcpp|[link](#llcpp-init)|||[link](#llcpp-3)
rust|[link](#rust-init)|[link](#rust-1)||[link](#rust-3)
## Initial State {#init}
### FIDL {#fidl-init}
```fidl
type Color = flexible enum {
RED = 1;
BLUE = 2;
};
```
### Dart {#dart-init}
```dart
fidllib.Color writer(String s) {
if (s == 'red') {
return fidllib.Color.red;
} else if (s == 'blue') {
return fidllib.Color.blue;
} else {
return fidllib.Color.$unknown;
}
}
String reader(fidllib.Color color) {
switch (color) {
case fidllib.Color.blue:
return 'blue';
case fidllib.Color.red:
return 'red';
default:
return '<unknown>';
}
}
```
### Go {#go-init}
```go
func writer(s string) lib.Color {
switch s {
case "blue":
return lib.ColorBlue
case "red":
return lib.ColorRed
default:
return lib.Color_Unknown
}
}
func reader(color lib.Color) string {
switch color {
case lib.ColorBlue:
return "blue"
case lib.ColorRed:
return "red"
default:
return "<unknown>"
}
}
```
### HLCPP {#hlcpp-init}
```cpp
fidl_test::Color writer(std::string s) {
if (s == "red") {
return fidl_test::Color::RED;
} else if (s == "blue") {
return fidl_test::Color::BLUE;
} else {
return fidl_test::Color::Unknown();
}
}
std::string reader(fidl_test::Color color) {
switch (color) {
case fidl_test::Color::RED:
return "red";
case fidl_test::Color::BLUE:
return "blue";
default:
return "<unknown>";
}
}
```
### LLCPP {#llcpp-init}
```cpp
fidl_test::wire::Color writer(std::string s) {
if (s == "red") {
return fidl_test::wire::Color::kRed;
} else if (s == "blue") {
return fidl_test::wire::Color::kBlue;
} else {
return fidl_test::wire::Color::Unknown();
}
}
std::string reader(fidl_test::wire::Color color) {
switch (color) {
case fidl_test::wire::Color::kRed:
return "red";
case fidl_test::wire::Color::kBlue:
return "blue";
default:
return "<unknown>";
}
}
```
### Rust {#rust-init}
```rust
fn writer(s: &str) -> fidl_lib::Color {
match s {
"red" => fidl_lib::Color::Red,
"blue" => fidl_lib::Color::Blue,
_ => fidl_lib::Color::unknown(),
}
}
fn reader(color: fidl_lib::Color) -> &'static str {
match color {
fidl_lib::Color::Red => "red",
fidl_lib::Color::Blue => "blue",
fidl_lib::ColorUnknown!() => "unknown",
}
}
```
## Update Source Code {#step-1}
### Rust {#rust-1}
- Replace any unknown match arm macros with a catch-all case to handle the soon-to-be-added variant.
```diff
fn writer(s: &str) -> fidl_lib::Color {
match s {
"red" => fidl_lib::Color::Red,
"blue" => fidl_lib::Color::Blue,
_ => fidl_lib::Color::unknown(),
}
}
fn reader(color: fidl_lib::Color) -> &'static str {
match color {
fidl_lib::Color::Red => "red",
fidl_lib::Color::Blue => "blue",
- fidl_lib::ColorUnknown!() => "unknown",
+ _ => "unknown",
}
}
```
## Update FIDL Library {#step-2}
- Add the new member
```diff
type Color = flexible enum {
RED = 1;
BLUE = 2;
+ YELLOW = 3;
};
```
## Update Source Code {#step-3}
### Dart {#dart-3}
- Writers can now produce instances of the new enum member.
```diff
fidllib.Color writer(String s) {
if (s == 'red') {
return fidllib.Color.red;
} else if (s == 'blue') {
return fidllib.Color.blue;
+ } else if (s == 'yellow') {
+ return fidllib.Color.yellow;
} else {
return fidllib.Color.$unknown;
}
}
String reader(fidllib.Color color) {
switch (color) {
case fidllib.Color.blue:
return 'blue';
case fidllib.Color.red:
return 'red';
+ case fidllib.Color.yellow:
+ return 'yellow';
default:
return '<unknown>';
}
}
```
### Go {#go-3}
- Writers can now produce instances of the new enum member.
```diff
func writer(s string) lib.Color {
switch s {
case "blue":
return lib.ColorBlue
case "red":
return lib.ColorRed
+ case "yellow":
+ return lib.ColorYellow
default:
return lib.Color_Unknown
}
}
func reader(color lib.Color) string {
switch color {
case lib.ColorBlue:
return "blue"
case lib.ColorRed:
return "red"
+ case lib.ColorYellow:
+ return "yellow"
default:
return "<unknown>"
}
}
```
### HLCPP {#hlcpp-3}
- Writers can now produce instances of the new enum member.
```diff
fidl_test::Color writer(std::string s) {
if (s == "red") {
return fidl_test::Color::RED;
} else if (s == "blue") {
return fidl_test::Color::BLUE;
+ } else if (s == "yellow") {
+ return fidl_test::Color::YELLOW;
} else {
return fidl_test::Color::Unknown();
}
}
std::string reader(fidl_test::Color color) {
switch (color) {
case fidl_test::Color::RED:
return "red";
case fidl_test::Color::BLUE:
return "blue";
+ case fidl_test::Color::YELLOW:
+ return "yellow";
default:
return "<unknown>";
}
}
```
### LLCPP {#llcpp-3}
- Writers can now produce instances of the new enum member.
```diff
fidl_test::wire::Color writer(std::string s) {
if (s == "red") {
return fidl_test::wire::Color::kRed;
} else if (s == "blue") {
return fidl_test::wire::Color::kBlue;
+ } else if (s == "yellow") {
+ return fidl_test::wire::Color::kYellow;
} else {
return fidl_test::wire::Color::Unknown();
}
}
std::string reader(fidl_test::wire::Color color) {
switch (color) {
case fidl_test::wire::Color::kRed:
return "red";
case fidl_test::wire::Color::kBlue:
return "blue";
+ case fidl_test::wire::Color::kYellow:
+ return "yellow";
default:
return "<unknown>";
}
}
```
### Rust {#rust-3}
- Writers can now produce instances of the new enum member.
- Replace the catch-all case with the unknown macro.
```diff
fn writer(s: &str) -> fidl_lib::Color {
match s {
"red" => fidl_lib::Color::Red,
"blue" => fidl_lib::Color::Blue,
+ "yellow" => fidl_lib::Color::Yellow,
_ => fidl_lib::Color::unknown(),
}
}
fn reader(color: fidl_lib::Color) -> &'static str {
match color {
fidl_lib::Color::Red => "red",
fidl_lib::Color::Blue => "blue",
- _ => "unknown",
+ fidl_lib::Color::Yellow => "yellow",
+ fidl_lib::ColorUnknown!() => "unknown",
}
}
```