|
Maxious
|
1 |
// Protocol Buffers - Google's data interchange format |
|
|
2 |
// Copyright 2008 Google Inc. All rights reserved. |
|
|
3 |
// http://code.google.com/p/protobuf/ |
|
|
4 |
// |
|
|
5 |
// Redistribution and use in source and binary forms, with or without |
|
|
6 |
// modification, are permitted provided that the following conditions are |
|
|
7 |
// met: |
|
|
8 |
// |
|
|
9 |
// * Redistributions of source code must retain the above copyright |
|
|
10 |
// notice, this list of conditions and the following disclaimer. |
|
|
11 |
// * Redistributions in binary form must reproduce the above |
|
|
12 |
// copyright notice, this list of conditions and the following disclaimer |
|
|
13 |
// in the documentation and/or other materials provided with the |
|
|
14 |
// distribution. |
|
|
15 |
// * Neither the name of Google Inc. nor the names of its |
|
|
16 |
// contributors may be used to endorse or promote products derived from |
|
|
17 |
// this software without specific prior written permission. |
|
|
18 |
// |
|
|
19 |
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
20 |
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
21 |
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
22 |
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
23 |
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
24 |
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
25 |
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
26 |
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
27 |
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
28 |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
29 |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
30 |
|
|
|
31 |
// Author: kenton@google.com (Kenton Varda) |
|
|
32 |
// |
|
|
33 |
// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to |
|
|
34 |
// change. |
|
|
35 |
// |
|
|
36 |
// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is |
|
|
37 |
// just a program that reads a CodeGeneratorRequest from stdin and writes a |
|
|
38 |
// CodeGeneratorResponse to stdout. |
|
|
39 |
// |
|
|
40 |
// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead |
|
|
41 |
// of dealing with the raw protocol defined here. |
|
|
42 |
// |
|
|
43 |
// A plugin executable needs only to be placed somewhere in the path. The |
|
|
44 |
// plugin should be named "protoc-gen-$NAME", and will then be used when the |
|
|
45 |
// flag "--${NAME}_out" is passed to protoc. |
|
|
46 |
|
|
|
47 |
package google.protobuf.compiler; |
|
|
48 |
|
|
|
49 |
import "descriptor.proto"; |
|
|
50 |
|
|
|
51 |
// An encoded CodeGeneratorRequest is written to the plugin's stdin. |
|
|
52 |
message CodeGeneratorRequest { |
|
|
53 |
// The .proto files that were explicitly listed on the command-line. The |
|
|
54 |
// code generator should generate code only for these files. Each file's |
|
|
55 |
// descriptor will be included in proto_file, below. |
|
|
56 |
repeated string file_to_generate = 1; |
|
|
57 |
|
|
|
58 |
// The generator parameter passed on the command-line. |
|
|
59 |
optional string parameter = 2; |
|
|
60 |
|
|
|
61 |
// FileDescriptorProtos for all files in files_to_generate and everything |
|
|
62 |
// they import. The files will appear in topological order, so each file |
|
|
63 |
// appears before any file that imports it. |
|
|
64 |
// |
|
|
65 |
// protoc guarantees that all proto_files will be written after |
|
|
66 |
// the fields above, even though this is not technically guaranteed by the |
|
|
67 |
// protobuf wire format. This theoretically could allow a plugin to stream |
|
|
68 |
// in the FileDescriptorProtos and handle them one by one rather than read |
|
|
69 |
// the entire set into memory at once. However, as of this writing, this |
|
|
70 |
// is not similarly optimized on protoc's end -- it will store all fields in |
|
|
71 |
// memory at once before sending them to the plugin. |
|
|
72 |
repeated FileDescriptorProto proto_file = 15; |
|
|
73 |
} |
|
|
74 |
|
|
|
75 |
// The plugin writes an encoded CodeGeneratorResponse to stdout. |
|
|
76 |
message CodeGeneratorResponse { |
|
|
77 |
// Error message. If non-empty, code generation failed. The plugin process |
|
|
78 |
// should exit with status code zero even if it reports an error in this way. |
|
|
79 |
// |
|
|
80 |
// This should be used to indicate errors in .proto files which prevent the |
|
|
81 |
// code generator from generating correct code. Errors which indicate a |
|
|
82 |
// problem in protoc itself -- such as the input CodeGeneratorRequest being |
|
|
83 |
// unparseable -- should be reported by writing a message to stderr and |
|
|
84 |
// exiting with a non-zero status code. |
|
|
85 |
optional string error = 1; |
|
|
86 |
|
|
|
87 |
// Represents a single generated file. |
|
|
88 |
message File { |
|
|
89 |
// The file name, relative to the output directory. The name must not |
|
|
90 |
// contain "." or ".." components and must be relative, not be absolute (so, |
|
|
91 |
// the file cannot lie outside the output directory). "/" must be used as |
|
|
92 |
// the path separator, not "\". |
|
|
93 |
// |
|
|
94 |
// If the name is omitted, the content will be appended to the previous |
|
|
95 |
// file. This allows the generator to break large files into small chunks, |
|
|
96 |
// and allows the generated text to be streamed back to protoc so that large |
|
|
97 |
// files need not reside completely in memory at one time. Note that as of |
|
|
98 |
// this writing protoc does not optimize for this -- it will read the entire |
|
|
99 |
// CodeGeneratorResponse before writing files to disk. |
|
|
100 |
optional string name = 1; |
|
|
101 |
|
|
|
102 |
// If non-empty, indicates that the named file should already exist, and the |
|
|
103 |
// content here is to be inserted into that file at a defined insertion |
|
|
104 |
// point. This feature allows a code generator to extend the output |
|
|
105 |
// produced by another code generator. The original generator may provide |
|
|
106 |
// insertion points by placing special annotations in the file that look |
|
|
107 |
// like: |
|
|
108 |
// @@protoc_insertion_point(NAME) |
|
|
109 |
// The annotation can have arbitrary text before and after it on the line, |
|
|
110 |
// which allows it to be placed in a comment. NAME should be replaced with |
|
|
111 |
// an identifier naming the point -- this is what other generators will use |
|
|
112 |
// as the insertion_point. Code inserted at this point will be placed |
|
|
113 |
// immediately above the line containing the insertion point (thus multiple |
|
|
114 |
// insertions to the same point will come out in the order they were added). |
|
|
115 |
// The double-@ is intended to make it unlikely that the generated code |
|
|
116 |
// could contain things that look like insertion points by accident. |
|
|
117 |
// |
|
|
118 |
// For example, the C++ code generator places the following line in the |
|
|
119 |
// .pb.h files that it generates: |
|
|
120 |
// // @@protoc_insertion_point(namespace_scope) |
|
|
121 |
// This line appears within the scope of the file's package namespace, but |
|
|
122 |
// outside of any particular class. Another plugin can then specify the |
|
|
123 |
// insertion_point "namespace_scope" to generate additional classes or |
|
|
124 |
// other declarations that should be placed in this scope. |
|
|
125 |
// |
|
|
126 |
// Note that if the line containing the insertion point begins with |
|
|
127 |
// whitespace, the same whitespace will be added to every line of the |
|
|
128 |
// inserted text. This is useful for languages like Python, where |
|
|
129 |
// indentation matters. In these languages, the insertion point comment |
|
|
130 |
// should be indented the same amount as any inserted code will need to be |
|
|
131 |
// in order to work correctly in that context. |
|
|
132 |
// |
|
|
133 |
// The code generator that generates the initial file and the one which |
|
|
134 |
// inserts into it must both run as part of a single invocation of protoc. |
|
|
135 |
// Code generators are executed in the order in which they appear on the |
|
|
136 |
// command line. |
|
|
137 |
// |
|
|
138 |
// If |insertion_point| is present, |name| must also be present. |
|
|
139 |
optional string insertion_point = 2; |
|
|
140 |
|
|
|
141 |
// The file contents. |
|
|
142 |
optional string content = 15; |
|
|
143 |
} |
|
|
144 |
repeated File file = 15; |
|
|
145 |
} |
|
|
146 |
|