in pkg/filter/http/grpcproxy/descriptor.go [151:209]
func loadFileSource(gc *Config) (*fileSource, error) {
var fsrc fileSource
cur := gc.Path
if !filepath.IsAbs(cur) {
ex, err := os.Executable()
if err != nil {
return nil, err
}
cur = filepath.Dir(ex) + string(os.PathSeparator) + gc.Path
}
logger.Infof("%s load proto files from %s", loggerHeader, cur)
fileLists := make([]string, 0)
items, err := os.ReadDir(cur)
if err != nil {
return nil, err
}
for _, item := range items {
if !item.IsDir() {
sp := strings.Split(item.Name(), ".")
length := len(sp)
if length >= 2 && sp[length-1] == "proto" {
fileLists = append(fileLists, item.Name())
}
}
}
if err != nil {
return nil, err
}
importPaths := []string{gc.Path}
fileNames, err := protoparse.ResolveFilenames(importPaths, fileLists...)
if err != nil {
return nil, err
}
p := protoparse.Parser{
ImportPaths: importPaths,
InferImportPaths: len(importPaths) == 0,
IncludeSourceCodeInfo: true,
}
fds, err := p.ParseFiles(fileNames...)
if err != nil {
return nil, fmt.Errorf("could not parse given files: %v", err)
}
fsrc.files = make(map[string]*desc.FileDescriptor)
for _, fd := range fds {
name := fd.GetName()
fsrc.files[name] = fd
}
return &fsrc, nil
}