Skip to content

Latest commit

 

History

History
250 lines (205 loc) · 6.1 KB

File metadata and controls

250 lines (205 loc) · 6.1 KB

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

Remove a table member

Overview

- init step 1 step 2
fidl link link
dart link link
go link link
hlcpp link link
llcpp link link
rust link link

Initial State {#init}

FIDL {#fidl-init}

type Profile = table {
    1: timezone Timezone;
    2: temperature_unit TemperatureUnit;
    3: dark_mode bool;
};

Dart {#dart-init}

void useTable(fidllib.Profile profile) {
  if (profile.timezone != null) {
    print('timezone: ${profile.timezone}');
  }
  if (profile.temperatureUnit != null) {
    print('preferred unit: ${profile.temperatureUnit}');
  }
  if (profile.darkMode != null) {
    print('dark mode on: ${profile.darkMode}');
  }
  profile.$unknownData?.forEach((ordinal, data) {
    print('unknown ordinal $ordinal with bytes ${data.data}');
  });
}

Go {#go-init}

func useTable(profile lib.Profile) {
	if profile.HasTimezone() {
		fmt.Printf("timezone: %s", profile.GetTimezone())
	}
	if profile.HasTemperatureUnit() {
		fmt.Printf("preferred unit: %s", profile.GetTemperatureUnit())
	}
	if profile.HasDarkMode() {
		fmt.Printf("dark mode on: %t", profile.GetDarkMode())
	}
	for ord, data := range profile.GetUnknownData() {
		fmt.Printf("unknown ordinal %d with bytes %v", ord, data.Bytes)
	}
}

HLCPP {#hlcpp-init}

void use_table(const fidl_test::Profile& profile) {
  if (profile.has_timezone()) {
    printf("timezone: %s", profile.timezone().c_str());
  }
  if (profile.has_temperature_unit()) {
    printf("preferred unit: %s", profile.temperature_unit().c_str());
  }
  if (profile.has_dark_mode()) {
    printf("dark mode on: %s", profile.dark_mode() ? "true" : "false");
  }
  for (const auto& entry : profile.UnknownData()) {
    printf("unknown ordinal %lu", entry.first);
  }
}

LLCPP {#llcpp-init}

void use_table(const fidl_test::wire::Profile& profile) {
  if (profile.has_timezone()) {
    printf("timezone: %s", profile.timezone().data());
  }
  if (profile.has_temperature_unit()) {
    printf("preferred unit: %s", profile.temperature_unit().data());
  }
  if (profile.has_dark_mode()) {
    printf("dark mode on: %s", profile.dark_mode() ? "true" : "false");
  }
}

Rust {#rust-init}

fn use_table(profile: &fidl_lib::Profile) {
    if let Some(tz) = &profile.timezone {
        println!("timezone: {:?}", tz);
    }
    if let Some(unit) = &profile.temperature_unit {
        println!("preferred unit: {:?}", unit);
    }
    if let Some(is_on) = &profile.dark_mode {
        println!("dark mode on: {}", is_on);
    }
    if let Some(data) = &profile.unknown_data {
        for (ordinal, bytes) in data.iter() {
            println!("unknown ordinal {} with bytes {:?}", ordinal, bytes);
        }
    }
}

Update Source Code {#step-1}

Dart {#dart-1}

  • Remove references to the soon-to-be-removed member
  void useTable(fidllib.Profile profile) {
    if (profile.timezone != null) {
      print('timezone: ${profile.timezone}');
    }
    if (profile.temperatureUnit != null) {
      print('preferred unit: ${profile.temperatureUnit}');
    }
-   if (profile.darkMode != null) {
-     print('dark mode on: ${profile.darkMode}');
-   }
    profile.$unknownData?.forEach((ordinal, data) {
      print('unknown ordinal $ordinal with bytes ${data.data}');
    });
  }

Go {#go-1}

  • Remove references to the soon-to-be-removed member
  func useTable(profile lib.Profile) {
  	if profile.HasTimezone() {
  		fmt.Printf("timezone: %s", profile.GetTimezone())
  	}
  	if profile.HasTemperatureUnit() {
  		fmt.Printf("preferred unit: %s", profile.GetTemperatureUnit())
  	}
- 	if profile.HasDarkMode() {
- 		fmt.Printf("dark mode on: %t", profile.GetDarkMode())
- 	}
  	for ord, data := range profile.GetUnknownData() {
  		fmt.Printf("unknown ordinal %d with bytes %v", ord, data.Bytes)
  	}
  }
  

HLCPP {#hlcpp-1}

  • Remove references to the soon-to-be-removed member
  void use_table(const fidl_test::Profile& profile) {
    if (profile.has_timezone()) {
      printf("timezone: %s", profile.timezone().c_str());
    }
    if (profile.has_temperature_unit()) {
      printf("preferred unit: %s", profile.temperature_unit().c_str());
    }
-   if (profile.has_dark_mode()) {
-     printf("dark mode on: %s", profile.dark_mode() ? "true" : "false");
-   }
    for (const auto& entry : profile.UnknownData()) {
      printf("unknown ordinal %lu", entry.first);
    }
  }

LLCPP {#llcpp-1}

  • Remove references to the soon-to-be-removed member
  void use_table(const fidl_test::wire::Profile& profile) {
    if (profile.has_timezone()) {
      printf("timezone: %s", profile.timezone().data());
    }
    if (profile.has_temperature_unit()) {
      printf("preferred unit: %s", profile.temperature_unit().data());
    }
-   if (profile.has_dark_mode()) {
-     printf("dark mode on: %s", profile.dark_mode() ? "true" : "false");
-   }
  }

Rust {#rust-1}

  • Remove references to the soon-to-be-removed member
  fn use_table(profile: &fidl_lib::Profile) {
      if let Some(tz) = &profile.timezone {
          println!("timezone: {:?}", tz);
      }
      if let Some(unit) = &profile.temperature_unit {
          println!("preferred unit: {:?}", unit);
      }
-     if let Some(is_on) = &profile.dark_mode {
-         println!("dark mode on: {}", is_on);
-     }
      if let Some(data) = &profile.unknown_data {
          for (ordinal, bytes) in data.iter() {
              println!("unknown ordinal {} with bytes {:?}", ordinal, bytes);
          }
      }
  }

Update FIDL Library {#step-2}

  • Remove the member
  type Profile = table {
      1: timezone Timezone;
      2: temperature_unit TemperatureUnit;
-     3: dark_mode bool;
  };