public enum PrimerPaymentHandling { case auto // Primer handles the full payment flow case manual // Primer returns a token for server-side processing}
public enum PrimerCheckoutState { case initializing case ready(totalAmount: Int, currencyCode: String) case success(PaymentResult) case dismissed case failure(PrimerError)}
public struct CheckoutPaymentMethod { let id: String let type: String // e.g., "PAYMENT_CARD", "PAYPAL" let name: String // Display name let icon: UIImage? let metadata: [String: Any]? let surcharge: Int? // Minor units let hasUnknownSurcharge: Bool let formattedSurcharge: String? let backgroundColor: UIColor?}
public struct CardFormConfiguration: Equatable { let cardFields: [PrimerInputElementType] let billingFields: [PrimerInputElementType] let requiresBillingAddress: Bool var allFields: [PrimerInputElementType]}
public struct FormData: Equatable { subscript(fieldType: PrimerInputElementType) -> String { get set } var dictionary: [PrimerInputElementType: String]}
Tracks validation state for individual card form fields. Used with updateValidationState(_:isValid:) on DefaultCardFormScope when providing custom field components.
public struct FieldValidationStates: Equatable { // Card fields public var cardNumber: Bool public var cvv: Bool public var expiry: Bool public var cardholderName: Bool // Billing address fields public var postalCode: Bool public var countryCode: Bool public var city: Bool public var state: Bool public var addressLine1: Bool public var addressLine2: Bool public var firstName: Bool public var lastName: Bool public var email: Bool public var phoneNumber: Bool}
All fields default to false and become true when validation passes. Use KeyPaths to reference fields:
let cardScope = checkoutScope.getPaymentMethodScope(DefaultCardFormScope.self)// Report validation from your custom componentcardScope?.updateValidationState(\.cvv, isValid: true)cardScope?.updateValidationState(\.cardNumber, isValid: false)
Used by PrimerFormRedirectScope for form-based redirect payment methods.
public struct FormFieldState: Equatable, Identifiable { public enum FieldType: String, Equatable, Sendable { case otpCode // BLIK 6-digit code case phoneNumber // MBWay phone number } public enum KeyboardType: Equatable, Sendable { case numberPad case phonePad case `default` } var id: String { fieldType.rawValue } let fieldType: FieldType var value: String var isValid: Bool var errorMessage: String? let placeholder: String let label: String let helperText: String? let keyboardType: KeyboardType let maxLength: Int? var countryCodePrefix: String? var dialCode: String?}