Multiaddr.parse constructor

Multiaddr.parse(
  1. String address
)

Parse from human-readable string (e.g., "/ip4/127.0.0.1/udp/1234/quic-v1").

Implementation

factory Multiaddr.parse(String address) {
  if (address.isEmpty || address == '/') {
    return Multiaddr(components: const <MultiaddrComponent>[]);
  }

  final parts = address.split('/');
  if (parts.isEmpty || parts[0].isNotEmpty) {
    throw FormatException('multiaddr must start with /');
  }

  final components = <MultiaddrComponent>[];
  var i = 1;
  while (i < parts.length) {
    final name = parts[i];
    i++;
    if (name.isEmpty) {
      throw FormatException('empty protocol name');
    }

    final info = _protocolsByName[name];
    if (info == null) {
      throw FormatException('unknown protocol');
    }

    String? value;
    if (info.hasValue) {
      if (i >= parts.length) {
        throw FormatException('protocol requires a value');
      }
      value = parts[i];
      i++;
      _validateValue(name, value);
    }

    components.add(MultiaddrComponent(protocol: name, value: value));
  }

  return Multiaddr(components: components);
}