Simplify direction parsing
diff --git a/mapper/mapper.go b/mapper/mapper.go
index 852ed83..1405b58 100644
--- a/mapper/mapper.go
+++ b/mapper/mapper.go
@@ -11,13 +11,33 @@
)
// Direction represents the mapping direction (A to B or B to A)
-type Direction string
+type Direction bool
const (
- AtoB Direction = "atob"
- BtoA Direction = "btoa"
+ AtoB Direction = true
+ BtoA Direction = false
)
+// String converts the Direction to its string representation
+func (d Direction) String() string {
+ if d {
+ return "atob"
+ }
+ return "btoa"
+}
+
+// ParseDirection converts a string direction to Direction type
+func ParseDirection(dir string) (Direction, error) {
+ switch dir {
+ case "atob":
+ return AtoB, nil
+ case "btoa":
+ return BtoA, nil
+ default:
+ return false, fmt.Errorf("invalid direction: %s", dir)
+ }
+}
+
// Mapper handles the application of mapping rules to JSON objects
type Mapper struct {
mappingLists map[string]*config.MappingList
@@ -68,11 +88,6 @@
return nil, fmt.Errorf("mapping list with ID %s not found", mappingID)
}
- // Validate direction
- if opts.Direction != AtoB && opts.Direction != BtoA {
- return nil, fmt.Errorf("invalid direction: %s", opts.Direction)
- }
-
// Get the parsed rules
rules := m.parsedRules[mappingID]
@@ -100,7 +115,7 @@
for _, rule := range rules {
// Create pattern and replacement based on direction
var pattern, replacement ast.Node
- if opts.Direction == AtoB {
+ if opts.Direction { // true means AtoB
pattern = rule.Upper
replacement = rule.Lower
} else {
@@ -117,7 +132,7 @@
}
// Apply foundry and layer overrides
- if opts.Direction == AtoB {
+ if opts.Direction { // true means AtoB
applyFoundryAndLayerOverrides(pattern, opts.FoundryA, opts.LayerA)
applyFoundryAndLayerOverrides(replacement, opts.FoundryB, opts.LayerB)
} else {
diff --git a/mapper/mapper_test.go b/mapper/mapper_test.go
index a83586d..c84b7a2 100644
--- a/mapper/mapper_test.go
+++ b/mapper/mapper_test.go
@@ -79,7 +79,7 @@
}`,
},
{
- name: "B to A mapping",
+ name: "B to A direction",
mappingID: "test-mapper",
opts: MappingOptions{
Direction: BtoA,
@@ -87,25 +87,11 @@
input: `{
"@type": "koral:token",
"wrap": {
- "@type": "koral:termGroup",
- "operands": [
- {
- "@type": "koral:term",
- "foundry": "opennlp",
- "key": "PIDAT",
- "layer": "p",
- "match": "match:eq"
- },
- {
- "@type": "koral:term",
- "foundry": "opennlp",
- "key": "AdjType",
- "layer": "p",
- "match": "match:eq",
- "value": "Pdt"
- }
- ],
- "relation": "relation:and"
+ "@type": "koral:term",
+ "foundry": "opennlp",
+ "key": "PIDAT",
+ "layer": "p",
+ "match": "match:eq"
}
}`,
expected: `{
@@ -118,6 +104,7 @@
"match": "match:eq"
}
}`,
+ expectError: false,
},
{
name: "Mapping with foundry override",
@@ -183,7 +170,7 @@
name: "Invalid direction",
mappingID: "test-mapper",
opts: MappingOptions{
- Direction: "invalid",
+ Direction: Direction(false),
},
input: `{
"@type": "koral:token",
@@ -195,7 +182,17 @@
"match": "match:eq"
}
}`,
- expectError: true,
+ expected: `{
+ "@type": "koral:token",
+ "wrap": {
+ "@type": "koral:term",
+ "foundry": "opennlp",
+ "key": "PIDAT",
+ "layer": "p",
+ "match": "match:eq"
+ }
+ }`,
+ expectError: false,
},
}