execute method

  1. @override
List execute(
  1. List results,
  2. Map<String, dynamic> passed
)
override

The iterable, nested function that evaluates the entire FHIRPath expression one object at a time

Implementation

@override
List execute(List results, Map<String, dynamic> passed) {
  final executedValue = value.execute(results.toList(), passed);
  return results.isEmpty
      ? []
      : results.length > 1
      ? throw _requiresList('.substring()', results)
      : (results.first is! String)
      ? throw _requiresString('.substring()', results)
      : executedValue.isNotEmpty &&
            executedValue.first is int &&
            (((executedValue.first as int) >=
                    (results.first as String).length) ||
                (executedValue.first as int) < 0)
      ? []
      : executedValue.length == 1 && executedValue.first is int
      ? [results.first.toString().substring(executedValue.first as int)]
      : executedValue.length == 2 &&
            executedValue.first is int &&
            executedValue.last is int
      ? [
          results.first.toString().substring(
            executedValue.first as int,
            ((executedValue.first as int) + (executedValue.last as int)) >
                    results.first.toString().length
                ? results.first.toString().length
                : ((executedValue.first as int) +
                      (executedValue.last as int)),
          ),
        ]
      : throw FhirPathEvaluationException(
          'The function .substring() was not provided the '
          ' proper parameters.',
          operation: '.substring()',
          collection: results,
          arguments: executedValue,
        );
}