internal/langserver/handlers/command/convert_json_command.go (65 lines of code) (raw):
package command
import (
"context"
"encoding/json"
"fmt"
lsctx "github.com/Azure/azapi-lsp/internal/context"
pluralize "github.com/gertd/go-pluralize"
)
var pluralizeClient = pluralize.NewClient()
type ConvertJsonCommand struct {
}
var _ CommandHandler = &ConvertJsonCommand{}
type ConvertJsonResponse struct {
HCLContent string `json:"hclcontent"`
}
func (c ConvertJsonCommand) Handle(ctx context.Context, arguments []json.RawMessage) (interface{}, error) {
params := ParseCommandArgs(arguments)
content, ok := params.GetString("jsoncontent")
if !ok {
return nil, nil
}
telemetrySender, err := lsctx.Telemetry(ctx)
if err != nil {
return nil, err
}
var model map[string]interface{}
err = json.Unmarshal([]byte(content), &model)
if err != nil {
return nil, fmt.Errorf("unable to unmarshal JSON content: %w", err)
}
result := ""
if model["$schema"] != nil {
telemetrySender.SendEvent(ctx, "ConvertJsonToAzapi", map[string]interface{}{
"status": "started",
"kind": "arm-template",
})
result, err = convertARMTemplate(ctx, content, telemetrySender)
if err != nil {
telemetrySender.SendEvent(ctx, "ConvertJsonToAzapi", map[string]interface{}{
"status": "failed",
"kind": "arm-template",
"error": err.Error(),
})
return nil, err
}
} else {
telemetrySender.SendEvent(ctx, "ConvertJsonToAzapi", map[string]interface{}{
"status": "started",
"kind": "resource-json",
})
result, err = convertResourceJson(ctx, content, telemetrySender)
if err != nil {
telemetrySender.SendEvent(ctx, "ConvertJsonToAzapi", map[string]interface{}{
"status": "failed",
"kind": "resource-json",
"error": err.Error(),
})
return nil, err
}
}
response := ConvertJsonResponse{
HCLContent: result,
}
return response, nil
}