mirror of https://github.com/pulumi/pulumi.git
65 lines
1.8 KiB
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
|
|
}
|