54 lines
946 B
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)
|
|
}
|
|
}
|