Skip to content

Instantly share code, notes, and snippets.

@ncornwell
ncornwell / gist:2921826
Created June 13, 2012 04:12 — forked from michaeldiamant/gist:2892756
Extensible trade execution processor
object ExtensibleTradeExecutionProcessor extends TradeExecutionProcessor {
def process(requestId: String,
executionPrice: BigDecimal,
requestedTradeRepository: RequestedTradeRepository,
priceMutators: Set[(RequestedTrade, BigDecimal) => BigDecimal]): Option[ExecutedTrade] =
for {
requestedTrade <- requestedTradeRepository.findById(requestId)
reportedPrice <- priceMutators.foldLeft(executionPrice)((price, mutator) => mutator(requestedTrade, price)).some
} yield