pulumi/pkg/backend/httpstate/diffs_pre_1.20.go

65 lines
1.8 KiB
Go

//go:build !go1.20
// Copyright 2016-2022, Pulumi Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package httpstate
import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/hexops/gotextdiff/myers"
"github.com/hexops/gotextdiff/span"
"github.com/pulumi/pulumi/pkg/v3/backend/httpstate/client"
"github.com/pulumi/pulumi/sdk/v3/go/common/apitype"
opentracing "github.com/opentracing/opentracing-go"
)
type deployment struct {
raw json.RawMessage
buf *bytes.Buffer
}
func (dds *deploymentDiffState) MarshalDeployment(d *apitype.DeploymentV3) (deployment, error) {
var b *bytes.Buffer
if dds.buffer != nil {
b, dds.buffer = dds.buffer, nil
} else {
b = &bytes.Buffer{}
}
if err := client.MarshalUntypedDeployment(b, d); err != nil {
return deployment{}, err
}
return deployment{raw: json.RawMessage(b.Bytes()), buf: b}, nil
}
func (*deploymentDiffState) computeEdits(ctx context.Context, before, after deployment) (json.RawMessage, error) {
tracingSpan, _ := opentracing.StartSpanFromContext(ctx, "computeEdits")
defer tracingSpan.Finish()
edits := myers.ComputeEdits(span.URIFromURI(""), string(before.raw), string(after.raw))
delta, err := json.Marshal(edits)
if err != nil {
return nil, fmt.Errorf("Cannot marshal the edits: %v", err)
}
return delta, nil
}