org.knowm.xchange.coinbase.dto.merchant.CoinbaseOrder Maven / Gradle / Ivy
package org.knowm.xchange.coinbase.dto.merchant;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import org.knowm.xchange.coinbase.dto.CoinbaseBaseResponse;
import org.knowm.xchange.coinbase.dto.marketdata.CoinbaseMoney;
import org.knowm.xchange.coinbase.dto.merchant.CoinbaseButton.CoinbaseButtonInfo;
import org.knowm.xchange.coinbase.dto.serialization.CoinbaseCentsDeserializer;
import org.knowm.xchange.coinbase.dto.serialization.EnumFromStringHelper;
import org.knowm.xchange.coinbase.dto.serialization.EnumLowercaseJsonSerializer;
import org.knowm.xchange.utils.jackson.ISO8601DateDeserializer;
/** @author jamespedwards42 */
public class CoinbaseOrder extends CoinbaseBaseResponse {
@JsonProperty("order")
private CoinbaseOrderInfo order;
private CoinbaseOrder(
@JsonProperty("order") final CoinbaseOrderInfo order,
@JsonProperty("success") final boolean success,
@JsonProperty("errors") final List errors) {
super(success, errors);
this.order = order;
}
public String getId() {
return order.getId();
}
public Date getCreatedAt() {
return order.getCreatedAt();
}
public CoinbaseOrderStatus getStatus() {
return order.getStatus();
}
public CoinbaseMoney getTotalBTC() {
return order.getTotalBTC();
}
public CoinbaseMoney getTotalNative() {
return order.getTotalNative();
}
public String getCustom() {
return order.getCustom();
}
public String getReceiveAddress() {
return order.getReceiveAddress();
}
public CoinbaseButton getButton() {
return order.getButton();
}
public CoinbaseOrderTransaction getTransaction() {
return order.getTransaction();
}
@Override
public String toString() {
return "CoinbaseOrder [order=" + order + "]";
}
@JsonDeserialize(using = CoinbaseOrderStatusDeserializer.class)
@JsonSerialize(using = EnumLowercaseJsonSerializer.class)
public enum CoinbaseOrderStatus {
NEW,
COMPLETED,
CANCELED;
}
static class CoinbaseOrderStatusDeserializer extends JsonDeserializer {
private static final EnumFromStringHelper FROM_STRING_HELPER =
new EnumFromStringHelper<>(CoinbaseOrderStatus.class);
@Override
public CoinbaseOrderStatus deserialize(JsonParser jsonParser, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
String jsonString = node.textValue();
return FROM_STRING_HELPER.fromJsonString(jsonString);
}
}
private static class CoinbaseOrderInfo {
private final String id;
private final Date createdAt;
private final CoinbaseOrderStatus status;
private final CoinbaseMoney totalBTC;
private final CoinbaseMoney totalNative;
private final String custom;
private final String receiveAddress;
private final CoinbaseButton button;
private final CoinbaseOrderTransaction transaction;
private CoinbaseOrderInfo(
@JsonProperty("id") final String id,
@JsonProperty("created_at") @JsonDeserialize(using = ISO8601DateDeserializer.class)
final Date createdAt,
@JsonProperty("status") final CoinbaseOrderStatus status,
@JsonProperty("total_btc") @JsonDeserialize(using = CoinbaseCentsDeserializer.class)
final CoinbaseMoney totalBTC,
@JsonProperty("total_native") @JsonDeserialize(using = CoinbaseCentsDeserializer.class)
final CoinbaseMoney totalNative,
@JsonProperty("custom") final String custom,
@JsonProperty("receive_address") final String receiveAddress,
@JsonProperty("button") final CoinbaseButtonInfo button,
@JsonProperty("transaction") final CoinbaseOrderTransaction transaction) {
this.id = id;
this.createdAt = createdAt;
this.status = status;
this.totalBTC = totalBTC;
this.totalNative = totalNative;
this.custom = custom;
this.receiveAddress = receiveAddress;
this.button = new CoinbaseButton(button);
this.transaction = transaction;
}
public String getId() {
return id;
}
public Date getCreatedAt() {
return createdAt;
}
public CoinbaseOrderStatus getStatus() {
return status;
}
public CoinbaseMoney getTotalBTC() {
return totalBTC;
}
public CoinbaseMoney getTotalNative() {
return totalNative;
}
public String getCustom() {
return custom;
}
public String getReceiveAddress() {
return receiveAddress;
}
public CoinbaseButton getButton() {
return button;
}
public CoinbaseOrderTransaction getTransaction() {
return transaction;
}
@Override
public String toString() {
return "CoinbaseOrderInfo [id="
+ id
+ ", createdAt="
+ createdAt
+ ", status="
+ status
+ ", totalBTC="
+ totalBTC
+ ", totalNative="
+ totalNative
+ ", custom="
+ custom
+ ", receiveAddress="
+ receiveAddress
+ ", button="
+ button
+ ", transaction="
+ transaction
+ "]";
}
}
public static class CoinbaseOrderTransaction {
private final String id;
private final String hash;
private final int confirmations;
private CoinbaseOrderTransaction(
@JsonProperty("id") final String id,
@JsonProperty("hash") final String hash,
@JsonProperty("confirmations") final int confirmations) {
this.id = id;
this.hash = hash;
this.confirmations = confirmations;
}
public String getId() {
return id;
}
public String getHash() {
return hash;
}
public int getConfirmations() {
return confirmations;
}
@Override
public String toString() {
return "CoinbaseOrderTransaction [id="
+ id
+ ", hash="
+ hash
+ ", confirmations="
+ confirmations
+ "]";
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy