// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package impl

import (
	
	
	
	

	
	
	
)

// Every enum and message type generated by protoc-gen-go since commit 2fc053c5
// on February 25th, 2016 has had a method to get the raw descriptor.
// Types that were not generated by protoc-gen-go or were generated prior
// to that version are not supported.
//
// The []byte returned is the encoded form of a FileDescriptorProto message
// compressed using GZIP. The []int is the path from the top-level file
// to the specific message or enum declaration.
type (
	enumV1 interface {
		EnumDescriptor() ([]byte, []int)
	}
	messageV1 interface {
		Descriptor() ([]byte, []int)
	}
)

var legacyFileDescCache sync.Map // map[*byte]protoreflect.FileDescriptor

// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message.
//
// This assumes that b is immutable and that b does not refer to part of a
// concatenated series of GZIP files (which would require shenanigans that
// rely on the concatenation properties of both protobufs and GZIP).
// File descriptors generated by protoc-gen-go do not rely on that property.
func ( []byte) protoreflect.FileDescriptor {
	// Fast-path: check whether we already have a cached file descriptor.
	if ,  := legacyFileDescCache.Load(&[0]);  {
		return .(protoreflect.FileDescriptor)
	}

	// Slow-path: decompress and unmarshal the file descriptor proto.
	,  := gzip.NewReader(bytes.NewReader())
	if  != nil {
		panic()
	}
	,  := ioutil.ReadAll()
	if  != nil {
		panic()
	}

	 := filedesc.Builder{
		RawDescriptor: ,
		FileRegistry:  resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry
	}.Build().File
	if ,  := legacyFileDescCache.LoadOrStore(&[0], );  {
		return .(protoreflect.FileDescriptor)
	}
	return 
}

type resolverOnly struct {
	reg *protoregistry.Files
}

func ( resolverOnly) ( string) (protoreflect.FileDescriptor, error) {
	return .reg.FindFileByPath()
}
func ( resolverOnly) ( protoreflect.FullName) (protoreflect.Descriptor, error) {
	return .reg.FindDescriptorByName()
}
func (resolverOnly) (protoreflect.FileDescriptor) error {
	return nil
}