@Override
  public Result convert(Source source) {
    for (Map.Entry<Predicate<Source>, Conversion<Source, Result>> conversionCase : cases) {
      if (conversionCase.getKey().test(source)) {
        return conversionCase.getValue().convert(source);
      }
    }

    return defaultConversion.convert(source);
  }