/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.util.money;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilder;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
/**
* Fudge builder for {@code CurrencyAmount}.
*/
@FudgeBuilderFor(CurrencyAmount.class)
public final class CurrencyAmountFudgeBuilder implements FudgeBuilder<CurrencyAmount> {
/** Field name. */
public static final String CURRENCY_FIELD_NAME = "currency";
/** Field name. */
public static final String AMOUNT_FIELD_NAME = "amount";
@Override
public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CurrencyAmount object) {
final MutableFudgeMsg msg = serializer.newMessage();
serializer.addToMessage(msg, CURRENCY_FIELD_NAME, null, object.getCurrency());
serializer.addToMessage(msg, AMOUNT_FIELD_NAME, null, object.getAmount());
return msg;
}
@Override
public CurrencyAmount buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
final Currency currency = msg.getValue(Currency.class, CURRENCY_FIELD_NAME);
if (currency == null) {
throw new IllegalArgumentException("Fudge message is not a CurrencyAmount - field 'currency' is not present");
}
final Double amount = msg.getDouble(AMOUNT_FIELD_NAME);
if (amount == null) {
throw new IllegalArgumentException("Fudge message is not a CurrencyAmount - field 'amount' is not present");
}
return CurrencyAmount.of(currency, amount);
}
}