Я пытаюсь (ошибочно??) использовать определение .proto
, чтобы добавить scalingFactor
ко всем моим скалярным значениям, чтобы обе стороны, которые общаются, могли решить для себя, использовать ли внутри денежные значения в центах, числах с плавающей запятой или десятичных дробях. В этом я хочу получить только целое число, идущее по проводу. Не два целых числа (например, value
и scalingFactor
или value
и nanos
).
Если бы у меня была возможность просто добавить некоторые метаданные на уровне поля, поместив их между []
, это выглядело бы так:
syntax = "not valid proto3....";
message Product1 {
int32 id = 1;
string productName = 2;
int32 priceInCents = 3
int32 weightInTons = 4
}
message Product2 {
int32 id = 1;
string productName = 2;
int32 price = 3 [scalingFactor = .01]
int32 weight = 4 [scalingFactor = 1000]
}
Я хотел бы закончить с определением, как оно описано (но, конечно, недействительно) для Product2. Таким образом, обе стороны могут получить scalingFactor
из определения .proto
. А затем использовать этот scalingFactor
в своем собственном коде. Некоторые могут преобразовать цену в decimal
в JavaScript или оставить ее в центах в C (например, структура с именем price
с int32 для value
(в центах) и int32 для scale
(например, -2 представляет .01))
Есть ли очевидный способ сделать это? В идеале просто.
ОБНОВЛЕНИЕ на основе ответа:
I now realise by paxdiablo's reaction that I was both unclear and maybe even in doubt myself.Неясная часть: если price
составляет 2,50 доллара США, а weight
составляет 7000 кг, я хочу передавать 250
и 7
по проводам во всех случаях. Чего я не искал, так это того, чтобы protobuf справился с масштабированием за меня. Дело в том, что я хотел иметь контекст того, как масштабируются передаваемые значения, чтобы они стали доступными для кода.
Сомнение: я не уверен, что хочу использовать сгенерированные классы в своем собственном коде с обеих сторон. Я видел протобуф больше как транспортный механизм. И снова создайте свои собственные переменные на основе переданных значений или значений, которые необходимо передать.