feat(validation): add diagnostic data model — GlbDiagnostic, GlbValidationResult, GlbDiagnosticRegistry
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
package com.tiedup.remake.client.gltf.diagnostic;
|
||||
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* A single diagnostic finding from GLB validation.
|
||||
*/
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public record GlbDiagnostic(
|
||||
ResourceLocation source,
|
||||
@Nullable ResourceLocation itemDef,
|
||||
Severity severity,
|
||||
String code,
|
||||
String message
|
||||
) {
|
||||
public enum Severity { ERROR, WARNING, INFO }
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.tiedup.remake.client.gltf.diagnostic;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
/**
|
||||
* Static client-side registry of GLB validation results.
|
||||
* Populated during resource reload, queried by /tiedup validate command.
|
||||
*/
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public final class GlbDiagnosticRegistry {
|
||||
|
||||
private static final Map<ResourceLocation, GlbValidationResult> results =
|
||||
new LinkedHashMap<>();
|
||||
|
||||
private GlbDiagnosticRegistry() {}
|
||||
|
||||
public static void clear() {
|
||||
results.clear();
|
||||
}
|
||||
|
||||
public static void addResult(GlbValidationResult result) {
|
||||
results.put(result.source(), result);
|
||||
}
|
||||
|
||||
public static Collection<GlbValidationResult> getAll() {
|
||||
return Collections.unmodifiableCollection(results.values());
|
||||
}
|
||||
|
||||
public static List<GlbValidationResult> getErrors() {
|
||||
return results.values().stream()
|
||||
.filter(r -> !r.passed())
|
||||
.toList();
|
||||
}
|
||||
|
||||
public static GlbValidationResult get(ResourceLocation source) {
|
||||
return results.get(source);
|
||||
}
|
||||
|
||||
public static int size() {
|
||||
return results.size();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.tiedup.remake.client.gltf.diagnostic;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
|
||||
/**
|
||||
* Validation result for a single GLB file.
|
||||
*/
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
public record GlbValidationResult(
|
||||
ResourceLocation source,
|
||||
List<GlbDiagnostic> diagnostics,
|
||||
boolean passed
|
||||
) {
|
||||
/** Create a result, computing passed from diagnostics. */
|
||||
public static GlbValidationResult of(
|
||||
ResourceLocation source,
|
||||
List<GlbDiagnostic> diagnostics
|
||||
) {
|
||||
boolean passed = diagnostics.stream()
|
||||
.noneMatch(d -> d.severity() == GlbDiagnostic.Severity.ERROR);
|
||||
return new GlbValidationResult(source, List.copyOf(diagnostics), passed);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user