DurationShorthand.parse constructor

DurationShorthand.parse(
  1. String value
)

Parse shorthand duration string Supports: .500ms, .5s, .5m, 500ms, 5s, 5m, 1.5s, etc. Note: Leading dot is just stylistic - ".500ms" = "500ms" = 500 milliseconds For decimal values, use "0.5s" not ".5s" (or use number extensions: 0.5.s)

Implementation

factory DurationShorthand.parse(String value) {
  String cleaned = value.trim();

  // Remove leading dot if present (it's just stylistic)
  if (cleaned.startsWith('.')) {
    cleaned = cleaned.substring(1);
  }

  // Parse the value and unit
  final regex = RegExp(r'^(\d+\.?\d*)\s*(ms|s|m|h)$', caseSensitive: false);
  final match = regex.firstMatch(cleaned);

  if (match == null) {
    throw FormatException('Invalid duration format: $value. Expected format: .500ms, .5s, .5m, etc.');
  }

  final numValue = double.parse(match.group(1)!);
  final unit = match.group(2)!.toLowerCase();

  switch (unit) {
    case 'ms':
      return DurationShorthand(Duration(milliseconds: numValue.round()));
    case 's':
      return DurationShorthand(Duration(milliseconds: (numValue * 1000).round()));
    case 'm':
      return DurationShorthand(Duration(milliseconds: (numValue * 60 * 1000).round()));
    case 'h':
      return DurationShorthand(Duration(milliseconds: (numValue * 60 * 60 * 1000).round()));
    default:
      throw FormatException('Unknown duration unit: $unit');
  }
}