// Copyright (c) 2011, 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.

// @dart = 2.9

part of utilslib;

/**
 * General purpose string manipulation utilities.
 */
class StringUtils {
  /**
   * Returns either [str], or if [str] is null, the value of [defaultStr].
   */
  static String defaultString(String str, [String defaultStr = '']) {
    return str == null ? defaultStr : str;
  }

  /** Parse string to a double, and handle null intelligently */
  static double parseDouble(String str, [double ifNull = null]) {
    return (str == null) ? ifNull : double.parse(str);
  }

  /** Parse string to a int, and handle null intelligently */
  static int parseInt(String str, [int ifNull = null]) {
    return (str == null) ? ifNull : int.parse(str);
  }

  /** Parse bool to a double, and handle null intelligently */
  // TODO(jacobr): corelib should have a boolean parsing method
  static bool parseBool(String str, [bool ifNull = null]) {
    assert(str == null || str == 'true' || str == 'false');
    return (str == null) ? ifNull : (str == 'true');
  }
}
