## Description The lambda CLI previously only supported inline string expressions and stdin input. This PR adds support for reading lambda expressions from files using the `-f` flag. This makes it easier to work with larger programs stored in files. Changes: - Added `FileSource` type to `internal/config/source.go` for reading from file paths. - Added `-f` flag to CLI argument parser with validation to prevent conflicting inputs. - Updated Makefile targets (`run`, `profile`, `explain`) to use `-f` flag instead of stdin redirection. ### Decisions The `-f` flag takes precedence over positional arguments. If both are specified, an error is returned to avoid ambiguity. ## Benefits - More intuitive workflow for file-based lambda programs. - Cleaner Makefile targets without stdin redirection. - Consistent with common CLI conventions (e.g., `grep -f`, `awk -f`). ## Checklist - [x] Code follows conventional commit format. - [x] Branch follows naming convention (`<type>/<description>`). - [ ] Tests pass (if applicable). - [ ] Documentation updated (if applicable). Reviewed-on: #12 Co-authored-by: M.V. Hutz <git@maximhutz.me> Co-committed-by: M.V. Hutz <git@maximhutz.me>
42 lines
759 B
Go
42 lines
759 B
Go
package config
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// A method of extracting input from the user.
|
|
type Source interface {
|
|
// Fetch data from this source.
|
|
Extract() (string, error)
|
|
}
|
|
|
|
// A source defined by a string.
|
|
type StringSource struct{ Data string }
|
|
|
|
func (s StringSource) Extract() (string, error) { return s.Data, nil }
|
|
|
|
// A source pulling from standard input.
|
|
type StdinSource struct{}
|
|
|
|
func (s StdinSource) Extract() (string, error) {
|
|
data, err := io.ReadAll(os.Stdin)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return string(data), nil
|
|
}
|
|
|
|
// A source reading from a file.
|
|
type FileSource struct{ Path string }
|
|
|
|
func (s FileSource) Extract() (string, error) {
|
|
data, err := os.ReadFile(s.Path)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return string(data), nil
|
|
}
|