#pragma once
#if ENABLE(APPLE_PAY)
#include "PaymentContact.h"
#include <wtf/Optional.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class PaymentRequest {
public:
WEBCORE_EXPORT PaymentRequest();
WEBCORE_EXPORT ~PaymentRequest();
const String& countryCode() const { return m_countryCode; }
void setCountryCode(const String& countryCode) { m_countryCode = countryCode; }
const String& currencyCode() const { return m_currencyCode; }
void setCurrencyCode(const String& currencyCode) { m_currencyCode = currencyCode; }
struct ContactFields {
bool postalAddress { false };
bool phone { false };
bool email { false };
bool name { false };
};
const ContactFields& requiredBillingContactFields() const { return m_requiredBillingContactFields; }
void setRequiredBillingContactFields(const ContactFields& requiredBillingContactFields) { m_requiredBillingContactFields = requiredBillingContactFields; }
const PaymentContact& billingContact() const { return m_billingContact; }
void setBillingContact(const PaymentContact& billingContact) { m_billingContact = billingContact; }
const ContactFields& requiredShippingContactFields() const { return m_requiredShippingContactFields; }
void setRequiredShippingContactFields(const ContactFields& requiredShippingContactFields) { m_requiredShippingContactFields = requiredShippingContactFields; }
const PaymentContact& shippingContact() const { return m_shippingContact; }
void setShippingContact(const PaymentContact& shippingContact) { m_shippingContact = shippingContact; }
static bool isValidSupportedNetwork(unsigned version, const String&);
const Vector<String>& supportedNetworks() const { return m_supportedNetworks; }
void setSupportedNetworks(const Vector<String>& supportedNetworks) { m_supportedNetworks = supportedNetworks; }
struct MerchantCapabilities {
bool supports3DS { false };
bool supportsEMV { false };
bool supportsCredit { false };
bool supportsDebit { false };
};
const MerchantCapabilities& merchantCapabilities() const { return m_merchantCapabilities; }
void setMerchantCapabilities(const MerchantCapabilities& merchantCapabilities) { m_merchantCapabilities = merchantCapabilities; }
struct LineItem {
enum class Type {
Pending,
Final,
} type { Type::Final };
std::optional<int64_t> amount;
String label;
};
enum class ShippingType {
Shipping,
Delivery,
StorePickup,
ServicePickup,
};
ShippingType shippingType() const { return m_shippingType; }
void setShippingType(ShippingType shippingType) { m_shippingType = shippingType; }
struct ShippingMethod {
String label;
String detail;
int64_t amount;
String identifier;
};
const Vector<ShippingMethod>& shippingMethods() const { return m_shippingMethods; }
void setShippingMethods(const Vector<ShippingMethod>& shippingMethods) { m_shippingMethods = shippingMethods; }
const Vector<LineItem>& lineItems() const { return m_lineItems; }
void setLineItems(const Vector<LineItem>& lineItems) { m_lineItems = lineItems; }
const LineItem& total() const { return m_total; };
void setTotal(const LineItem& total) { m_total = total; }
struct TotalAndLineItems {
PaymentRequest::LineItem total;
Vector<PaymentRequest::LineItem> lineItems;
};
const String& applicationData() const { return m_applicationData; }
void setApplicationData(const String& applicationData) { m_applicationData = applicationData; }
private:
String m_countryCode;
String m_currencyCode;
ContactFields m_requiredBillingContactFields;
PaymentContact m_billingContact;
ContactFields m_requiredShippingContactFields;
PaymentContact m_shippingContact;
Vector<String> m_supportedNetworks;
MerchantCapabilities m_merchantCapabilities;
ShippingType m_shippingType { ShippingType::Shipping };
Vector<ShippingMethod> m_shippingMethods;
Vector<LineItem> m_lineItems;
LineItem m_total;
String m_applicationData;
};
}
#endif