Monadic do notation for rust using macro and duck typing