diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java b/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java index e3588065..8f4abf36 100644 --- a/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java +++ b/enigma/src/main/java/org/quiltmc/enigma/api/Enigma.java @@ -6,6 +6,7 @@ import org.quiltmc.enigma.api.analysis.index.jar.MainJarIndex; import org.quiltmc.enigma.api.analysis.index.mapping.MappingsIndex; import org.quiltmc.enigma.api.class_provider.ProjectClassProvider; +import org.quiltmc.enigma.api.translation.mapping.serde.MappingParseException; import org.quiltmc.enigma.impl.analysis.ClassLoaderClassProvider; import org.quiltmc.enigma.api.service.EnigmaService; import org.quiltmc.enigma.api.service.EnigmaServiceContext; @@ -197,6 +198,31 @@ public Optional getReadWriteService(Path path) { return this.parseFileType(path).flatMap(this::getReadWriteService); } + /** + * Automatically determines the file type of and reads the provided mappings. + * @param path the path to read + * @return the read mappings + */ + public Optional> readMappings(Path path) throws MappingParseException, IOException { + return this.readMappings(path, ProgressListener.createEmpty()); + } + + /** + * Automatically determines the file type of and reads the provided mappings. + * @param path the path to read + * @param progress a progress listener to use when reading + * @return the read mappings + */ + public Optional> readMappings(Path path, ProgressListener progress) throws MappingParseException, IOException { + var service = this.getReadWriteService(path); + + if (service.isPresent()) { + return Optional.ofNullable(service.get().read(path, progress)); + } + + return Optional.empty(); + } + /** * Searches for and returns a service with a matching id to the provided {@code id}. * @param type the type of the searched service