+ * For example {@link AscendantsDescendantsRequestParametizer} needs a custom treatment for Strings for attribute filtreNom.
+ * So it overrides the method {@link ParametersForQuery#findParameterValueDecoder(RecordComponent)} and for the attribute
+ * filtreNom, it returns its custom decoder with this kind of code :
+ *
+ * if ("filtreNom".equals(recordComponent.getName())){
+ * return new ParameterValueDecoder.DelegaterDecoder
+ *
+ * The DelegaterDecoder is never be returned by
+ * { @link fr.insee.rmes.metadata.queries.parameters.ParameterValueDecoder#of(java.lang.Class)} and can only be
+ * used when explicitly instanced in a method such as {@link AscendantsDescendantsRequestParametizer#findParameterValueDecoder(RecordComponent)}
+ *
+ * @param delegatedDecoder : a function applied to decode the value
+ * @param : the type for which the instance will decode
+ */
+ record DelegaterDecoder(Function delegatedDecoder) implements ParameterValueDecoder {
+ @Override
+ public String decode(U value) {
+ return delegatedDecoder.apply(value);
+ }
+ }
+
+}
diff --git a/impl/src/main/java/fr/insee/rmes/metadata/queries/parameters/ParametersForQuery.java b/impl/src/main/java/fr/insee/rmes/metadata/queries/parameters/ParametersForQuery.java
new file mode 100644
index 00000000..d52476f4
--- /dev/null
+++ b/impl/src/main/java/fr/insee/rmes/metadata/queries/parameters/ParametersForQuery.java
@@ -0,0 +1,37 @@
+package fr.insee.rmes.metadata.queries.parameters;
+
+import java.lang.reflect.RecordComponent;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.springframework.util.ReflectionUtils.invokeMethod;
+
+public interface ParametersForQuery