nixfig/cmd/nixfig/main.go

54 lines
946 B
Go

package main
import (
"encoding/json"
"errors"
"fmt"
"os"
"path/filepath"
"go.jolheiser.com/nixfig"
)
func maine() error {
if len(os.Args) != 2 {
return errors.New("nixfig requires 1 argument")
}
fn := os.Args[1]
data, err := os.ReadFile(fn)
if err != nil {
return fmt.Errorf("could not read file %q: %w", fn, err)
}
var out []byte
var a any
switch ext := filepath.Ext(fn); ext {
case ".json":
if err := json.Unmarshal(data, &a); err != nil {
return fmt.Errorf("invalid JSON file: %w", err)
}
out, err = nixfig.Marshal(a)
case ".nix":
if err := nixfig.Unmarshal(data, &a); err != nil {
return fmt.Errorf("invalid nix file: %w", err)
}
out, err = json.Marshal(a)
default:
return fmt.Errorf("unknown extension %q, must be json or nix", ext)
}
if err != nil {
return err
}
fmt.Print(string(out))
return nil
}
func main() {
if err := maine(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}