strata version loading

This commit is contained in:
dfsek
2021-11-16 09:17:36 -07:00
parent c4171f1a26
commit 06d09bc422
5 changed files with 61 additions and 8 deletions

View File

@@ -1,15 +1,26 @@
package com.dfsek.terra.addons.manifest.impl;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon;
import ca.solostudios.strata.version.Version;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.loading.ConfigLoader;
import java.nio.file.Path;
import java.util.Collections;
import com.dfsek.terra.addons.manifest.impl.config.WebsiteConfig;
import com.dfsek.terra.addons.manifest.impl.config.loaders.VersionLoader;
import com.dfsek.terra.addons.manifest.impl.config.loaders.VersionRangeLoader;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.addon.bootstrap.BootstrapBaseAddon;
public class ManifestAddonLoader implements BootstrapBaseAddon {
@Override
public Iterable<BaseAddon> loadAddons(Path addonsFolder, ClassLoader parent) {
ConfigLoader manifestLoader = new ConfigLoader();
manifestLoader.registerLoader(Version.class, new VersionLoader())
.registerLoader(VersionRange.class, new VersionRangeLoader())
.registerLoader(WebsiteConfig.class, WebsiteConfig::new);
return Collections.emptySet();
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.addons.manifest.impl.config;
import ca.solostudios.strata.version.Version;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate;
@@ -9,6 +10,7 @@ import com.dfsek.terra.api.util.StringIdentifiable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@SuppressWarnings("FieldMayBeFinal")
@@ -33,7 +35,7 @@ public class AddonManifest implements ConfigTemplate, StringIdentifiable {
@Value("depends")
@Default
private List<DependencyConfig> dependencies = Collections.emptyList();
private Map<String, VersionRange> dependencies;
@Value("website")
private WebsiteConfig website;
@@ -67,7 +69,7 @@ public class AddonManifest implements ConfigTemplate, StringIdentifiable {
return website;
}
public List<DependencyConfig> getDependencies() {
public Map<String, VersionRange> getDependencies() {
return dependencies;
}
}

View File

@@ -1,4 +0,0 @@
package com.dfsek.terra.addons.manifest.impl.config;
public class DependencyConfig {
}

View File

@@ -0,0 +1,22 @@
package com.dfsek.terra.addons.manifest.impl.config.loaders;
import ca.solostudios.strata.Versions;
import ca.solostudios.strata.parser.tokenizer.ParseException;
import ca.solostudios.strata.version.Version;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import java.lang.reflect.AnnotatedType;
public class VersionLoader implements TypeLoader<Version> {
@Override
public Version load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException {
try {
return Versions.parseVersion((String) c);
} catch(ParseException e) {
throw new LoadException("Failed to parse version", e);
}
}
}

View File

@@ -0,0 +1,22 @@
package com.dfsek.terra.addons.manifest.impl.config.loaders;
import ca.solostudios.strata.Versions;
import ca.solostudios.strata.parser.tokenizer.ParseException;
import ca.solostudios.strata.version.VersionRange;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import java.lang.reflect.AnnotatedType;
public class VersionRangeLoader implements TypeLoader<VersionRange> {
@Override
public VersionRange load(AnnotatedType t, Object c, ConfigLoader loader) throws LoadException {
try {
return Versions.parseVersionRange((String) c);
} catch(ParseException e) {
throw new LoadException("Failed to parse version range", e);
}
}
}