Длительность в protobuf — это тип, а не комментарий
Продолжаю тему protobuf. Про easyp и валидацию контрактов уже писал: линтер ловит имена, пакеты, пустые комментарии, раскладку файлов. На смысл поля ему всё равно. Контракт с int64 и комментарием «в секундах» для него зелёный.
Google в своих рекомендациях AIP-142 пишет иначе. Длительность — google.protobuf.Duration, момент времени — google.protobuf.Timestamp. Не целое число секунд и не unix-time. Единица входит в тип, а не в комментарий, который прочитает один человек из десяти.
Было: // Срок действия токена в секундах. int64 expires_in = 3; 900 здесь одинаково похоже на секунды и на миллисекунды. Договорённость живёт в комментарии. Дробную секунду так не передать, не заведя второе поле. Поддержки со стороны языков нет.
Стало: import "google/protobuf/duration.proto";
// Срок действия токена. google.protobuf.Duration expires_in = 3; Внутри — секунды и наносекунды. В Python это timedelta (ToTimedelta()), в Go — time.Duration (AsDuration()). Оба языка получают одну единицу, договариваться в чате не нужно.