parse static method
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'],
);
}