Map<String, dynamic> toJson() { return { 'value': value, 'currency': currency.toJson(), 'metadata': metadata, }..removeWhere((key, value) => value == null); }