mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	vendor: initial vendor
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
		
							
								
								
									
										110
									
								
								vendor/google.golang.org/grpc/encoding/proto/proto.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								vendor/google.golang.org/grpc/encoding/proto/proto.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2018 gRPC authors. | ||||
|  * | ||||
|  * 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 proto defines the protobuf codec. Importing this package will | ||||
| // register the codec. | ||||
| package proto | ||||
|  | ||||
| import ( | ||||
| 	"math" | ||||
| 	"sync" | ||||
|  | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"google.golang.org/grpc/encoding" | ||||
| ) | ||||
|  | ||||
| // Name is the name registered for the proto compressor. | ||||
| const Name = "proto" | ||||
|  | ||||
| func init() { | ||||
| 	encoding.RegisterCodec(codec{}) | ||||
| } | ||||
|  | ||||
| // codec is a Codec implementation with protobuf. It is the default codec for gRPC. | ||||
| type codec struct{} | ||||
|  | ||||
| type cachedProtoBuffer struct { | ||||
| 	lastMarshaledSize uint32 | ||||
| 	proto.Buffer | ||||
| } | ||||
|  | ||||
| func capToMaxInt32(val int) uint32 { | ||||
| 	if val > math.MaxInt32 { | ||||
| 		return uint32(math.MaxInt32) | ||||
| 	} | ||||
| 	return uint32(val) | ||||
| } | ||||
|  | ||||
| func marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error) { | ||||
| 	protoMsg := v.(proto.Message) | ||||
| 	newSlice := make([]byte, 0, cb.lastMarshaledSize) | ||||
|  | ||||
| 	cb.SetBuf(newSlice) | ||||
| 	cb.Reset() | ||||
| 	if err := cb.Marshal(protoMsg); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	out := cb.Bytes() | ||||
| 	cb.lastMarshaledSize = capToMaxInt32(len(out)) | ||||
| 	return out, nil | ||||
| } | ||||
|  | ||||
| func (codec) Marshal(v interface{}) ([]byte, error) { | ||||
| 	if pm, ok := v.(proto.Marshaler); ok { | ||||
| 		// object can marshal itself, no need for buffer | ||||
| 		return pm.Marshal() | ||||
| 	} | ||||
|  | ||||
| 	cb := protoBufferPool.Get().(*cachedProtoBuffer) | ||||
| 	out, err := marshal(v, cb) | ||||
|  | ||||
| 	// put back buffer and lose the ref to the slice | ||||
| 	cb.SetBuf(nil) | ||||
| 	protoBufferPool.Put(cb) | ||||
| 	return out, err | ||||
| } | ||||
|  | ||||
| func (codec) Unmarshal(data []byte, v interface{}) error { | ||||
| 	protoMsg := v.(proto.Message) | ||||
| 	protoMsg.Reset() | ||||
|  | ||||
| 	if pu, ok := protoMsg.(proto.Unmarshaler); ok { | ||||
| 		// object can unmarshal itself, no need for buffer | ||||
| 		return pu.Unmarshal(data) | ||||
| 	} | ||||
|  | ||||
| 	cb := protoBufferPool.Get().(*cachedProtoBuffer) | ||||
| 	cb.SetBuf(data) | ||||
| 	err := cb.Unmarshal(protoMsg) | ||||
| 	cb.SetBuf(nil) | ||||
| 	protoBufferPool.Put(cb) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (codec) Name() string { | ||||
| 	return Name | ||||
| } | ||||
|  | ||||
| var protoBufferPool = &sync.Pool{ | ||||
| 	New: func() interface{} { | ||||
| 		return &cachedProtoBuffer{ | ||||
| 			Buffer:            proto.Buffer{}, | ||||
| 			lastMarshaledSize: 16, | ||||
| 		} | ||||
| 	}, | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Tonis Tiigi
					Tonis Tiigi