1️⃣ В любом современном языке есть средства форматирования, например
prettier для 👩💻, gofmt для 👩💻 и rustfmt для 👩💻. К сожалению долгое время форматирования в protobuf отсутствовало на должнем уровне. И вот в CLI buf появилась функцию format, которая позволяет форматировать Protobuf файлы в соответствии с отраслевыми стандартами.Вот пример отформатированного файла:
syntax = "proto3";
package moguchev.my.awesome.package.api.users;
import "google/api/field_behavior.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
import "validate/validate.proto";
option csharp_namespace = "Moguchev.My.Awesome.Package.Api.Users";
option go_package = "github.com/moguchev/my/awesome/package/pkg/api/users;users";
// GetUsersRequest - GetUsersRequest request
message GetUsersRequest {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = {
json_schema: {
title: "ListServicesRequest"
description: "ListServices request"
required: [
"pagination"
]
}
};
// pagination - пагинация
Pagination pagination = 1 [
json_name = "pagination",
(google.api.field_behavior) = REQUIRED,
(validate.rules).message.required = true
];
// ids - идентификаторы сервисов
repeated uint64 ids = 2 [json_name = "id"]; // query param: ?id=1&id=2
}
Форматирует
buf реально круто, но есть нюанс - нет возможности настроить правила форматирования. Разработчики buf посчитали, что отформатировать .proto файл можно лишь единственным образом. К сожалению инструмент еще не завезли в VSCode 👩💻 и IntelliJ 👩💻, но обещают в скором времени добавить. Ждем!)
