From e6b3293482d4c9f966b121bb7e9e55bfdc59ac5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Cesar=20Sanjuan=20Szklarz?= Date: Mon, 29 Mar 2021 19:09:19 +0200 Subject: [PATCH] reStructuredText format output --- Makefile | 2 + examples/doc/example.srt | 580 ++++++++++++++++++++++++++++++++ renderer.go | 7 + resources.go | 1 + resources/restructuredtext.tmpl | 119 +++++++ 5 files changed, 709 insertions(+) create mode 100644 examples/doc/example.srt create mode 100644 resources/restructuredtext.tmpl diff --git a/Makefile b/Makefile index 093e8992..d06a1db5 100644 --- a/Makefile +++ b/Makefile @@ -58,6 +58,7 @@ docker_test: build tmp/googleapis docker @$(DOCKER_CMD) --doc_opt=html,example.html:Ignore* @$(DOCKER_CMD) --doc_opt=json,example.json:Ignore* @$(DOCKER_CMD) --doc_opt=markdown,example.md:Ignore* + @$(DOCKER_CMD) --doc_opt=restructuredtext,example.rst:Ignore* @$(DOCKER_CMD) --doc_opt=/templates/asciidoc.tmpl,example.txt:Ignore* examples: build tmp/googleapis examples/proto/*.proto examples/templates/*.tmpl @@ -67,6 +68,7 @@ examples: build tmp/googleapis examples/proto/*.proto examples/templates/*.tmpl @$(EXAMPLE_CMD) --doc_opt=html,example.html:Ignore* examples/proto/*.proto @$(EXAMPLE_CMD) --doc_opt=json,example.json:Ignore* examples/proto/*.proto @$(EXAMPLE_CMD) --doc_opt=markdown,example.md:Ignore* examples/proto/*.proto + @$(EXAMPLE_CMD) --doc_opt=restructuredtext,example.srt:Ignore* examples/proto/*.proto @$(EXAMPLE_CMD) --doc_opt=examples/templates/asciidoc.tmpl,example.txt:Ignore* examples/proto/*.proto release: diff --git a/examples/doc/example.srt b/examples/doc/example.srt new file mode 100644 index 00000000..2d6300a2 --- /dev/null +++ b/examples/doc/example.srt @@ -0,0 +1,580 @@ +###################### +Protocol Documentation +###################### + + + + +.. _ref_Booking.proto: + +Booking.proto +================================================================== + +Booking related messages. + +This file is really just an example. The data model is completely +fictional. + + + +.. _ref_com.example.Booking: + +Booking +------------------------------------------------------------------ + +Represents the booking of a vehicle. + +Vehicles are some cool shit. But drive carefully! + + + +.. csv-table:: Booking type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "vehicle_id", ":ref:`ref_int32`", "", "ID of booked vehicle." + "customer_id", ":ref:`ref_int32`", "", "Customer that booked the vehicle." + "status", ":ref:`ref_com.example.BookingStatus`", "", "Status of the booking." + "confirmation_sent", ":ref:`ref_bool`", "", "Has booking confirmation been sent?" + "payment_received", ":ref:`ref_bool`", "", "Has payment been received?" + "color_preference", ":ref:`ref_string`", "", "**Deprecated.** Color preference of the customer." + + + + + + + +.. _ref_com.example.BookingStatus: + +BookingStatus +------------------------------------------------------------------ + +Represents the status of a vehicle booking. + + + +.. csv-table:: BookingStatus type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_int32`", "", "Unique booking status ID." + "description", ":ref:`ref_string`", "", "Booking status description. E.g. "Active"." + + + + + + + +.. _ref_com.example.BookingStatusID: + +BookingStatusID +------------------------------------------------------------------ + +Represents the booking status ID. + + + +.. csv-table:: BookingStatusID type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_int32`", "", "Unique booking status ID." + + + + + + + +.. _ref_com.example.EmptyBookingMessage: + +EmptyBookingMessage +------------------------------------------------------------------ + +An empty message for testing + + + + + + + + + + + + + + +.. _ref_com.example.BookingService: + +BookingService +------------------------------------------------------------------ + +Service for handling vehicle bookings. + +.. csv-table:: BookingService service methods + :header: "Method Name", "Request Type", "Response Type", "Description" + :widths: auto + + "BookVehicle", ":ref:`ref_com.example.Booking`", ":ref:`ref_com.example.BookingStatus`", "Used to book a vehicle. Pass in a Booking and a BookingStatus will be returned." + "BookingUpdates", ":ref:`ref_com.example.BookingStatusID`", ":ref:`ref_com.example.BookingStatus` stream", "Used to subscribe to updates of the BookingStatus." + + + + + +.. _ref_Customer.proto: + +Customer.proto +================================================================== + +This file has messages for describing a customer. + + + +.. _ref_com.example.Address: + +Address +------------------------------------------------------------------ + +Represents a mail address. + + + +.. csv-table:: Address type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "address_line_1", ":ref:`ref_string`", "required", "First address line." + "address_line_2", ":ref:`ref_string`", "optional", "Second address line." + "address_line_3", ":ref:`ref_string`", "optional", "Second address line." + "town", ":ref:`ref_string`", "required", "Address town." + "county", ":ref:`ref_string`", "optional", "Address county, if applicable." + "country", ":ref:`ref_string`", "required", "Address country." + + + + + + + +.. _ref_com.example.Customer: + +Customer +------------------------------------------------------------------ + +Represents a customer. + + + +.. csv-table:: Customer type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_int32`", "required", "Unique customer ID." + "first_name", ":ref:`ref_string`", "required", "Customer first name." + "last_name", ":ref:`ref_string`", "required", "Customer last name." + "details", ":ref:`ref_string`", "optional", "Customer details." + "email_address", ":ref:`ref_string`", "optional", "Customer e-mail address." + "phone_number", ":ref:`ref_string`", "repeated", "Customer phone numbers, primary first." + "mail_addresses", ":ref:`ref_com.example.Address`", "repeated", "Customer mail addresses, primary first." + + + + + + + + + + + + + + + + +.. _ref_Vehicle.proto: + +Vehicle.proto +================================================================== + +Messages describing manufacturers / vehicles. + + + +.. _ref_com.example.Manufacturer: + +Manufacturer +------------------------------------------------------------------ + +Represents a manufacturer of cars. + + + +.. csv-table:: Manufacturer type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_int32`", "required", "The unique manufacturer ID." + "code", ":ref:`ref_string`", "required", "A manufacturer code, e.g. "DKL4P"." + "details", ":ref:`ref_string`", "optional", "Manufacturer details (minimum orders et.c.)." + "category", ":ref:`ref_com.example.Manufacturer.Category`", "optional", "Manufacturer category. Default: CATEGORY_EXTERNAL" + + + + + + + +.. _ref_com.example.Model: + +Model +------------------------------------------------------------------ + +Represents a vehicle model. + + + +.. csv-table:: Model type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_string`", "required", "The unique model ID." + "model_code", ":ref:`ref_string`", "required", "The car model code, e.g. "PZ003"." + "model_name", ":ref:`ref_string`", "required", "The car model name, e.g. "Z3"." + "daily_hire_rate_dollars", ":ref:`ref_sint32`", "required", "Dollars per day." + "daily_hire_rate_cents", ":ref:`ref_sint32`", "required", "Cents per day." + + + + + + + +.. _ref_com.example.Vehicle: + +Vehicle +------------------------------------------------------------------ + +Represents a vehicle that can be hired. + + + +.. csv-table:: Vehicle type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "id", ":ref:`ref_int32`", "required", "Unique vehicle ID." + "model", ":ref:`ref_com.example.Model`", "required", "Vehicle model." + "reg_number", ":ref:`ref_string`", "required", "Vehicle registration number." + "mileage", ":ref:`ref_sint32`", "optional", "Current vehicle mileage, if known." + "category", ":ref:`ref_com.example.Vehicle.Category`", "optional", "Vehicle category." + "daily_hire_rate_dollars", ":ref:`ref_sint32`", "optional", "Dollars per day. Default: 50" + "daily_hire_rate_cents", ":ref:`ref_sint32`", "optional", "Cents per day." + + + + + +.. csv-table:: Vehicle type extensions + :header: "Extension", "Type", "Base", "Number", "Description" + :widths: auto + + "series", "string", "Model", "100", "Vehicle model series." + + + + +.. _ref_com.example.Vehicle.Category: + +Vehicle.Category +------------------------------------------------------------------ + +Represents a vehicle category. E.g. "Sedan" or "Truck". + + + +.. csv-table:: Vehicle.Category type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto + + "code", ":ref:`ref_string`", "required", "Category code. E.g. "S"." + "description", ":ref:`ref_string`", "required", "Category name. E.g. "Sedan"." + + + + + + + + + +.. _ref_com.example.Manufacturer.Category: + +Manufacturer.Category +------------------------------------------------------------------ + +Manufacturer category. A manufacturer may be either inhouse or external. + +.. csv-table:: Enum Manufacturer.Category values + :header: "Name", "Number", "Description" + :widths: auto + + "CATEGORY_INHOUSE", "0", "The manufacturer is inhouse." + "CATEGORY_EXTERNAL", "1", "The manufacturer is external." + + + + + +.. _ref_Vehicle.proto_extensions: + +File-level Extensions +-------------------------------------------------------------------------------- + +.. csv-table:: Vehicle.proto file-level Extensions + :header: "Extension", "Type", "Base", "Number", "Description" + :widths: auto + + "country", "string", "Manufacturer", "100", "Manufacturer country. Default: `China`" + + + + + + +.. _ref_scala_types: + +Scalar Value Types +================== + + + +.. _ref_double: + +double +----------------------------- + + + +.. csv-table:: double language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "double", "double", "double", "float", "float64", "double", "float", "Float" + + + +.. _ref_float: + +float +----------------------------- + + + +.. csv-table:: float language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "float", "float", "float", "float", "float32", "float", "float", "Float" + + + +.. _ref_int32: + +int32 +----------------------------- + +Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. + +.. csv-table:: int32 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "int32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" + + + +.. _ref_int64: + +int64 +----------------------------- + +Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. + +.. csv-table:: int64 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "int64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" + + + +.. _ref_uint32: + +uint32 +----------------------------- + +Uses variable-length encoding. + +.. csv-table:: uint32 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "uint32", "uint32", "int", "int/long", "uint32", "uint", "integer", "Bignum or Fixnum (as required)" + + + +.. _ref_uint64: + +uint64 +----------------------------- + +Uses variable-length encoding. + +.. csv-table:: uint64 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "uint64", "uint64", "long", "int/long", "uint64", "ulong", "integer/string", "Bignum or Fixnum (as required)" + + + +.. _ref_sint32: + +sint32 +----------------------------- + +Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. + +.. csv-table:: sint32 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "sint32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" + + + +.. _ref_sint64: + +sint64 +----------------------------- + +Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. + +.. csv-table:: sint64 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "sint64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" + + + +.. _ref_fixed32: + +fixed32 +----------------------------- + +Always four bytes. More efficient than uint32 if values are often greater than 2^28. + +.. csv-table:: fixed32 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "fixed32", "uint32", "int", "int", "uint32", "uint", "integer", "Bignum or Fixnum (as required)" + + + +.. _ref_fixed64: + +fixed64 +----------------------------- + +Always eight bytes. More efficient than uint64 if values are often greater than 2^56. + +.. csv-table:: fixed64 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "fixed64", "uint64", "long", "int/long", "uint64", "ulong", "integer/string", "Bignum" + + + +.. _ref_sfixed32: + +sfixed32 +----------------------------- + +Always four bytes. + +.. csv-table:: sfixed32 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "sfixed32", "int32", "int", "int", "int32", "int", "integer", "Bignum or Fixnum (as required)" + + + +.. _ref_sfixed64: + +sfixed64 +----------------------------- + +Always eight bytes. + +.. csv-table:: sfixed64 language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "sfixed64", "int64", "long", "int/long", "int64", "long", "integer/string", "Bignum" + + + +.. _ref_bool: + +bool +----------------------------- + + + +.. csv-table:: bool language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "bool", "bool", "boolean", "boolean", "bool", "bool", "boolean", "TrueClass/FalseClass" + + + +.. _ref_string: + +string +----------------------------- + +A string must always contain UTF-8 encoded or 7-bit ASCII text. + +.. csv-table:: string language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "string", "string", "String", "str/unicode", "string", "string", "string", "String (UTF-8)" + + + +.. _ref_bytes: + +bytes +----------------------------- + +May contain any arbitrary sequence of bytes. + +.. csv-table:: bytes language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "bytes", "string", "ByteString", "str", "[]byte", "ByteString", "string", "String (ASCII-8BIT)" + + \ No newline at end of file diff --git a/renderer.go b/renderer.go index 950f48d2..675f21cc 100644 --- a/renderer.go +++ b/renderer.go @@ -20,6 +20,7 @@ const ( RenderTypeHTML RenderTypeJSON RenderTypeMarkdown + RenderTypeReStructuredText ) // NewRenderType creates a RenderType from the supplied string. If the type is not known, (0, error) is returned. It is @@ -34,6 +35,8 @@ func NewRenderType(renderType string) (RenderType, error) { return RenderTypeJSON, nil case "markdown": return RenderTypeMarkdown, nil + case "restructuredtext": + return RenderTypeReStructuredText, nil } return 0, errors.New("Invalid render type") @@ -54,6 +57,8 @@ func (rt RenderType) renderer() (Processor, error) { return new(jsonRenderer), nil case RenderTypeMarkdown: return &htmlRenderer{string(tmpl)}, nil + case RenderTypeReStructuredText: + return &htmlRenderer{string(tmpl)}, nil } return nil, errors.New("Unable to create a processor") @@ -69,6 +74,8 @@ func (rt RenderType) template() ([]byte, error) { return nil, nil case RenderTypeMarkdown: return fetchResource("markdown.tmpl") + case RenderTypeReStructuredText: + return fetchResource("restructuredtext.tmpl") } return nil, errors.New("Couldn't find template for render type") diff --git a/resources.go b/resources.go index 41733f65..95832cf3 100644 --- a/resources.go +++ b/resources.go @@ -14,6 +14,7 @@ var embeddedResources = map[string]string{ "docbook.tmpl": "H4sIAAAAAAAA/+xZ3W/bNhB/z19BaC/bikodugDDQLvA7LnF0GZB3O2dls42MYrUSMqNoel/Hyiq+v5a7bhZkJcguvvxjryP39ESfnMfMnQAqajgM+cH95WDgPsioHw3c/74uHr5k/NmfoWJ1NRnML9CCGuqGcxvpdDCFwwthR+HwDXRVHDsWe0VQkkiCd8BcleUgUpTs1SBb1BGXRhKEveGhJCmlbVmdUQkQe4SlC9pZFZlJip2P4BSZJebLo0jGsycJHFXMWPWsGNNVj2+F3zX4XXIr9HRLXLfEbWiwAJVyLEmGwZoK0kIM4cwVjgsXGKfEaU4CVveSwWyZhsbMiZ2UsQR8gVTM+fHinGEsBFG4BvlJxro/cz53vFORrxyr8dBr5sQvQcSVCUIYSk+1SUIYeBaHufZabFnH7ohH48RDCPekw2wYUglk51A7DX2iL3WQbDeiKCxrlLftWoYPXil4If2jRnlfyHzB3hZ0SYkpqLzKrKP2DOw+bA9s8JEa8xvVuXfUh7APXJ/z+KmkBNAJMEnGgLnnwC2JGYabQlT8F2aYgijPVFUzZcFysVeIU0S4EGadraW7amltfgnYbE5jsHNc9nPKEmaei8D5GanJdXkK4PXE11PK/ZsqxV84WWdXXJD1ULBBr/ea+CGP8/PCDegNASo9DBCDteXIIfHQR9FTE6lkF+IGkHcxOEG5FdmmY4qG43RV2Katr2F4JpQTvmuYblU/Hc2s2kZp7MnxDrYq92gqqqyUHgcXu5OdC6my4I8Rm+vL0FvJ/KSOdv/gE5svM9OJae15aWaqqeN8oe+sV7/9VKUt/l585LBAVj/nMaUb4UMCRvsludJ/jzJnyf5k5rktb6fQj55jaxBHqj/Ze82Hn6Gd8zvD6D34nG8vHhwwrJnReOT/g7+jkFpNE5dd6AiwRVMgD44P+WpvAA55fFpMEkubdGIbfVcu9YSSEj5Lk2Ryv4faufBPdjItzZhxb27sOov3MZjvP00FBVe6nxtu/YJI9Le27Oqrff++I2n/74z1tMd+usxwHn17YZqZSnPtBtJoUV/W3++mAhtAtgPWLx4MaT+jRzIkP72qPd9fGFlb8Wg+28Grb+7HVLfxZtjh75R2i2aapNUOR6z4qtTVF8KPs/M7INFpcMrz0ObN+RmkjOKWkTRJGsmVZOANmeToG+nHWSx3hMZjTveTzuJyWsvsEVcTdpqkFadsjpuThV2usJe8UHq3wAAAP//9p3zJMIaAAA=", "html.tmpl": "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", "markdown.tmpl": "H4sIAAAAAAAA/+RWzW7jNhC+6ymmUg9rL+TcF7YPjZtdFLtpsA56WRQNbY1tATKpipSRQOS7F/yRSFlW4gLpqT5Ymhlpfr75ZsQEHiom2JYVsGLb+ohUEJEzGs0JUHLERSxYGS/nN2QZRUkCj2RTILAd3DIqkAoeNU1F6B5hdpcXyJWKmubnXV7gX/p1+LSA2T05olIp/Ggad//nh6S7n0QATZNCvoPZN+Sc7JGDUkbrPLdqpQCsm6+M7kNXd3VRhO6QZs5FCkgzSDtJh/mV1sfzGEb3bgGeBVKeMzqI0hlcKA1aWuAJC/A2E9KDqFSKne2a8GusTvl2AGOr9lX+2wpbbQo/1ltSkAr+IEWN8PhSos6aG2V60spUaOUkupognnJdZo548xJIke/pIq7y/UHEyzmBQ4W7RZwYdj6yUj83vyktSbv3o6aZrZBvq7zUpFYqyMaTqhfYw+BZbzx6Rlz0qnH/QvhdjkWmfUowtyANOCDhK9lgARKCN0FGElL9A3uFvuh+IEMMtX/Xb+krBdnRVscLm2rliX3aZGEeNyl/yGmGzzD73eTDIc6wrHBLBGaxzHBH6kLAjhQcJ0pNp6vOOptOW440DWWbCvqQWEBW1oMhiVLgxE9gAAxNzpWp1FKsvXpow9mJpB8XD/EvhOvLfX3cYDUG9RDuDu1x2IOBvgR9D3kr6/1IcprT/bnFpuek/xg6a5r/lNoZPrb7NU2XwSi43fcOcyBBm97qwRWAm+JGwX4LwgCMIQhotr9D4BK3AhhGlnAIycUN/v/l59OAoE+jDPU96bXgjJ3+s3UdQV8h5zcUB5a1HP2Of9fIRdud78hLRjm28mh3zhtxLp7LMvzo6ATG97dL6XyNO3WwzW0TnH4tKiTHnO6VAm7uO8idV1vZ0K3VX/BrDa85fmvwBj3m7anEtdfNZ5LA8CyhmzUr9cm07cY9E8hBwu3HjyDhN3IiIOHhRRzMgH1m2pRo1ZcH3ct68zLWNHu9OFv+z9sDIpo0ffNCNppTtMUwhpsl9FWu07qEbv7KMrTpgkLZVhZqPvd83a4PpCq7pw89Z7r6Vu6A/icAAP//o9X/quoLAAA=", + "restructuredtext.tmpl": "H4sIAAAAAAAA/8RWzXKbMBC+8xRb0kPr1DwA0/TQOD/TSdJM3OnVls1iMyMERcKNh/LunZUEFhgnadMmXIBdaffT9+1KOhp8vNsiU9ky4zDJlmWKQjGVZMI7MNqrqoKJFUJwnnCUde1V1ds44TgTLEUITyC4YSnWtecFAcwKjGdVZU0hzW7cJ89+dLQJymWR5ASZcrborlFKttIAXSDnJecumKtMrCyg8bOfYUBJDMElk+cJ8qiBs5SbsWILjmEIHRSgtjlCrMd6ABCukUVYhODr+f4H8L9tc6T3FVsgpw8no6/n/EwitZYhsFJlrl4UFOqaxvitEBQhLDAO5w5FlKOu5+QjeJTJjNTLeZeICO8h+KpzSvAjzAtcMoWR/yvCmJVcQcy4xPd1PRpNWm8wGkFVoYjquqpEtiigS5cha2IifGe8JEbsryaq67KhfK+qxqA/PWvyHOLP7hUKSUCfRj6247sCtHFcET4zqd83ZbrA4g/U2KEaVMTiMjpYw2kmFEtEIlZ7LpO++f2/zNoP+PhmrH2Q2laD8fiT04Fnokxfvf16chOmnuYbWnFPanL9laqavoOKPqqSy/c+z0iENiQfKm7L9G5LruvZrqJDz6Nte8xxgxx2k/8B+30t9hvNEh4PAniRVnv9Tpvvtdr8cK/tpO8o3euzKRabZPnoSfeSbbYTWxpwkKJaZ/0j7Voboem2O/xRolTQCH6HMs+ExNbwRL1N2EGxOwedzeecd0Y7a5+qAlmaiBUtQ383Su0HMkAHIhnHg6Ee3Qn2qsGS2haC3TAa8eWScTajs4z6fUp/Behq00zKgauXW056fL+a9CXRrM2Uk2N4uKZM8WUKDxy/TiDgTKxKtkIo6Mog27top2qCnGa0RXF6fEyvL2zD6H27VWuzb1xk2n2krZe3uqLKxXagcpo6caA0G0Ged/4pS8dg0nVMF70Q0zUr8t2EdTciQbKGgS1fGjFI6N8BAAD//0gjAb++CwAA", "scalars.json": "H4sIAAAAAAAA/9yXzW4aMRDH7zzFiFMqBZDSlEa9JZGQOOQEOUWp5GVnvW6NTewxzaqq1HfoG/ZJqt0F1gYvpChVk9zQfHg9v/nPWNx1AL53AAC6C6NJT4sFdj9BN9Uukdg9rV1KE9rSvDbMFot45MzG7XxzciY1o+H52vGFLVk8ZZEvgpyNvaBcq6jLuKRYO0aVowPw47SlxiB1X4lBYFNhYN4q8P1ZrMCwjn9dn1DeNTb13Vq0sGRGsERiT6LilAOqmU6F4n0YK8wyMROoCDJtNh5QyBmJJYJy8wSNhd8/f4HIoNDOQCZQpiAsSPEVZQGkIWdl7DppyaRDewrOItjqYiCUJWRpPwI8uHkDXKgI7iDWh+1Fe6iFIuRo4rC9FB/1leDKzUEbGInH8tcJs2DwwQmD6btDPWi0/sJ6MDw/0IPm5k0PpFY82oT4SPvhu10YWDLCC9huxsBP3+3IXvLuGPlHOLgWMbqoGt0zy/EAgaM06Y4RZQuZmERcXCPu/4jkKET2qN05EVxhCkJRPWt9mOZoEebaIGxGWhZ1Cu6OM+VMgUHuJDNQXcG+7fVoj9qPz855eN7G+VWvwEw8YhqR8aX8xgoLWflqJAWh7cNNgK4G5FbvdLZ6OYAZBJ0RKuAGGaGp484+n128vM35zEqtWEakumKJgud0CGb54B6G+WH4epft/mF/uh7f9tL7Cy29wa2UaC2f8q/Lj2vK9K08eqZfZWlHpiKFbnuCCrecfoFT4/BaMmsHIyZt/XN/twOSTa+hdsDcWQJWd36mFTGh4HY66l2sXq+01NjHXiIILifX4zEQPlJMF+GHGmKhnbdczKc2CZuft3wiZGbJDJwS5ZVj3Ooz4aQqbf98VMrfAXbDig0fpgpgJhFkmCnA4oNDNSvXafvUtNG5KggnLYTu7svjYoR2s55OaR+dqsO9i6vxtEbUue/8CQAA//8z+wC/ohEAAA==", } diff --git a/resources/restructuredtext.tmpl b/resources/restructuredtext.tmpl new file mode 100644 index 00000000..9c953e05 --- /dev/null +++ b/resources/restructuredtext.tmpl @@ -0,0 +1,119 @@ +###################### +Protocol Documentation +###################### + +{{range .Files}} +{{$file_name := .Name}} + +.. _ref_{{.Name}}: + +{{.Name}} +================================================================== + +{{.Description}} + +{{range .Messages}} + +.. _ref_{{.FullName}}: + +{{.LongName}} +------------------------------------------------------------------ + +{{.Description}} + +{{if .HasFields}} + +.. csv-table:: {{.LongName}} type fields + :header: "Field", "Type", "Label", "Description" + :widths: auto +{{range .Fields }} + "{{.Name}}", ":ref:`ref_{{.FullType}}`", "{{.Label}}", "{{if (index .Options "deprecated"|default false)}}**Deprecated.** {{end}}{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}" +{{- end}} +{{end}} + + +{{if .HasExtensions}} + +.. csv-table:: {{.LongName}} type extensions + :header: "Extension", "Type", "Base", "Number", "Description" + :widths: auto +{{range .Extensions }} + "{{.Name}}", "{{.LongType}}", "{{.ContainingLongType}}", "{{.Number}}", "{{nobr .Description}}{{if .DefaultValue}} Default: {{.DefaultValue}}{{end}}" +{{- end}} +{{end}} + +{{end}} + +{{range .Enums}} + +.. _ref_{{.FullName}}: + +{{.LongName}} +------------------------------------------------------------------ + +{{.Description}} + +.. csv-table:: Enum {{.LongName}} values + :header: "Name", "Number", "Description" + :widths: auto +{{range .Values }} + "{{.Name}}", "{{.Number}}", "{{nobr .Description}}" +{{- end}} + +{{end}} + +{{if .HasExtensions}} + +.. _ref_{{$file_name}}_extensions: + +File-level Extensions +-------------------------------------------------------------------------------- + +.. csv-table:: {{.Name}} file-level Extensions + :header: "Extension", "Type", "Base", "Number", "Description" + :widths: auto +{{range .Extensions}} + "{{.Name}}", "{{.LongType}}", "{{.ContainingLongType}}", "{{.Number}}", "{{nobr .Description}}{{if .DefaultValue}} Default: `{{.DefaultValue}}`{{end}}" +{{- end}} +{{end}} + +{{range .Services}} + +.. _ref_{{.FullName}}: + +{{.Name}} +------------------------------------------------------------------ + +{{.Description}} + +.. csv-table:: {{.Name}} service methods + :header: "Method Name", "Request Type", "Response Type", "Description" + :widths: auto +{{range .Methods}} + "{{.Name}}", ":ref:`ref_{{.RequestFullType}}`{{if .RequestStreaming}} stream{{end}}", ":ref:`ref_{{.ResponseFullType}}`{{if .ResponseStreaming}} stream{{end}}", "{{nobr .Description}}" +{{- end}} +{{end}} + +{{end}} + +.. _ref_scala_types: + +Scalar Value Types +================== + +{{range .Scalars}} + +.. _ref_{{.ProtoType}}: + +{{.ProtoType}} +----------------------------- + +{{.Notes}} + +.. csv-table:: {{.ProtoType}} language representation + :header: ".proto Type", "C++", "Java", "Python", "Go", "C#", "PHP", "Ruby" + :widths: auto + + "{{.ProtoType}}", "{{.CppType}}", "{{.JavaType}}", "{{.PythonType}}", "{{.GoType}}", "{{.CSharp}}", "{{.PhpType}}", "{{.RubyType}}" + +{{end}} \ No newline at end of file