1
mirror of https://github.com/CarmJos/EasyConfiguration.git synced 2024-09-19 20:25:51 +00:00

feat(adapter): Use registry to manage value adapters

This commit is contained in:
Carm Jos 2024-01-16 02:45:27 +08:00
parent 2ef1471f59
commit c7fb51d6b2
39 changed files with 307 additions and 166 deletions

View File

@ -0,0 +1,45 @@
package cc.carm.lib.configuration.adapter;
import cc.carm.lib.configuration.source.ConfigurationProvider;
import org.jetbrains.annotations.NotNull;
public abstract class ValueAdapter<P extends ConfigurationProvider, B, V> {
protected final Class<B> baseType;
protected final Class<V> valueType;
protected ValueAdapter(Class<B> baseType, Class<V> valueType) {
this.baseType = baseType;
this.valueType = valueType;
}
public Class<B> getBaseType() {
return baseType;
}
public Class<V> getValueType() {
return valueType;
}
public abstract B serialize(@NotNull P provider, @NotNull V value) throws Exception;
public abstract V deserialize(@NotNull P provider, @NotNull B data) throws Exception;
public boolean isAdaptedFrom(Class<?> clazz) {
return clazz.isAssignableFrom(valueType);
}
public boolean isAdaptedFrom(Object object) {
return isAdaptedFrom(object.getClass());
}
protected final V deserializeObject(P provider, Object data) throws Exception {
return deserialize(provider, this.baseType.cast(data));
}
protected final B serializeObject(P provider, Object value) throws Exception {
return serialize(provider, this.valueType.cast(value));
}
}

View File

@ -0,0 +1,79 @@
package cc.carm.lib.configuration.adapter;
import cc.carm.lib.configuration.adapter.primitive.PrimitiveAdapter;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.source.ConfigurationProvider;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
public class ValueAdapterRegistry<P extends ConfigurationProvider> {
protected final @NotNull P provider;
protected final Map<Class<?>, ValueAdapter<P, ?, ?>> adapters = new HashMap<>();
public ValueAdapterRegistry(@NotNull P provider) {
this.provider = provider;
}
public void register(@NotNull ValueAdapter<P, ?, ?> adapter) {
adapters.put(adapter.valueType, adapter);
}
public <B, V> void register(Class<B> baseClass, Class<V> valueClass,
ConfigDataFunction<B, V> parser,
ConfigDataFunction<V, B> serializer) {
register(new ValueAdapter<P, B, V>(baseClass, valueClass) {
@Override
public B serialize(@NotNull P provider, @NotNull V value) throws Exception {
return serializer.parse(value);
}
@Override
public V deserialize(@NotNull P provider, @NotNull B data) throws Exception {
return parser.parse(data);
}
});
}
public void unregister(@NotNull Class<?> typeClass) {
adapters.remove(typeClass);
}
public <T> T deserialize(Class<T> type, Object value) throws Exception {
if (value == null) return null;
if (type == Object.class) return type.cast(value);
ValueAdapter<P, ?, ?> adapter = adapters.get(type);
if (adapter == null) throw new RuntimeException("No adapter for type " + type.getName());
// CHECK IF VALUE IS ADAPTED FROM GIVEN VALUE'S TYPE
if (adapter.isAdaptedFrom(value)) return type.cast(adapter.deserializeObject(provider, value));
// OTHERWISE, WE NEED TO DESERIALIZE ONE BY ONE
Object baseValue = deserialize(adapter.getBaseType(), value);
if (baseValue == null) return null; // Null check
return type.cast(adapter.deserializeObject(provider, baseValue));
}
public <T> Object serialize(T value) throws Exception {
if (value == null) return null;
Class<?> valueClass = value.getClass();
ValueAdapter<P, ?, ?> adapter = adapters.get(valueClass);
if (adapter == null) return value; // No adapters, try to return the original value
if (adapter instanceof PrimitiveAdapter) {
// If the value is adapted from a primitive type,
// we should serialize it into object, then return.
return adapter.serializeObject(provider, value);
}
// Otherwise, we need to serialize one by one.
return serialize(adapter.serializeObject(provider, value));
}
}

View File

@ -0,0 +1,24 @@
package cc.carm.lib.configuration.adapter.primitive;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.source.ConfigurationProvider;
import org.jetbrains.annotations.NotNull;
public abstract class NumberAdapter<P extends ConfigurationProvider, T extends Number> extends PrimitiveAdapter<P, T> {
public static <P extends ConfigurationProvider, T extends Number> NumberAdapter<P, T> of(Class<T> numberClass,
ConfigDataFunction<Object, T> function) {
return new NumberAdapter<P, T>(numberClass) {
@Override
public T deserialize(@NotNull P provider, @NotNull Object data) throws Exception {
return function.parse(data);
}
};
}
protected NumberAdapter(Class<T> valueType) {
super(valueType);
}
}

View File

@ -0,0 +1,18 @@
package cc.carm.lib.configuration.adapter.primitive;
import cc.carm.lib.configuration.adapter.ValueAdapter;
import cc.carm.lib.configuration.source.ConfigurationProvider;
import org.jetbrains.annotations.NotNull;
public abstract class PrimitiveAdapter<P extends ConfigurationProvider, T> extends ValueAdapter<P, Object, T> {
protected PrimitiveAdapter(Class<T> valueType) {
super(Object.class, valueType);
}
@Override
public Object serialize(@NotNull P provider, @NotNull T value) throws Exception {
return value;
}
}

View File

@ -1,4 +1,4 @@
package cc.carm.lib.configuration.core.annotation;
package cc.carm.lib.configuration.annotation;
import cc.carm.lib.configuration.core.ConfigInitializer;

View File

@ -1,4 +1,4 @@
package cc.carm.lib.configuration.core.annotation;
package cc.carm.lib.configuration.annotation;
import org.jetbrains.annotations.NotNull;

View File

@ -1,4 +1,4 @@
package cc.carm.lib.configuration.core.annotation;
package cc.carm.lib.configuration.annotation;
import org.jetbrains.annotations.NotNull;

View File

@ -1,10 +1,10 @@
package cc.carm.lib.configuration.core;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.annotation.InlineComment;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.annotation.InlineComment;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.value.ConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -1,8 +0,0 @@
package cc.carm.lib.configuration.core;
/**
* The root node of the configuration file class,
* which is used to label and record the configuration information.
*/
public abstract class ConfigurationRoot implements Configuration {
}

View File

@ -1,8 +1,8 @@
package cc.carm.lib.configuration.core.builder;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -2,7 +2,7 @@ package cc.carm.lib.configuration.core.builder.list;
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import cc.carm.lib.configuration.value.standard.ConfiguredList;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;

View File

@ -3,8 +3,8 @@ package cc.carm.lib.configuration.core.builder.map;
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap;

View File

@ -2,8 +2,8 @@ package cc.carm.lib.configuration.core.builder.map;
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
import org.jetbrains.annotations.NotNull;
import java.util.Map;

View File

@ -4,7 +4,7 @@ import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.function.ConfigValueParser;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
import org.jetbrains.annotations.NotNull;
import java.util.Map;

View File

@ -3,7 +3,7 @@ package cc.carm.lib.configuration.core.builder.value;
import cc.carm.lib.configuration.core.builder.CommonConfigBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.function.ConfigValueParser;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import org.jetbrains.annotations.NotNull;
public class SourceValueBuilder<S, V> extends CommonConfigBuilder<V, SourceValueBuilder<S, V>> {

View File

@ -1,4 +0,0 @@
package cc.carm.lib.configuration.core.parser;
public class ValueParser {
}

View File

@ -2,9 +2,8 @@ package cc.carm.lib.configuration.core.source;
import cc.carm.lib.configuration.core.ConfigInitializer;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

View File

@ -1,67 +0,0 @@
package cc.carm.lib.configuration.core.util;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class MapFactory<S extends Map<K, V>, K, V> {
private final S map;
protected MapFactory(S map) {
this.map = map;
}
public MapFactory<S, K, V> put(K key, V value) {
this.map.put(key, value);
return this;
}
public MapFactory<S, K, V> remove(K key) {
this.map.remove(key);
return this;
}
public MapFactory<S, K, V> clear() {
this.map.clear();
return this;
}
public S build() {
return get();
}
public S get() {
return map;
}
public static <K, V> MapFactory<HashMap<K, V>, K, V> hashMap() {
return new MapFactory<>(new HashMap<>());
}
public static <K, V> MapFactory<HashMap<K, V>, K, V> hashMap(K firstKey, V firstValue) {
return MapFactory.<K, V>hashMap().put(firstKey, firstValue);
}
public static <K, V> MapFactory<LinkedHashMap<K, V>, K, V> linkedMap() {
return of(new LinkedHashMap<>());
}
public static <K, V> MapFactory<LinkedHashMap<K, V>, K, V> linkedMap(K firstKey, V firstValue) {
return MapFactory.<K, V>linkedMap().put(firstKey, firstValue);
}
public static <K extends Comparable<K>, V> MapFactory<TreeMap<K, V>, K, V> treeMap() {
return of(new TreeMap<>());
}
public static <K extends Comparable<K>, V> MapFactory<TreeMap<K, V>, K, V> treeMap(K firstKey, V firstValue) {
return MapFactory.<K, V>treeMap().put(firstKey, firstValue);
}
public static <M extends Map<K, V>, K, V> MapFactory<M, K, V> of(M map) {
return new MapFactory<>(map);
}
}

View File

@ -0,0 +1,15 @@
package cc.carm.lib.configuration.source;
import cc.carm.lib.configuration.adapter.ValueAdapterRegistry;
import org.jetbrains.annotations.NotNull;
public abstract class ConfigurationBuilder<P extends ConfigurationProvider> {
protected ConfigurationLoader loader;
protected ValueAdapterRegistry<P> processors;
public abstract @NotNull ConfigurationProvider build();
}

View File

@ -0,0 +1,4 @@
package cc.carm.lib.configuration.source;
public interface ConfigurationLoader {
}

View File

@ -0,0 +1,6 @@
package cc.carm.lib.configuration.source;
public class ConfigurationProvider {
}

View File

@ -1,4 +1,4 @@
package cc.carm.lib.configuration.core.value;
package cc.carm.lib.configuration.value;
import cc.carm.lib.configuration.core.builder.ConfigBuilder;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;

View File

@ -1,4 +1,4 @@
package cc.carm.lib.configuration.core.value;
package cc.carm.lib.configuration.value;
import cc.carm.lib.configuration.core.ConfigInitializer;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;

View File

@ -1,7 +1,7 @@
package cc.carm.lib.configuration.core.value.impl;
package cc.carm.lib.configuration.value.impl;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -1,9 +1,9 @@
package cc.carm.lib.configuration.core.value.impl;
package cc.carm.lib.configuration.value.impl;
import cc.carm.lib.configuration.core.builder.map.ConfigMapCreator;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.value.ValueManifest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

View File

@ -1,9 +1,9 @@
package cc.carm.lib.configuration.core.value.type;
package cc.carm.lib.configuration.value.standard;
import cc.carm.lib.configuration.core.builder.list.ConfigListBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -1,9 +1,9 @@
package cc.carm.lib.configuration.core.value.type;
package cc.carm.lib.configuration.value.standard;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
import org.jetbrains.annotations.NotNull;
import java.util.Map;

View File

@ -1,11 +1,11 @@
package cc.carm.lib.configuration.core.value.type;
package cc.carm.lib.configuration.value.standard;
import cc.carm.lib.configuration.core.builder.value.SectionValueBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.function.ConfigValueParser;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -1,9 +1,9 @@
package cc.carm.lib.configuration.core.value.type;
package cc.carm.lib.configuration.value.standard;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.source.ConfigurationWrapper;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.ConfigValueMap;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.ConfigValueMap;
import org.jetbrains.annotations.NotNull;
import java.util.Map;

View File

@ -1,10 +1,10 @@
package cc.carm.lib.configuration.core.value.type;
package cc.carm.lib.configuration.value.standard;
import cc.carm.lib.configuration.core.builder.value.ConfigValueBuilder;
import cc.carm.lib.configuration.core.function.ConfigDataFunction;
import cc.carm.lib.configuration.core.function.ConfigValueParser;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@ -0,0 +1,31 @@
import cc.carm.lib.configuration.adapter.ValueAdapterRegistry;
import cc.carm.lib.configuration.adapter.primitive.NumberAdapter;
import cc.carm.lib.configuration.source.ConfigurationProvider;
import org.junit.Test;
import java.time.Duration;
import java.time.LocalTime;
public class AdaptTest {
@Test
public void test() throws Exception {
ValueAdapterRegistry<?> registry = new ValueAdapterRegistry<>(new ConfigurationProvider());
registry.register(NumberAdapter.of(Long.class, data -> Long.parseLong(data.toString())));
registry.register(NumberAdapter.of(long.class, data -> Long.parseLong(data.toString())));
registry.register(Long.class, Duration.class, Duration::ofSeconds, Duration::getSeconds);
registry.register(
Duration.class, LocalTime.class,
duration -> LocalTime.now().plus(duration),
data -> Duration.between(data, LocalTime.now())
);
LocalTime v = registry.deserialize(LocalTime.class, "600");
Object d = registry.serialize(v);
System.out.println(v);
System.out.println(d);
}
}

View File

@ -1,13 +1,13 @@
package cc.carm.lib.configuration.demo;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
@HeaderComment({"", "数据库配置", " 用于提供数据库连接,进行数据库操作。"})
public class DatabaseConfiguration extends ConfigurationRoot {
public class DatabaseConfiguration implements Configuration {
@ConfigPath("driver")
@HeaderComment({

View File

@ -2,15 +2,14 @@ package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.core.ConfigInitializer;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.annotation.InlineComment;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.annotation.InlineComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredList;
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import cc.carm.lib.configuration.demo.tests.model.TestModel;
import java.time.temporal.ChronoUnit;
@ -56,7 +55,7 @@ public interface DemoConfiguration extends Configuration {
* 支持内部类的直接注册
* 注意需要使用 {@link ConfigInitializer#initialize(Class, boolean, boolean)} 方法并设定第三个参数为 true
*/
class Sub extends ConfigurationRoot {
class Sub implements Configuration {
@ConfigPath(value = "uuid-value", root = true)
@InlineComment("This is an inline comment")
@ -65,7 +64,7 @@ public interface DemoConfiguration extends Configuration {
.parseValue((data, defaultValue) -> UUID.fromString(data))
.build();
public static class That extends ConfigurationRoot {
public static class That implements Configuration {
public static final ConfiguredList<UUID> OPERATORS = ConfiguredList
.builderOf(UUID.class).fromString()

View File

@ -1,17 +1,17 @@
package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.annotation.InlineComment;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredSection;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.annotation.InlineComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredSection;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import cc.carm.lib.configuration.demo.tests.model.TestModel;
import java.util.UUID;
public class TestConfiguration extends ConfigurationRoot {
public class TestConfiguration implements Configuration {
public final TestInnerConfiguration INNER = new TestInnerConfiguration();

View File

@ -1,12 +1,12 @@
package cc.carm.lib.configuration.demo.tests.conf;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
@HeaderComment("Inner Test")
public class TestInnerConfiguration extends ConfigurationRoot {
public class TestInnerConfiguration implements Configuration {
public final ConfigValue<Double> INNER_VALUE = ConfiguredValue.of(Double.class, 1.0D);

View File

@ -1,8 +1,8 @@
package cc.carm.lib.configuration.yaml;
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.core.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.value.impl.CachedConfigValue;
import cc.carm.lib.configuration.yaml.builder.YAMLConfigBuilder;
import org.jetbrains.annotations.NotNull;

View File

@ -1,6 +1,6 @@
package cc.carm.lib.configuration.yaml.value;
import cc.carm.lib.configuration.core.value.ValueManifest;
import cc.carm.lib.configuration.value.ValueManifest;
import cc.carm.lib.configuration.yaml.YAMLValue;
import org.bspfsystems.yamlconfiguration.serialization.ConfigurationSerializable;
import org.jetbrains.annotations.NotNull;

View File

@ -1,12 +1,12 @@
package config.source;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.value.ConfigValue;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
import cc.carm.lib.configuration.core.value.type.ConfiguredSectionMap;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.value.ConfigValue;
import cc.carm.lib.configuration.value.standard.ConfiguredList;
import cc.carm.lib.configuration.value.standard.ConfiguredMap;
import cc.carm.lib.configuration.value.standard.ConfiguredSectionMap;
import cc.carm.lib.configuration.demo.tests.model.AbstractModel;
import cc.carm.lib.configuration.yaml.value.ConfiguredSerializable;
import config.model.AnyModel;
@ -14,7 +14,7 @@ import config.model.SomeModel;
@HeaderComment("以下内容用于测试序列化")
@ConfigPath("model-test")
public class ModelConfiguration extends ConfigurationRoot {
public class ModelConfiguration implements Configuration {
public static final ConfigValue<? extends AbstractModel> SOME_MODEL = ConfiguredSerializable.of(
SomeModel.class, SomeModel.random()

View File

@ -1,11 +1,11 @@
package sample;
import cc.carm.lib.configuration.core.Configuration;
import cc.carm.lib.configuration.core.annotation.ConfigPath;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.configuration.core.annotation.InlineComment;
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
import cc.carm.lib.configuration.annotation.ConfigPath;
import cc.carm.lib.configuration.annotation.HeaderComment;
import cc.carm.lib.configuration.annotation.InlineComment;
import cc.carm.lib.configuration.value.standard.ConfiguredList;
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
import java.util.UUID;