| <!-- 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", |
| } |
| } |
| |
| ``` |
| |