diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaNumberPreprocessor.java b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaNumberPreprocessor.java
index 54c1f2adc..ec3ae73f5 100644
--- a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaNumberPreprocessor.java
+++ b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaNumberPreprocessor.java
@@ -12,10 +12,11 @@ import com.dfsek.terra.api.util.reflection.TypeKey;
import org.jetbrains.annotations.NotNull;
import java.lang.reflect.AnnotatedType;
+import java.util.Arrays;
import java.util.Map;
public class MetaNumberPreprocessor extends MetaPreprocessor {
- public static final TypeKey<@Meta String> META_STRING_KEY = new TypeKey<>() {};
+ public static final TypeKey META_STRING_KEY = new TypeKey<@Meta String>() {};
public MetaNumberPreprocessor(Map configs) {
super(configs);
diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java
index d26721c36..c941b8649 100644
--- a/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java
+++ b/common/implementation/src/main/java/com/dfsek/terra/config/preprocessor/MetaStringPreprocessor.java
@@ -24,10 +24,10 @@ public class MetaStringPreprocessor extends MetaPreprocessor {
String candidate = (String) c;
StringSubstitutor substitutor = new StringSubstitutor(key -> {
Object meta = getMetaValue(key);
- if(!(meta instanceof String)) {
- throw new LoadException("MetaString template injection candidate must be string, is type " + meta.getClass().getCanonicalName());
+ if(!(meta instanceof String) && !(meta instanceof Number) && !(meta instanceof Character) && !(meta instanceof Boolean)) {
+ throw new LoadException("MetaString template injection candidate must be string or primitive, is type " + meta.getClass().getCanonicalName());
}
- return (String) meta;
+ return meta.toString();
});
return (Result) Result.overwrite(substitutor.replace(candidate));
}
diff --git a/common/implementation/src/test/java/MetaTest.java b/common/implementation/src/test/java/MetaTest.java
index 84ca5443d..6d48edaed 100644
--- a/common/implementation/src/test/java/MetaTest.java
+++ b/common/implementation/src/test/java/MetaTest.java
@@ -6,6 +6,7 @@ import com.dfsek.tectonic.yaml.YamlConfiguration;
import com.dfsek.terra.api.config.meta.Meta;
import com.dfsek.terra.config.preprocessor.MetaListLikePreprocessor;
import com.dfsek.terra.config.preprocessor.MetaMapPreprocessor;
+import com.dfsek.terra.config.preprocessor.MetaNumberPreprocessor;
import com.dfsek.terra.config.preprocessor.MetaStringPreprocessor;
import com.dfsek.terra.config.preprocessor.MetaValuePreprocessor;
import org.junit.jupiter.api.Test;
@@ -26,9 +27,12 @@ public class MetaTest {
configurationMap.put(metaTarget.getName(), metaTarget);
ConfigLoader loader = new ConfigLoader();
- loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaStringPreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaListLikePreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaMapPreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaNumberPreprocessor(configurationMap));
+
+ loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
loader.load(new MetaListConfig(), meta).list.forEach(System.out::println);
}
@@ -49,9 +53,12 @@ public class MetaTest {
configurationMap.put(metaTarget.getName(), metaTarget);
ConfigLoader loader = new ConfigLoader();
- loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaStringPreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaListLikePreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaMapPreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaNumberPreprocessor(configurationMap));
+
+ loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
loader.load(new MetaMapConfig(), meta).map.forEach((k, v) -> System.out.println(k + ": " + v));
}
@@ -72,10 +79,13 @@ public class MetaTest {
configurationMap.put(metaTarget.getName(), metaTarget);
ConfigLoader loader = new ConfigLoader();
- loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
+
+ loader.registerPreprocessor(Meta.class, new MetaStringPreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaListLikePreprocessor(configurationMap));
loader.registerPreprocessor(Meta.class, new MetaMapPreprocessor(configurationMap));
- loader.registerPreprocessor(Meta.class, new MetaStringPreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaNumberPreprocessor(configurationMap));
+
+ loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
System.out.println(loader.load(new MetaStringConfig(), meta).string);
}
@@ -84,4 +94,34 @@ public class MetaTest {
@Value("string")
private @Meta String string;
}
+
+ @Test
+ public void testMetaNumber() {
+ Configuration meta = new YamlConfiguration(MetaTest.class.getResourceAsStream("/meta.yml"), "meta.yml");
+ Configuration metaTarget = new YamlConfiguration(MetaTest.class.getResourceAsStream("/metaTarget.yml"), "metaTarget.yml");
+
+ Map configurationMap = new HashMap<>();
+
+ configurationMap.put(meta.getName(), meta);
+ configurationMap.put(metaTarget.getName(), metaTarget);
+
+ ConfigLoader loader = new ConfigLoader();
+ loader.registerPreprocessor(Meta.class, new MetaStringPreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaListLikePreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaMapPreprocessor(configurationMap));
+ loader.registerPreprocessor(Meta.class, new MetaNumberPreprocessor(configurationMap));
+
+ loader.registerPreprocessor(Meta.class, new MetaValuePreprocessor(configurationMap));
+
+ System.out.println("int: " + loader.load(new MetaNumberConfig(), meta).integer);
+ System.out.println("double: " + loader.load(new MetaNumberConfig(), meta).aDouble);
+ }
+
+ private static final class MetaNumberConfig implements ConfigTemplate {
+ @Value("int")
+ private @Meta int integer;
+
+ @Value("double")
+ private @Meta double aDouble;
+ }
}
diff --git a/common/implementation/src/test/resources/meta.yml b/common/implementation/src/test/resources/meta.yml
index 8a629da42..116b32b89 100644
--- a/common/implementation/src/test/resources/meta.yml
+++ b/common/implementation/src/test/resources/meta.yml
@@ -13,4 +13,6 @@ map:
- metaTarget.yml:map2
one: ONE
two: TWO
-string: "one-${metaTarget.yml:string.two}-${metaTarget.yml:string.three}-four-five-${metaTarget.yml:string.six}"
\ No newline at end of file
+string: "one-${metaTarget.yml:string.two}-${metaTarget.yml:string.three}-four-five-${metaTarget.yml:string.six}"
+int: 2 + 4
+double: ${metaTarget.yml:double} + 5.6
\ No newline at end of file
diff --git a/common/implementation/src/test/resources/metaTarget.yml b/common/implementation/src/test/resources/metaTarget.yml
index 74429a5c3..338930b52 100644
--- a/common/implementation/src/test/resources/metaTarget.yml
+++ b/common/implementation/src/test/resources/metaTarget.yml
@@ -13,4 +13,5 @@ map2:
string:
two: two
three: three
- six: six
\ No newline at end of file
+ six: six
+double: 1
\ No newline at end of file