docs: public static List<SegmentId> iteratePossibleParsingsWithDataSource(String dataSource, String segmentId)
    {
      if (!segmentId.startsWith(dataSource) || segmentId.charAt(dataSource.length()) != DELIMITER) {
        return Collections.emptyList();
      }
  
      String remaining = segmentId.substring(dataSource.length() + 1);
      List<String> splits = DELIMITER_SPLITTER.splitToList(remaining);
      if (splits.size() < 3) {
        return Collections.emptyList();
      }
  
      DateTime start;
      DateTime end;
      try {
        start = DateTimes.ISO_DATE_TIME.parse(splits.get(0));
        end = DateTimes.ISO_DATE_TIME.parse(splits.get(1));
      }
      catch (IllegalArgumentException e) {
        return Collections.emptyList();
      }
      if (start.compareTo(end) >= 0) {
        return Collections.emptyList();
      }
      List<SegmentId> possibleParsings = new ArrayList<>(2);
      String version = DELIMITER_JOINER.join(splits.subList(2, Math.max(splits.size() - 1, 3)));
      String trail = splits.size() > 3 ? splits.get(splits.size() - 1) : null;
      if (trail != null) {
        Integer possiblePartitionNum = Ints.tryParse(trail);
        if (possiblePartitionNum != null && possiblePartitionNum > 0) {
          possibleParsings.add(of(dataSource, new Interval(start, end), version, possiblePartitionNum));
        }
        version = version + '_' + trail;
      }
      possibleParsings.add(of(dataSource, new Interval(start, end), version, 0));
      return possibleParsings;
    }