class GuavaTemplateCache implements TemplateCache {

  @Override
  public Template get(final TemplateSource source, final Parser parser) throws IOException {
    requireNonNull(source, "The source is required.");
    requireNonNull(parser, "The parser is required.");
    try {
      return cache.get(key(source), () -> parser.parse(source));
    } catch (ExecutionException ex) {
      throw launderThrowable(source, ex.getCause());
    }
  }

  public  GuavaTemplateCache(final Cache<TemplateSource, Template> cache);

}