feat: add output flag (#13)

## Description

The lambda CLI previously only wrote output to stdout using shell redirection.
This PR adds support for writing results to files using the `-o` flag.
This is implemented using a new `Destination` interface that mirrors the existing `Source` pattern.

Changes:
- Added `Destination` interface with `StdoutDestination` and `FileDestination` implementations.
- Added `-o` flag to CLI argument parser for output file specification.
- Updated `Config` to use `Destination` instead of direct output handling.
- Refactored main to use `Destination.Write()` for result output.
- Updated Makefile targets (`run`, `profile`, `explain`) to use `-o` flag instead of shell redirection.

### Decisions

The `-o` flag defaults to stdout when not specified or when set to `-`.
This maintains backward compatibility while providing explicit file output capability.

## Benefits

- Cleaner command-line interface without shell redirection.
- Symmetric design with `Source` interface for input.
- More portable across different shells and environments.
- Explicit output handling improves code clarity.

## Checklist

- [x] Code follows conventional commit format.
- [x] Branch follows naming convention (`<type>/<description>`).
- [ ] Tests pass (if applicable).
- [ ] Documentation updated (if applicable).

Reviewed-on: #13
Co-authored-by: M.V. Hutz <git@maximhutz.me>
Co-committed-by: M.V. Hutz <git@maximhutz.me>
This commit was merged in pull request #13.
This commit is contained in:
2026-01-11 22:14:48 +00:00
committed by Maxim Hutz
parent 62699a0e37
commit 0eff85f8fa
5 changed files with 49 additions and 10 deletions

View File

@@ -20,13 +20,13 @@ build:
chmod +x ${BINARY_NAME}
run: build
./${BINARY_NAME} -f ./samples/$(TEST).txt > program.out
./${BINARY_NAME} -f ./samples/$(TEST).txt -o program.out
profile: build
./${BINARY_NAME} -p profile/cpu.prof -f ./samples/$(TEST).txt > program.out
./${BINARY_NAME} -p profile/cpu.prof -f ./samples/$(TEST).txt -o program.out
explain: build
./${BINARY_NAME} -x -p profile/cpu.prof -f ./samples/$(TEST).txt > program.out
./${BINARY_NAME} -x -p profile/cpu.prof -f ./samples/$(TEST).txt -o program.out
graph:
go tool pprof -raw -output=profile/cpu.raw profile/cpu.prof