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