клиент конфигурируется таким образом что может содержать или не содержать определенные провайдеры информации(гугл, фейсбук и т.д.). процесс авторизации запускается либо одним методом который передается тип провайдера или отдельными экстеншенами для каждого провайдера но суть вот в чем - я не понимаю как организовать все так, чтоб при конфигурации клиента только для работы с гуглом к примеру нельзя было вызвать авторизацию фейсбука. так вообще можно сделать или только в рантайме делать проверки и кидаться исключениями?
Я правильно резюмировал, что Вам нужно при наличии одних сервисов, блокировать другие?
не блокировать, а не давать возможности запустить. т.е. можно считать что клиент формируется как набор провайдеров с общим интерфесом, но запускать нужно каждый по отдельности
при этом хотелось бы, чтоб при отсутствии какого то провайдера в конфигурации, узнать об этом до того как полетит эксепшен в рантайме
откуда тип провайдера передается?)
ну конфигурация самого клиента должна выглядеть примерно так: val client = Client{ install(Google){} install(Facebook){} } а затем использовать его как то так: val token = client.getAccessToken(Google)
Вполне нормально использовать для такого рантайм проверку и выбрасывать исключения, если это библиотека
но ведь такое использование не предполагает, что параметр метода Client#getAccessToken берется с неба, правильно? если очень грубо, то в одном месте будут переданы все авторизаторы, а во всех остальных случаях выбор будет предоставляться из предварительно переданных авторизаторов
да, будет перечень всех возможных вариантов, но нет защиты от вызова какого то провайдера без его предварительной конфигурации в клиенте кроме как проверять в рантайме
Обсуждают сегодня