feat: better convert usage

This commit is contained in:
2026-02-05 22:28:53 -05:00
parent 53042ea26d
commit b47a3a3acb
3 changed files with 15 additions and 9 deletions

View File

@@ -25,11 +25,14 @@ func LambdaConvert() *cobra.Command {
var inputReprFlag, outputReprFlag string
cmd := &cobra.Command{
Use: "convert <input> <output>",
Use: "convert <input-file> <output-file>",
Short: "Convert between lambda calculus representations",
Args: cobra.ExactArgs(2),
SilenceUsage: true,
RunE: func(_ *cobra.Command, args []string) error {
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
return cmd.Help()
}
var err error
inputPath, outputPath := args[0], args[1]
@@ -71,7 +74,7 @@ func LambdaConvert() *cobra.Command {
// Marshal output.
output, err := r.Marshal(result)
if err != nil {
return fmt.Errorf("marshaling output: %w", err)
return fmt.Errorf("unmarshaling output: %w", err)
}
// Write output file.

View File

@@ -21,7 +21,7 @@ type forwardCodec[T, U any] struct {
func (c forwardCodec[T, U]) Run(r Repr) (Repr, error) {
t, ok := r.Data().(T)
if !ok {
return nil, fmt.Errorf("could not parse '%v' as '%s'", t, c.outType)
return nil, fmt.Errorf("could not parse '%v' as '%s'", t, c.inType)
}
u, err := c.codec.Encode(t)
@@ -29,7 +29,7 @@ func (c forwardCodec[T, U]) Run(r Repr) (Repr, error) {
return nil, err
}
return NewRepr(c.inType, u), nil
return NewRepr(c.outType, u), nil
}
func (c forwardCodec[T, U]) InType() string { return c.inType }
@@ -44,7 +44,7 @@ type backwardCodec[T, U any] struct {
func (c backwardCodec[T, U]) Run(r Repr) (Repr, error) {
u, ok := r.Data().(U)
if !ok {
return nil, fmt.Errorf("could not parse '%v' as '%s'", r, c.inType)
return nil, fmt.Errorf("could not parse '%v' as '%s'", r, c.outType)
}
t, err := c.codec.Decode(u)
@@ -52,7 +52,7 @@ func (c backwardCodec[T, U]) Run(r Repr) (Repr, error) {
return nil, err
}
return NewRepr(c.outType, t), nil
return NewRepr(c.inType, t), nil
}
func (c backwardCodec[T, U]) InType() string { return c.outType }

View File

@@ -2,6 +2,7 @@ package cli
import (
"fmt"
"reflect"
"git.maximhutz.com/max/lambda/pkg/codec"
)
@@ -29,7 +30,9 @@ func (c convertedMarshaler[T]) Decode(s string) (Repr, error) {
func (c convertedMarshaler[T]) Encode(r Repr) (string, error) {
t, ok := r.Data().(T)
if !ok {
return "", fmt.Errorf("could not parse '%v' as 'string'", t)
dataType := reflect.TypeOf(r.Data())
allowedType := reflect.TypeFor[T]()
return "", fmt.Errorf("marshaler for '%s' cannot parse '%s'", allowedType, dataType)
}
return c.codec.Encode(t)