mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2026-06-05 02:58:20 +08:00
feat(versioned): Add versioned feature
This commit is contained in:
+28
@@ -0,0 +1,28 @@
|
||||
package cc.carm.lib.configuration.annotation;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Range;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
|
||||
/**
|
||||
* The version of specific {@link cc.carm.lib.configuration.value.ConfigValue}.
|
||||
* <br> Used for versioning target field for rewrite/upgrade.
|
||||
*/
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ConfigVersion {
|
||||
|
||||
/**
|
||||
* The version of the configuration field.
|
||||
*
|
||||
* @return the version of the configuration field
|
||||
*/
|
||||
@Range(from = 0, to = Integer.MAX_VALUE)
|
||||
int value() default 0;
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package cc.carm.lib.configuration.commentable;
|
||||
|
||||
import cc.carm.lib.configuration.annotation.ConfigVersion;
|
||||
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||
import cc.carm.lib.configuration.source.loader.ConfigurationInitializer;
|
||||
import cc.carm.lib.configuration.source.meta.ConfigurationMetadata;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface VersionedMetaTypes {
|
||||
|
||||
/**
|
||||
* The version of specific {@link cc.carm.lib.configuration.value.ConfigValue}.
|
||||
* <br> Used for versioning target field for rewrite/upgrade.
|
||||
*/
|
||||
ConfigurationMetadata<Integer> VERSION = ConfigurationMetadata.of(0);
|
||||
|
||||
static void register(@NotNull ConfigurationHolder<?> provider) {
|
||||
register(provider.initializer());
|
||||
}
|
||||
|
||||
static void register(@NotNull ConfigurationInitializer initializer) {
|
||||
initializer.registerAnnotation(ConfigVersion.class, VERSION, ConfigVersion::value);
|
||||
}
|
||||
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package cc.carm.lib.configuration.option;
|
||||
|
||||
import cc.carm.lib.configuration.source.option.ConfigurationOption;
|
||||
|
||||
public interface VersionedOptions {
|
||||
|
||||
/**
|
||||
* Whether to set newer defaults when a {@link cc.carm.lib.configuration.value.ConfigValue}'s marked version
|
||||
* is newer than the current in storage.
|
||||
*/
|
||||
ConfigurationOption<Boolean> RESET_NEWER_DEFAULTS = ConfigurationOption.of(true);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user