Note: This document covers API impact only. For more details, see the ABI compatibility page
- | init | step 1 | step 2 | step 3 | step 4 |
---|---|---|---|---|---|
fidl | link | link | link | ||
dart | link | link | |||
go | link | link | |||
hlcpp | link | link | link | ||
llcpp | link | link | link | ||
rust | link | link | link |
type Color = strict enum : int32 { RED = 1; BLUE = 2; UNKNOWN_COLOR = 3; };
fidllib.Color writer(String s) { if (s == 'red') { return fidllib.Color.red; } else if (s == 'blue') { return fidllib.Color.blue; } else { return fidllib.Color.unknownColor; } } String reader(fidllib.Color color) { switch (color) { case fidllib.Color.blue: return 'blue'; case fidllib.Color.red: return 'red'; case fidllib.Color.unknownColor: return 'unknown'; default: return 'error'; } }
func writer(s string) lib.Color {
switch {
case s == "blue":
return lib.ColorBlue
case s == "red":
return lib.ColorRed
default:
return lib.ColorUnknownColor
}
}
func reader(color lib.Color) (string, error) {
switch color {
case lib.ColorBlue:
return "blue", nil
case lib.ColorRed:
return "red", nil
case lib.ColorUnknownColor:
return "unknown", nil
default:
return "", errors.New("invalid color enum")
}
}
template <fidl_test::Color color> class ComplementaryColors {}; 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_COLOR; } } 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::UNKNOWN_COLOR: return "unknown"; default: return "error"; } }
template <fidl_test::wire::Color color> class ComplementaryColors {}; 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::kUnknownColor; } } 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::kUnknownColor: return "unknown"; default: return "error"; } }
fn writer(s: &str) -> fidl_lib::Color { match s { "red" => fidl_lib::Color::Red, "blue" => fidl_lib::Color::Blue, _ => fidl_lib::Color::UnknownColor, } } fn reader(color: fidl_lib::Color) -> &'static str { match color { fidl_lib::Color::Red => "red", fidl_lib::Color::Blue => "blue", fidl_lib::Color::UnknownColor => "unknown", } }
- template <fidl_test::Color color> - class ComplementaryColors {}; - 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_COLOR; } } std::string reader(fidl_test::Color color) { switch (color) {
- template <fidl_test::wire::Color color> - class ComplementaryColors {}; - 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::kUnknownColor; } } std::string reader(fidl_test::wire::Color color) { switch (color) {
match
statements on the enum.fn writer(s: &str) -> fidl_lib::Color { match s { "red" => fidl_lib::Color::Red, "blue" => fidl_lib::Color::Blue, _ => fidl_lib::Color::UnknownColor, } } fn reader(color: fidl_lib::Color) -> &'static str { + #[allow(unreachable_patterns)] match color { fidl_lib::Color::Red => "red", fidl_lib::Color::Blue => "blue", - fidl_lib::Color::UnknownColor => "unknown", + _ => "unknown", } }
strict
to flexible
[Unknown]
attribute to it- type Color = strict enum : int32 { + type Color = flexible enum : int32 { RED = 1; BLUE = 2; + @unknown UNKNOWN_COLOR = 3; };
isUnknown
and $unknown
.fidllib.Color writer(String s) { if (s == 'red') { return fidllib.Color.red; } else if (s == 'blue') { return fidllib.Color.blue; } else { - return fidllib.Color.unknownColor; + return fidllib.Color.$unknown; } } String reader(fidllib.Color color) { + if (color.isUnknown()) { + return 'unknown'; + } switch (color) { case fidllib.Color.blue: return 'blue'; case fidllib.Color.red: return 'red'; - case fidllib.Color.unknownColor: - return 'unknown'; default: return 'error'; } }
IsUnknown
and the _Unknown
constant.func writer(s string) lib.Color { switch { case s == "blue": return lib.ColorBlue case s == "red": return lib.ColorRed default: - return lib.ColorUnknownColor + return lib.Color_Unknown } } func reader(color lib.Color) (string, error) { + if color.IsUnknown() { + return "unknown", nil + } switch color { case lib.ColorBlue: return "blue", nil case lib.ColorRed: return "red", nil - case lib.ColorUnknownColor: - return "unknown", nil default: return "", errors.New("invalid color enum") } }
IsUnknown
and Unknown
.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_COLOR; + return fidl_test::Color::Unknown(); } } std::string reader(fidl_test::Color color) { + if (color.IsUnknown()) { + return "unknown"; + } switch (color) { case fidl_test::Color::RED: return "red"; case fidl_test::Color::BLUE: return "blue"; - case fidl_test::Color::UNKNOWN_COLOR: - return "unknown"; default: return "error"; } }
IsUnknown
and Unknown
.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::kUnknownColor; + return fidl_test::wire::Color::Unknown(); } } std::string reader(fidl_test::wire::Color color) { + if (color.IsUnknown()) { + return "unknown"; + } switch (color) { case fidl_test::wire::Color::kRed: return "red"; case fidl_test::wire::Color::kBlue: return "blue"; - case fidl_test::wire::Color::kUnknownColor: - return "unknown"; default: return "error"; } }
ColorUnknown!
macro (or is_unknown
outside of match statements) and unknown
.fn writer(s: &str) -> fidl_lib::Color { match s { "red" => fidl_lib::Color::Red, "blue" => fidl_lib::Color::Blue, - _ => fidl_lib::Color::UnknownColor, + _ => fidl_lib::Color::unknown(), } } fn reader(color: fidl_lib::Color) -> &'static str { - #[allow(unreachable_patterns)] match color { fidl_lib::Color::Red => "red", fidl_lib::Color::Blue => "blue", - _ => "unknown", + fidl_lib::ColorUnknown!() => "unknown", } }
type Color = flexible enum : int32 { RED = 1; BLUE = 2; - @unknown - UNKNOWN_COLOR = 3; };