refactor: use a table for command parsing instead of chained ifs

This commit is contained in:
Emmanuel BENOîT 2025-04-07 11:02:43 +02:00
parent 279a6ff004
commit 899f167e58
Signed by: Emmanuel BENOîT
SSH key fingerprint: SHA256:l7PFUUF5TCDsvYeQC9OnTNz08dFY7Fvf4Hv3neIqYpg

View file

@ -49,30 +49,22 @@ class SRTMerger:
except IOError as e:
errors.append(f"Error reading {filename}: {e}")
return commands, errors
supported = {
'COPY': self.parse_copy,
'MAP': self.parse_map,
'SYNC': self.parse_sync,
'PUT': self.parse_put,
}
for line_number, line in enumerate(lines, start=1):
parts = SRTMerger.split_line(line)
command = parts[0].upper()
if command not in ['COPY', 'MAP', 'SYNC', 'PUT']:
if command not in supported:
errors.append(f"Line {line_number}: unknown command '{command}'.")
continue
parsed = None
if command == 'COPY':
parsed = self.parse_copy(parts)
if parsed is None:
errors.append(f"Line {line_number}: invalid COPY command.")
elif command == 'MAP':
parsed = self.parse_map(parts)
if parsed is None:
errors.append(f"Line {line_number}: invalid MAP command.")
elif command == 'SYNC':
parsed = self.parse_sync(parts)
if parsed is None:
errors.append(f"Line {line_number}: invalid SYNC command.")
elif command == 'PUT':
parsed = self.parse_put(parts)
if parsed is None:
errors.append(f"Line {line_number}: invalid PUT command.")
if parsed is not None:
parsed = supported[command](parts)
if parsed is None:
errors.append(f"Line {line_number}: invalid {command} command.")
else:
commands.append(parsed)
return commands, errors