Как-то я писал про то, что хочется в API эндпойнтах видеть все коды ошибок которые она может вернуть и вот наконец-то дошли руки сделать анализатор который автоматически будет все это собирать на этапе компиляции, потому что руками поддерживать это нереально, так как если где-то в глубине добавили новый код ошибки или вызов другого метода, то всё становится неактуальным.
Работает оно следующим образом: incremental source generator бегает по методам, ищет в теле метода выбросы исключений или возврат кодов ошибок в виде result pattern, потом смотрит на все вызовы методов внутри него и пробегается и по ним и собирает коды ошибок по каждому методу.
К слову, анализатором можно покрыть большинство сценариев, но далеко не все. подробнее читайте в readme библиотеки.
В итоге генерируется мапа, где key = FullyQualified method name (или OperationId/Route для minimal api), а value = массив найденных кодов ошибок.
Эту мапу уже можно использовать по-разному. Например, отображать в сваггере или написать ассерты в тестах, также можно детектировать изменение кодов ошибок ответа API, ведь это по сути breaking change для потребителя.
В примере проекта я добавил отображение в сваггере, с ссылкой на документацию по коду ошибки (если он есть). 'https://t.me/sh_dotnet/138?comment=559' rel='nofollow'>См скриншот в комментариях.
Работает оно следующим образом: incremental source generator бегает по методам, ищет в теле метода выбросы исключений или возврат кодов ошибок в виде result pattern, потом смотрит на все вызовы методов внутри него и пробегается и по ним и собирает коды ошибок по каждому методу.
К слову, анализатором можно покрыть большинство сценариев, но далеко не все. подробнее читайте в readme библиотеки.
В итоге генерируется мапа, где key = FullyQualified method name (или OperationId/Route для minimal api), а value = массив найденных кодов ошибок.
Эту мапу уже можно использовать по-разному. Например, отображать в сваггере или написать ассерты в тестах, также можно детектировать изменение кодов ошибок ответа API, ведь это по сути breaking change для потребителя.
В примере проекта я добавил отображение в сваггере, с ссылкой на документацию по коду ошибки (если он есть). 'https://t.me/sh_dotnet/138?comment=559' rel='nofollow'>См скриншот в комментариях.