parse static method

WcUri parse(
  1. String uri
)

Implementation

static WcUri parse(String uri) {
  if (!uri.startsWith('wc:')) {
    throw FormatException('not a wc: URI: $uri');
  }
  final body = uri.substring(3);
  final qIdx = body.indexOf('?');
  final pathPart = qIdx >= 0 ? body.substring(0, qIdx) : body;
  final query = qIdx >= 0 ? body.substring(qIdx + 1) : '';

  final at = pathPart.indexOf('@');
  if (at < 0) {
    throw FormatException('missing version in wc: URI: $uri');
  }
  final topic = pathPart.substring(0, at);
  final version = int.parse(pathPart.substring(at + 1));

  final params = <String, String>{};
  if (query.isNotEmpty) {
    for (final pair in query.split('&')) {
      final eq = pair.indexOf('=');
      if (eq < 0) continue;
      final k = Uri.decodeComponent(pair.substring(0, eq));
      final v = Uri.decodeComponent(pair.substring(eq + 1));
      params[k] = v;
    }
  }

  if (version == 1) {
    return WcUri(
      topic: topic,
      version: 1,
      bridge: params['bridge'],
      key: params['key'],
    );
  }
  return WcUri(
    topic: topic,
    version: version,
    relayProtocol: params['relay-protocol'],
    symKey: params['symKey'],
  );
}