code: func combineDescriptors(serviceNames []string) (*descriptor.FileDescriptorSet, error) {
  	result := &descriptor.FileDescriptorSet{}
  	// seenFiles is a set of descriptor files keyed by SHA256 of their contents.
  	seenFiles := map[[sha256.Size]byte]bool{}
  
  	for _, s := range serviceNames {
  		desc, err := GetDescriptorSet(s)
  		if err != nil {
  			return nil, fmt.Errorf("service %s: %s", s, err)
  		}
  		if desc == nil {
  			return nil, fmt.Errorf(
  				"descriptor for service %q is not found. "+
  					"Did you compile it with go.chromium.org/luci/grpc/cmd/cproto?",
  				s)
  		}
  		for _, f := range desc.GetFile() {
  			binary, err := proto.Marshal(f)
  			if err != nil {
  				return nil, fmt.Errorf("could not marshal description of %s", f.GetName())
  			}
  			hash := sha256.Sum256(binary)
  			if !seenFiles[hash] {
  				result.File = append(result.File, f)
  				seenFiles[hash] = true
  			}
  
  		}
  	}
  	return result, nil
  }
docs: // combineDescriptors creates one FileDescriptorSet that covers all services
  // and their dependencies.