60 using google::protobuf::io::win32::setmode;
66 const Version& compiler_version, CodeGeneratorResponse* response,
67 const std::vector<const FileDescriptor*>& parsed_files)
76 CodeGeneratorResponse::File* file =
response_->add_file();
77 file->set_name(filename);
83 CodeGeneratorResponse::File* file =
response_->add_file();
84 file->set_name(filename);
85 file->set_insertion_point(insertion_point);
105 CodeGeneratorResponse* response,
std::string* error_msg) {
107 for (
int i = 0;
i < request.proto_file_size();
i++) {
115 std::vector<const FileDescriptor*> parsed_files;
116 for (
int i = 0;
i < request.file_to_generate_size();
i++) {
117 parsed_files.push_back(
pool.FindFileByName(request.file_to_generate(
i)));
118 if (parsed_files.back() ==
NULL) {
120 "protoc asked plugin to generate a file but "
121 "did not provide a descriptor for the file: " +
122 request.file_to_generate(
i);
132 bool succeeded = generator.
GenerateAll(parsed_files, request.parameter(),
135 if (!succeeded &&
error.empty()) {
137 "Code generator returned false but provided no error "
140 if (!
error.empty()) {
150 std::cerr << argv[0] <<
": Unknown option: " << argv[1] << std::endl;
155 setmode(STDIN_FILENO, _O_BINARY);
156 setmode(STDOUT_FILENO, _O_BINARY);
159 CodeGeneratorRequest request;
160 if (!request.ParseFromFileDescriptor(STDIN_FILENO)) {
161 std::cerr << argv[0] <<
": protoc sent unparseable request to plugin."
170 if (!
response.SerializeToFileDescriptor(STDOUT_FILENO)) {
171 std::cerr << argv[0] <<
": Error writing to stdout." << std::endl;
175 if (!error_msg.empty()) {
176 std::cerr << argv[0] <<
": " << error_msg << std::endl;