Simplify NewMapper by using mapping lists instead of configuration files
diff --git a/cmd/termmapper/fuzz_test.go b/cmd/termmapper/fuzz_test.go
index 8d63d53..e5dd7a5 100644
--- a/cmd/termmapper/fuzz_test.go
+++ b/cmd/termmapper/fuzz_test.go
@@ -8,11 +8,10 @@
 	"net/http"
 	"net/http/httptest"
 	"net/url"
-	"os"
-	"path/filepath"
 	"strings"
 	"testing"
 
+	tmconfig "github.com/KorAP/KoralPipe-TermMapper/config"
 	"github.com/KorAP/KoralPipe-TermMapper/mapper"
 	"github.com/gofiber/fiber/v2"
 	"github.com/stretchr/testify/assert"
@@ -31,26 +30,21 @@
 }
 
 func FuzzTransformEndpoint(f *testing.F) {
-	// Create a temporary config file with valid mappings
-	tmpDir := f.TempDir()
-	configFile := filepath.Join(tmpDir, "test-config.yaml")
-
-	configContent := `- id: test-mapper
-  foundryA: opennlp
-  layerA: p
-  foundryB: upos
-  layerB: p
-  mappings:
-    - "[PIDAT] <> [opennlp/p=PIDAT & opennlp/p=AdjType:Pdt]"
-    - "[DET] <> [opennlp/p=DET]"`
-
-	err := os.WriteFile(configFile, []byte(configContent), 0644)
-	if err != nil {
-		f.Fatal(err)
+	// Create test mapping list
+	mappingList := tmconfig.MappingList{
+		ID:       "test-mapper",
+		FoundryA: "opennlp",
+		LayerA:   "p",
+		FoundryB: "upos",
+		LayerB:   "p",
+		Mappings: []tmconfig.MappingRule{
+			"[PIDAT] <> [opennlp/p=PIDAT & opennlp/p=AdjType:Pdt]",
+			"[DET] <> [opennlp/p=DET]",
+		},
 	}
 
 	// Create mapper
-	m, err := mapper.NewMapper(configFile)
+	m, err := mapper.NewMapper([]tmconfig.MappingList{mappingList})
 	if err != nil {
 		f.Fatal(err)
 	}
@@ -141,19 +135,16 @@
 }
 
 func TestLargeInput(t *testing.T) {
-	// Create a temporary config file
-	tmpDir := t.TempDir()
-	configFile := filepath.Join(tmpDir, "test-config.yaml")
-
-	configContent := `- id: test-mapper
-  mappings:
-    - "[A] <> [B]"`
-
-	err := os.WriteFile(configFile, []byte(configContent), 0644)
-	require.NoError(t, err)
+	// Create test mapping list
+	mappingList := tmconfig.MappingList{
+		ID: "test-mapper",
+		Mappings: []tmconfig.MappingRule{
+			"[A] <> [B]",
+		},
+	}
 
 	// Create mapper
-	m, err := mapper.NewMapper(configFile)
+	m, err := mapper.NewMapper([]tmconfig.MappingList{mappingList})
 	require.NoError(t, err)
 
 	// Create fiber app
diff --git a/cmd/termmapper/main.go b/cmd/termmapper/main.go
index 664471d..4b29825 100644
--- a/cmd/termmapper/main.go
+++ b/cmd/termmapper/main.go
@@ -7,6 +7,7 @@
 	"strings"
 	"syscall"
 
+	"github.com/KorAP/KoralPipe-TermMapper/config"
 	"github.com/KorAP/KoralPipe-TermMapper/mapper"
 	"github.com/alecthomas/kong"
 	"github.com/gofiber/fiber/v2"
@@ -19,14 +20,14 @@
 	maxParamLength = 1024        // 1KB
 )
 
-type config struct {
+type appConfig struct {
 	Port     int    `kong:"short='p',default='8080',help='Port to listen on'"`
 	Config   string `kong:"short='c',required,help='YAML configuration file containing mapping directives'"`
 	LogLevel string `kong:"short='l',default='info',help='Log level (debug, info, warn, error)'"`
 }
 
-func parseConfig() *config {
-	cfg := &config{}
+func parseConfig() *appConfig {
+	cfg := &appConfig{}
 	ctx := kong.Parse(cfg,
 		kong.Description("A web service for transforming JSON objects using term mapping rules."),
 		kong.UsageOnError(),
@@ -58,8 +59,14 @@
 	// Set up logging
 	setupLogger(cfg.LogLevel)
 
+	// Load configuration file
+	yamlConfig, err := config.LoadConfig(cfg.Config)
+	if err != nil {
+		log.Fatal().Err(err).Msg("Failed to load configuration")
+	}
+
 	// Create a new mapper instance
-	m, err := mapper.NewMapper(cfg.Config)
+	m, err := mapper.NewMapper(yamlConfig.Lists)
 	if err != nil {
 		log.Fatal().Err(err).Msg("Failed to create mapper")
 	}
diff --git a/cmd/termmapper/main_test.go b/cmd/termmapper/main_test.go
index 6460ae7..7b83811 100644
--- a/cmd/termmapper/main_test.go
+++ b/cmd/termmapper/main_test.go
@@ -6,10 +6,9 @@
 	"io"
 	"net/http"
 	"net/http/httptest"
-	"os"
-	"path/filepath"
 	"testing"
 
+	tmconfig "github.com/KorAP/KoralPipe-TermMapper/config"
 	"github.com/KorAP/KoralPipe-TermMapper/mapper"
 	"github.com/gofiber/fiber/v2"
 	"github.com/stretchr/testify/assert"
@@ -17,24 +16,21 @@
 )
 
 func TestTransformEndpoint(t *testing.T) {
-	// Create a temporary config file
-	tmpDir := t.TempDir()
-	configFile := filepath.Join(tmpDir, "test-config.yaml")
-
-	configContent := `- id: test-mapper
-  foundryA: opennlp
-  layerA: p
-  foundryB: upos
-  layerB: p
-  mappings:
-    - "[PIDAT] <> [opennlp/p=PIDAT & opennlp/p=AdjType:Pdt]"
-    - "[DET] <> [opennlp/p=DET]"`
-
-	err := os.WriteFile(configFile, []byte(configContent), 0644)
-	require.NoError(t, err)
+	// Create test mapping list
+	mappingList := tmconfig.MappingList{
+		ID:       "test-mapper",
+		FoundryA: "opennlp",
+		LayerA:   "p",
+		FoundryB: "upos",
+		LayerB:   "p",
+		Mappings: []tmconfig.MappingRule{
+			"[PIDAT] <> [opennlp/p=PIDAT & opennlp/p=AdjType:Pdt]",
+			"[DET] <> [opennlp/p=DET]",
+		},
+	}
 
 	// Create mapper
-	m, err := mapper.NewMapper(configFile)
+	m, err := mapper.NewMapper([]tmconfig.MappingList{mappingList})
 	require.NoError(t, err)
 
 	// Create fiber app
@@ -255,18 +251,16 @@
 }
 
 func TestHealthEndpoint(t *testing.T) {
-	// Create a temporary config file for the mapper
-	tmpDir := t.TempDir()
-	configFile := filepath.Join(tmpDir, "test-config.yaml")
-	configContent := `- id: test-mapper
-  mappings:
-    - "[A] <> [B]"`
+	// Create test mapping list
+	mappingList := tmconfig.MappingList{
+		ID: "test-mapper",
+		Mappings: []tmconfig.MappingRule{
+			"[A] <> [B]",
+		},
+	}
 
-	err := os.WriteFile(configFile, []byte(configContent), 0644)
-	require.NoError(t, err)
-
-	// Create mapper with config
-	m, err := mapper.NewMapper(configFile)
+	// Create mapper
+	m, err := mapper.NewMapper([]tmconfig.MappingList{mappingList})
 	require.NoError(t, err)
 
 	// Create fiber app