Ajout du filtre json
All checks were successful
Maven build / build (push) Successful in 1m44s

This commit is contained in:
Guillaume Dugas
2026-02-25 16:53:11 +01:00
parent b205c0d18a
commit f011b0cb89
3 changed files with 102 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package fr.cnd.compositor.blocks.pebble;
import io.pebbletemplates.pebble.extension.AbstractExtension;
import io.pebbletemplates.pebble.extension.Filter;
import io.pebbletemplates.pebble.extension.Function;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@@ -12,8 +13,18 @@ public class PebbleBlocksExtension extends AbstractExtension {
@Inject
PebbleSlotFunction pebbleSlotFunction;
@Inject
PebbleJsonFilter pebbleJsonFilter;
@Override
public Map<String, Function> getFunctions() {
return Map.of("slot", pebbleSlotFunction);
}
@Override
public Map<String, Filter> getFilters() {
return Map.of("json", pebbleJsonFilter);
}
}

View File

@@ -0,0 +1,35 @@
package fr.cnd.compositor.blocks.pebble;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.pebbletemplates.pebble.error.PebbleException;
import io.pebbletemplates.pebble.extension.Filter;
import io.pebbletemplates.pebble.extension.escaper.SafeString;
import io.pebbletemplates.pebble.template.EvaluationContext;
import io.pebbletemplates.pebble.template.PebbleTemplate;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.util.List;
import java.util.Map;
@ApplicationScoped
public class PebbleJsonFilter implements Filter {
@Inject
ObjectMapper objectMapper;
@Override
public Object apply(Object input, Map<String, Object> args, PebbleTemplate self, EvaluationContext context, int lineNumber) {
try {
return new SafeString(objectMapper.writeValueAsString(input));
} catch (JsonProcessingException e) {
throw new PebbleException(e, "Failed to serialize object to JSON", lineNumber, self.getName());
}
}
@Override
public List<String> getArgumentNames() {
return List.of();
}
}