class Money implements FxConvertible<Money>, Comparable<Money>, Serializable {

  @FromString
  public static Money parse(String amountStr) {
    ArgChecker.notNull(amountStr, "amountStr");
    List<String> split = Splitter.on(' ').splitToList(amountStr);
    if (split.size() != 2) {
      throw new IllegalArgumentException("Unable to parse amount, invalid format: " + amountStr);
    }
    try {
      Currency cur = Currency.parse(split.get(0));
      return new Money(cur, new BigDecimal(split.get(1)));
    } catch (RuntimeException ex) {
      throw new IllegalArgumentException("Unable to parse amount: " + amountStr, ex);
    }
  }

  private  Money(Currency currency, BigDecimal amount);

}