parse static method

List<ContractMethod> parse(
  1. String contract
)

Parse contract into ordered method pins. Throws WorldManifestError (with the fix hint) when nothing parses — a declared row without at least one parsable method cannot become a touchpoint.

Implementation

static List<ContractMethod> parse(String contract) {
  final methods = <ContractMethod>[];
  for (final match in _method.allMatches(contract)) {
    final params = match
        .group(2)!
        .split(',')
        .map((p) => p.trim())
        .where((p) => p.isNotEmpty)
        .map((p) => p.split(':').first.trim())
        .toList(growable: false);
    methods.add(
      ContractMethod(
        name: match.group(1)!,
        params: params,
        returns: match.group(3)!,
      ),
    );
  }
  if (methods.isEmpty) {
    throw WorldManifestError(
      'contract "$contract" has no parsable methods — expected '
      '"name(params) -> Return, name2() -> void" '
      '--> fix: declare the contract row as method signatures.',
    );
  }
  return methods;
}