// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:source_span/source_span.dart';

/// Runs [body] and wraps any format exceptions it produces.
///
/// [name] should describe the type of thing being parsed, and [value] should be
/// its actual value.
T wrapFormatException<T>(String name, String value, T body()) {
  try {
    return body();
  } on SourceSpanFormatException catch (error) {
    throw new SourceSpanFormatException(
        'Invalid $name: ${error.message}', error.span, error.source);
  } on FormatException catch (error) {
    throw new FormatException(
        'Invalid $name "$value": ${error.message}', error.source, error.offset);
  }
}
