Discovery.fromDiscoveryB64 constructor

Discovery.fromDiscoveryB64(
  1. String discoveryB64
)

This factory constructor is used to create a discovery class from a dicovery_b64 string.

Implementation

factory Discovery.fromDiscoveryB64(String discoveryB64) {
  //Strip all after the first :
  if (discoveryB64.contains(':')) {
    discoveryB64 = discoveryB64.substring(0, discoveryB64.indexOf(':'));
  }

  //decode the base64 string to an array of bytes
  final byteArray = base64Decode(discoveryB64);

  final discoveryVersion = DiscoveryVersion(byteArray);

  switch (discoveryVersion.version) {
    case 3:
      return DiscoveryLegacy(byteArray);
    case 4:
      switch (discoveryVersion.advancedVersion) {
        case 0:
          return DiscoveryAdvancedV0(byteArray);
        case 1:
          return DiscoveryAdvancedV1(byteArray);
        case 2:
          return DiscoveryAdvancedV2(byteArray);
        case 3:
          return DiscoveryAdvancedV3(byteArray);
        case >= 4:
          return DiscoveryAdvancedV4(byteArray);
        default:
          throw FormatException(
              "The message contains an unknown advanced version (${discoveryVersion.advancedVersion})");
      }
    default:
      throw FormatException(
          "The message contains an unknown version (${discoveryVersion.version})");
  }
}