parseBundle function

ReturnResults<Resource> parseBundle(
  1. Bundle bundle
)

Extracts all Resources that were returned by the Bundle, as long as they aren't OperationOutcomes, and includes all entries as informational OperationOutcomes that don't contain a Resource

Implementation

ReturnResults<Resource> parseBundle(Bundle bundle) {
  final ReturnResults<Resource> returnResults = ReturnResults<Resource>();
  if (bundle.type == FhirCode('transaction-response')) {
    for (final BundleEntry entry in bundle.entry ?? <BundleEntry>[]) {
      if (entry.resource != null) {
        if (entry.resource is OperationOutcome) {
          if (isInformational(entry.resource! as OperationOutcome)) {
            returnResults.informationOperationOutcomes
                .add(entry.resource! as OperationOutcome);
          } else {
            returnResults.errorOperationOutcomes
                .add(entry.resource! as OperationOutcome);
          }
        } else {
          returnResults.resources.add(entry.resource!);
        }
      } else if (entry.response?.outcome != null) {
        if (entry.response!.outcome is OperationOutcome) {
          if (isInformational(entry.response!.outcome! as OperationOutcome)) {
            returnResults.informationOperationOutcomes
                .add(entry.response!.outcome! as OperationOutcome);
          } else {
            returnResults.errorOperationOutcomes
                .add(entry.response!.outcome! as OperationOutcome);
          }
        } else {
          returnResults.resources.add(entry.response!.outcome!);
        }
      } else {
        returnResults.informationOperationOutcomes.add(
          OperationOutcome(
            issue: <OperationOutcomeIssue>[
              OperationOutcomeIssue(
                code: FhirCode('informational'),
                diagnostics: 'Status: ${entry.response?.status ?? "none"}'
                    '\nLocation: ${entry.response?.location ?? "none"}',
              ),
            ],
          ),
        );
      }
    }
  }
  return returnResults;
}