mirror of
https://github.com/charmbracelet/crush.git
synced 2025-08-02 05:20:46 +03:00
feat: add schema command
We should probably serve this file in a short URL.
This commit is contained in:
33
internal/cmd/schema.go
Normal file
33
internal/cmd/schema.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/charmbracelet/crush/internal/config"
|
||||
"github.com/invopop/jsonschema"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var schemaCmd = &cobra.Command{
|
||||
Use: "schema",
|
||||
Short: "Generate JSON schema for configuration",
|
||||
Long: "Generate JSON schema for the crush configuration file",
|
||||
Hidden: true,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
reflector := jsonschema.Reflector{}
|
||||
schema := reflector.Reflect(&config.Config{})
|
||||
|
||||
schemaJSON, err := json.MarshalIndent(schema, "", " ")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to marshal schema: %w", err)
|
||||
}
|
||||
|
||||
fmt.Println(string(schemaJSON))
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(schemaCmd)
|
||||
}
|
||||
Reference in New Issue
Block a user