From f3120149185cabd572c3d5fcf33534832fb002d3 Mon Sep 17 00:00:00 2001 From: Ali Rabiee Date: Wed, 10 Apr 2024 18:00:07 +0200 Subject: [PATCH 1/2] Add CustomScalar support to ValueFormatter --- .../impl/core/utils/ValueFormatter.java | 25 +++++-- .../impl/core/utils/ValueFormatterTest.java | 72 ++++++++++++++++--- 2 files changed, 81 insertions(+), 16 deletions(-) diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java index 3e492f725..b1b56e27d 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java @@ -1,18 +1,22 @@ package io.smallrye.graphql.client.impl.core.utils; -import java.lang.reflect.Array; -import java.time.LocalDate; -import java.util.UUID; - +import io.smallrye.graphql.api.CustomFloatScalar; +import io.smallrye.graphql.api.CustomIntScalar; +import io.smallrye.graphql.api.CustomStringScalar; import io.smallrye.graphql.client.core.exceptions.BuildException; import io.smallrye.graphql.client.impl.core.EnumImpl; import io.smallrye.graphql.client.impl.core.InputObjectImpl; import io.smallrye.graphql.client.impl.core.VariableImpl; +import java.lang.reflect.Array; +import java.time.LocalDate; +import java.util.UUID; public class ValueFormatter { - private final static Class[] QUOTED_VALUES = new Class[] { String.class, Character.class, LocalDate.class, UUID.class }; - private final static Class[] UNQUOTED_VALUES = new Class[] { Number.class, Boolean.class, Enum.class }; + private final static Class[] QUOTED_VALUES = new Class[] { String.class, Character.class, LocalDate.class, UUID.class, + CustomStringScalar.class }; + private final static Class[] UNQUOTED_VALUES = new Class[] { Number.class, Boolean.class, Enum.class, + CustomIntScalar.class, CustomFloatScalar.class }; public static boolean assignableFrom(Class clazz, Class[] candidates) { for (Class candidate : candidates) { @@ -39,6 +43,15 @@ public static String format(Object value) throws BuildException { return _processArray(value); } else if (value instanceof Iterable) { return _processIterable((Iterable) value); + } else if (value instanceof CustomStringScalar) { + CustomStringScalar css = (CustomStringScalar) value; + return _getAsQuotedString(String.valueOf(css.stringValueForSerialization())); + } else if (value instanceof CustomIntScalar) { + CustomIntScalar cis = (CustomIntScalar) value; + return cis.intValueForSerialization().toString(); + } else if (value instanceof CustomFloatScalar) { + CustomFloatScalar cfs = (CustomFloatScalar) value; + return cfs.floatValueForSerialization().toString(); } else { if (assignableFrom(value.getClass(), QUOTED_VALUES)) { return _getAsQuotedString(String.valueOf(value)); diff --git a/client/implementation/src/test/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatterTest.java b/client/implementation/src/test/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatterTest.java index 33097e728..6b1a2ab7a 100644 --- a/client/implementation/src/test/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatterTest.java +++ b/client/implementation/src/test/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatterTest.java @@ -3,9 +3,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import io.smallrye.graphql.api.CustomFloatScalar; +import io.smallrye.graphql.api.CustomIntScalar; +import io.smallrye.graphql.api.CustomStringScalar; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.Date; import java.util.Map; - import org.junit.jupiter.api.Test; class ValueFormatterTest { @@ -13,17 +17,11 @@ class ValueFormatterTest { @Test public void testUnsupportedInput() { - assertThrows(IllegalStateException.class, () -> { - ValueFormatter.format(new Object()); - }); + assertThrows(IllegalStateException.class, () -> ValueFormatter.format(new Object())); - assertThrows(IllegalStateException.class, () -> { - ValueFormatter.format(Map.of("test", "value")); - }); + assertThrows(IllegalStateException.class, () -> ValueFormatter.format(Map.of("test", "value"))); - assertThrows(IllegalStateException.class, () -> { - ValueFormatter.format(new Date()); - }); + assertThrows(IllegalStateException.class, () -> ValueFormatter.format(new Date())); } @Test @@ -34,9 +32,63 @@ public void testEnumInput() { assertEquals(Order.ASC.toString(), value); } + @Test + public void testCustomStringScalarInput() { + + final var customString = new CustomString(); + final var value = ValueFormatter.format(customString); + + assertEquals("\"" + customString.stringValueForSerialization() + "\"", value); + } + + @Test + public void testCustomIntScalarInput() { + + final var customInt = new CustomInt(); + final var value = ValueFormatter.format(customInt); + + assertEquals(customInt.intValueForSerialization().toString(), value); + } + + @Test + public void testCustomFloatScalarInput() { + + final var customFloat = new CustomFloat(); + final var value = ValueFormatter.format(customFloat); + + assertEquals(customFloat.floatValueForSerialization().toString(), value); + } + enum Order { ASC, DESC } + // custom string scalar + static class CustomString implements CustomStringScalar { + + @Override + public String stringValueForSerialization() { + return "test value"; + } + } + + // custom int scalar + static class CustomInt implements CustomIntScalar { + + @Override + public BigInteger intValueForSerialization() { + return BigInteger.valueOf(123); + } + } + + // custom float scalar + static class CustomFloat implements CustomFloatScalar { + + @Override + public BigDecimal floatValueForSerialization() { + return BigDecimal.valueOf(12.3f); + } + } + } From b2484d4f130443119cc841c00635c2a38fb66749 Mon Sep 17 00:00:00 2001 From: Ali Rabiee Date: Wed, 10 Apr 2024 18:00:54 +0200 Subject: [PATCH 2/2] Remove old code --- .../graphql/client/impl/core/utils/ValueFormatter.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java index b1b56e27d..e83e54b71 100644 --- a/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java +++ b/client/implementation/src/main/java/io/smallrye/graphql/client/impl/core/utils/ValueFormatter.java @@ -13,10 +13,8 @@ public class ValueFormatter { - private final static Class[] QUOTED_VALUES = new Class[] { String.class, Character.class, LocalDate.class, UUID.class, - CustomStringScalar.class }; - private final static Class[] UNQUOTED_VALUES = new Class[] { Number.class, Boolean.class, Enum.class, - CustomIntScalar.class, CustomFloatScalar.class }; + private final static Class[] QUOTED_VALUES = new Class[] { String.class, Character.class, LocalDate.class, UUID.class }; + private final static Class[] UNQUOTED_VALUES = new Class[] { Number.class, Boolean.class, Enum.class }; public static boolean assignableFrom(Class clazz, Class[] candidates) { for (Class candidate : candidates) {