Note: This document covers API impact only. For more details, see the ABI compatibility page

Remove an enum member

Overview

-initstep 1step 2step 3
fidllinklink
dartlinklink
golinklink
hlcpplinklink
llcpplinklink
rustlinklinklink

Initial State

FIDL

type Color = flexible enum {
    RED = 1;
    BLUE = 2;
    YELLOW = 3;
};

Dart

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

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

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

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

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",
        fidl_lib::Color::Yellow => "yellow",
        fidl_lib::ColorUnknown!() => "unknown",
    }
}

Update Source Code

Dart

  • Remove all references to the soon-to-be-removed member.
  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

  • Remove all references to the soon-to-be-removed member.
  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

  • Remove all references to the soon-to-be-removed member.
  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

  • Remove all references to the soon-to-be-removed member.
  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

  • Remove all references to the soon-to-be-removed member. For readers, the member should be temporarily handled as part of a catch-all case.
  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",
-         fidl_lib::Color::Yellow => "yellow",
-         fidl_lib::ColorUnknown!() => "unknown",
+         _ => "unknown",
      }
  }

Update FIDL Library

  • Remove the enum member
  type Color = flexible enum {
      RED = 1;
      BLUE = 2;
-     YELLOW = 3;
  };

Update Source Code

Rust

  • Readers no longer need to handle the removed enum member in any switch statements.
  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",
-         _ => "unknown",
+         fidl_lib::ColorUnknown!() => "unknown",
      }
  }