Пора уже думать как прокидывать ошибки из раста в дарт.
Solution
Понятно что будем в дарте делать throw. По самим ошибкам хочется уйти от какого-то JasonError в котором в name и message стрингами лежат конкретные растовские ошибки, ибо такой вариант не шибко future proof. Думаю, тут следует провести категоризацию растовских ошибок, и выкидывать уже что-то более конкретное. По возможности используя ошибки из дартовского стд.
В этом PR'е идет базовая реализация всего этого механизма, ошибки в extern функциях пока по прежнему анврапятся, этот момент подьедет в следующем PR'е.
Про валидацию аргументов. В данный момент дарту без разницы на тип целочисленных значений. Т.е. в Uint8 можно прокинуть -1, а там просто произойдет каст с оверфловом. В этом PR'е все целочисленные типы (кроме случаев с bool и enum) заменены на In64, а раст уже делает checked cast к нужному типу, возвращая в дарт ошибку если он не удался.
Synopsis
Пора уже думать как прокидывать ошибки из раста в дарт.
Solution
Понятно что будем в дарте делать throw. По самим ошибкам хочется уйти от какого-то
JasonError
в котором вname
иmessage
стрингами лежат конкретные растовские ошибки, ибо такой вариант не шибко future proof. Думаю, тут следует провести категоризацию растовских ошибок, и выкидывать уже что-то более конкретное. По возможности используя ошибки из дартовского стд.В этом PR'е идет базовая реализация всего этого механизма, ошибки в extern функциях пока по прежнему анврапятся, этот момент подьедет в следующем PR'е.
Про валидацию аргументов. В данный момент дарту без разницы на тип целочисленных значений. Т.е. в Uint8 можно прокинуть -1, а там просто произойдет каст с оверфловом. В этом PR'е все целочисленные типы (кроме случаев с bool и enum) заменены на In64, а раст уже делает checked cast к нужному типу, возвращая в дарт ошибку если он не удался.
Checklist
Draft:
prefixk::
labels appliedDraft:
prefix is removed