include "base.thrift" include "msgpack.thrift" include "domain.thrift" include "withdrawals_domain.thrift" namespace java com.rbkmoney.damsel.withdrawals.provider_adapter namespace erlang wthadpt typedef domain.Failure Failure /** * Adapter options. */ typedef domain.ProxyOptions Options /** * Непрозрачное для процессинга состояние адаптера, связанное с определённой сессией взаимодействия с * третьей стороной. */ typedef msgpack.Value InternalState /** * Требование адаптера к процессингу, отражающее дальнейший прогресс сессии взаимодействия с третьей * стороной. */ union Intent { 1: FinishIntent finish 2: SleepIntent sleep } /** * Требование завершить сессию взаимодействия с третьей стороной. */ struct FinishIntent { 1: required FinishStatus status } /** * Статус, c которым завершилась сессия взаимодействия с третьей стороной. */ union FinishStatus { /** Успешное завершение взаимодействия. */ 1: Success success /** Неуспешное завершение взаимодействия с пояснением возникшей проблемы. */ 2: Failure failure } struct Success { 1: required domain.TransactionInfo trx_info } /** * Требование прервать на определённое время сессию взаимодействия, с намерением продолжить её потом. */ struct SleepIntent { /** Таймер, определяющий когда следует продолжить взаимодействие. */ 1: required base.Timer timer } /// /** * Данные вывода, необходимые для обращения к провайдеру. */ struct Withdrawal { 1: required base.ID id 2: required Cash body 3: required Destination destination 4: optional Identity sender 5: optional Identity receiver } typedef withdrawals_domain.Destination Destination typedef withdrawals_domain.Identity Identity struct Cash { 1: required domain.Amount amount 2: required domain.Currency currency } /// /** * Результат обращения к адаптеру в рамках сессии. * * В результате обращения адаптер может решить, следует ли: * - завершить сессию взаимодействия с провайдером (FinishIntent); или * - просто приостановить на определённое время (SleepIntent), обновив своё состояние, которое * вернётся к нему в последующем запросе. */ struct ProcessResult { 1: required Intent intent 2: optional InternalState next_state } service Adapter { /** * Запрос к адаптеру на проведение взаимодействия с провайдером в рамках платежной сессии. */ ProcessResult ProcessWithdrawal ( 1: Withdrawal withdrawal 2: InternalState state 3: Options opts ) throws ( ) }