1
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:
2025-02-13 04:42:49 +08:00
parent 90407dcd0d
commit e840f6bd50
5 changed files with 118 additions and 0 deletions
@@ -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;
}
@@ -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);
}
}
@@ -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);
}