mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-23 04:07:45 +08:00

Removes gogo/protobuf from buildx and updates to a version of moby/buildkit where gogo is removed. This also changes how the proto files are generated. This is because newer versions of protobuf are more strict about name conflicts. If two files have the same name (even if they are relative paths) and are used in different protoc commands, they'll conflict in the registry. Since protobuf file generation doesn't work very well with `paths=source_relative`, this removes the `go:generate` expression and just relies on the dockerfile to perform the generation. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
75 lines
2.8 KiB
Go
75 lines
2.8 KiB
Go
// Protocol Buffers for Go with Gadgets
|
|
//
|
|
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
// http://github.com/gogo/protobuf
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are
|
|
// met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
// in the documentation and/or other materials provided with the
|
|
// distribution.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
// Package proto is a transition package for methods from gogo that
|
|
// are used within buildkit and don't have an existing method
|
|
// in the standard protobuf library.
|
|
package proto
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func MarshalJSONEnum(m map[int32]string, value int32) ([]byte, error) {
|
|
s, ok := m[value]
|
|
if !ok {
|
|
s = strconv.Itoa(int(value))
|
|
}
|
|
return json.Marshal(s)
|
|
}
|
|
|
|
// UnmarshalJSONEnum is a helper function to simplify recovering enum int values
|
|
// from their JSON-encoded representation. Given a map from the enum's symbolic
|
|
// names to its int values, and a byte buffer containing the JSON-encoded
|
|
// value, it returns an int32 that can be cast to the enum type by the caller.
|
|
//
|
|
// The function can deal with both JSON representations, numeric and symbolic.
|
|
func UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {
|
|
if data[0] == '"' {
|
|
// New style: enums are strings.
|
|
var repr string
|
|
if err := json.Unmarshal(data, &repr); err != nil {
|
|
return -1, err
|
|
}
|
|
val, ok := m[repr]
|
|
if !ok {
|
|
return 0, errors.Errorf("unrecognized enum %s value %q", enumName, repr)
|
|
}
|
|
return val, nil
|
|
}
|
|
// Old style: enums are ints.
|
|
var val int32
|
|
if err := json.Unmarshal(data, &val); err != nil {
|
|
return 0, errors.Errorf("cannot unmarshal %#q into enum %s", data, enumName)
|
|
}
|
|
return val, nil
|
|
}
|