feat(framework): Add Smithy Annotations for Customers, Mandates (#10191)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
Co-authored-by: likhinbopanna <131246334+likhinbopanna@users.noreply.github.com>
This commit is contained in:
Debarshi Gupta
2025-11-27 15:26:47 +05:30
committed by GitHub
parent 38e3837ac4
commit 2dea0f275e
8 changed files with 471 additions and 13 deletions

View File

@@ -2,16 +2,19 @@ use common_types::primitive_wrappers::CustomerListLimit;
use common_utils::{crypto, custom_serde, id_type, pii, types::Description};
use masking::Secret;
use serde::{Deserialize, Serialize};
use smithy::SmithyModel;
use utoipa::ToSchema;
use crate::payments;
/// The customer details
#[cfg(feature = "v1")]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema)]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct CustomerRequest {
/// The identifier for the customer object. If not provided the customer ID will be autogenerated.
#[schema(value_type = Option<String>, max_length = 64, min_length = 1, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")]
#[smithy(value_type = "Option<String>")]
pub customer_id: Option<id_type::CustomerId>,
/// The identifier for the Merchant Account
#[schema(max_length = 255, example = "y3oqhf46pyzuxjbcn2giaqnb44")]
@@ -19,39 +22,50 @@ pub struct CustomerRequest {
pub merchant_id: id_type::MerchantId,
/// The customer's name
#[schema(max_length = 255, value_type = Option<String>, example = "Jon Test")]
#[smithy(value_type = "Option<String>")]
pub name: Option<Secret<String>>,
/// The customer's email address
#[schema(value_type = Option<String>, max_length = 255, example = "JonTest@test.com")]
#[smithy(value_type = "Option<String>")]
pub email: Option<pii::Email>,
/// The customer's phone number
#[schema(value_type = Option<String>, max_length = 255, example = "9123456789")]
#[smithy(value_type = "Option<String>")]
pub phone: Option<Secret<String>>,
/// An arbitrary string that you can attach to a customer object.
#[schema(max_length = 255, example = "First Customer", value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub description: Option<Description>,
/// The country code for the customer phone number
#[schema(max_length = 255, example = "+65")]
#[smithy(value_type = "Option<String>")]
pub phone_country_code: Option<String>,
/// The address for the customer
#[schema(value_type = Option<AddressDetails>)]
#[smithy(value_type = "Option<AddressDetails>")]
pub address: Option<payments::AddressDetails>,
/// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500
/// characters long. Metadata is useful for storing additional, structured information on an
/// object.
#[schema(value_type = Option<Object>,example = json!({ "city": "NY", "unit": "245" }))]
#[smithy(value_type = "Option<Object>")]
pub metadata: Option<pii::SecretSerdeValue>,
/// Customer's tax registration ID
#[schema(max_length = 255, value_type = Option<String>, example = "123456789")]
#[smithy(value_type = "Option<String>")]
pub tax_registration_id: Option<Secret<String>>,
}
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema)]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types", mixin = true)]
pub struct CustomerListRequest {
/// Offset
#[schema(example = 32)]
#[smithy(value_type = "Option<u32>", http_query = "offset")]
pub offset: Option<u32>,
/// Limit
#[schema(example = 32)]
#[smithy(value_type = "Option<u16>", http_query = "limit")]
pub limit: Option<u16>,
pub customer_id: Option<id_type::CustomerId>,
}
@@ -147,43 +161,55 @@ impl CustomerRequest {
}
#[cfg(feature = "v1")]
#[derive(Debug, Clone, Serialize, ToSchema)]
#[derive(Debug, Clone, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct CustomerResponse {
/// The identifier for the customer object
#[schema(value_type = String, max_length = 64, min_length = 1, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")]
#[smithy(value_type = "String")]
pub customer_id: id_type::CustomerId,
/// The customer's name
#[schema(max_length = 255, value_type = Option<String>, example = "Jon Test")]
#[smithy(value_type = "Option<String>")]
pub name: crypto::OptionalEncryptableName,
/// The customer's email address
#[schema(value_type = Option<String>,max_length = 255, example = "JonTest@test.com")]
#[smithy(value_type = "Option<String>")]
pub email: crypto::OptionalEncryptableEmail,
/// The customer's phone number
#[schema(value_type = Option<String>,max_length = 255, example = "9123456789")]
#[smithy(value_type = "Option<String>")]
pub phone: crypto::OptionalEncryptablePhone,
/// The country code for the customer phone number
#[schema(max_length = 255, example = "+65")]
#[smithy(value_type = "Option<String>")]
pub phone_country_code: Option<String>,
/// An arbitrary string that you can attach to a customer object.
#[schema(max_length = 255, example = "First Customer", value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub description: Option<Description>,
/// The address for the customer
#[schema(value_type = Option<AddressDetails>)]
#[smithy(value_type = "Option<AddressDetails>")]
pub address: Option<payments::AddressDetails>,
/// A timestamp (ISO 8601 code) that determines when the customer was created
#[schema(value_type = PrimitiveDateTime,example = "2023-01-18T11:04:09.922Z")]
#[serde(with = "custom_serde::iso8601")]
#[smithy(value_type = "Option<String>")]
pub created_at: time::PrimitiveDateTime,
/// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500
/// characters long. Metadata is useful for storing additional, structured information on an
/// object.
#[schema(value_type = Option<Object>,example = json!({ "city": "NY", "unit": "245" }))]
#[smithy(value_type = "Option<Object>")]
pub metadata: Option<pii::SecretSerdeValue>,
/// The identifier for the default payment method.
#[schema(max_length = 64, example = "pm_djh2837dwduh890123")]
#[smithy(value_type = "Option<String>")]
pub default_payment_method_id: Option<String>,
/// The customer's tax registration number.
#[schema(max_length = 255, value_type = Option<String>, example = "123456789")]
#[smithy(value_type = "Option<String>")]
pub tax_registration_id: crypto::OptionalEncryptableSecretString,
}
@@ -257,19 +283,24 @@ impl CustomerResponse {
}
#[cfg(feature = "v1")]
#[derive(Debug, Deserialize, Serialize, ToSchema)]
#[derive(Debug, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct CustomerDeleteResponse {
/// The identifier for the customer object
#[schema(value_type = String, max_length = 255, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")]
#[smithy(value_type = "String")]
pub customer_id: id_type::CustomerId,
/// Whether customer was deleted or not
#[schema(example = false)]
#[smithy(value_type = "bool")]
pub customer_deleted: bool,
/// Whether address was deleted or not
#[schema(example = false)]
#[smithy(value_type = "bool")]
pub address_deleted: bool,
/// Whether payment methods deleted or not
#[schema(example = false)]
#[smithy(value_type = "bool")]
pub payment_methods_deleted: bool,
}
@@ -300,7 +331,8 @@ pub struct CustomerDeleteResponse {
/// The identifier for the customer object. If not provided the customer ID will be autogenerated.
#[cfg(feature = "v1")]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema)]
#[derive(Debug, Default, Clone, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct CustomerUpdateRequest {
/// The identifier for the Merchant Account
#[schema(max_length = 255, example = "y3oqhf46pyzuxjbcn2giaqnb44")]
@@ -308,29 +340,37 @@ pub struct CustomerUpdateRequest {
pub merchant_id: id_type::MerchantId,
/// The customer's name
#[schema(max_length = 255, value_type = Option<String>, example = "Jon Test")]
#[smithy(value_type = "Option<String>")]
pub name: Option<Secret<String>>,
/// The customer's email address
#[schema(value_type = Option<String>, max_length = 255, example = "JonTest@test.com")]
#[smithy(value_type = "Option<String>")]
pub email: Option<pii::Email>,
/// The customer's phone number
#[schema(value_type = Option<String>, max_length = 255, example = "9123456789")]
#[smithy(value_type = "Option<String>")]
pub phone: Option<Secret<String>>,
/// An arbitrary string that you can attach to a customer object.
#[schema(max_length = 255, example = "First Customer", value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub description: Option<Description>,
/// The country code for the customer phone number
#[schema(max_length = 255, example = "+65")]
#[smithy(value_type = "Option<String>")]
pub phone_country_code: Option<String>,
/// The address for the customer
#[schema(value_type = Option<AddressDetails>)]
#[smithy(value_type = "Option<AddressDetails>")]
pub address: Option<payments::AddressDetails>,
/// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500
/// characters long. Metadata is useful for storing additional, structured information on an
/// object.
#[schema(value_type = Option<Object>,example = json!({ "city": "NY", "unit": "245" }))]
#[smithy(value_type = "Option<Object>")]
pub metadata: Option<pii::SecretSerdeValue>,
/// Customer's tax registration ID
#[schema(max_length = 255, value_type = Option<String>, example = "123456789")]
#[smithy(value_type = "Option<String>")]
pub tax_registration_id: Option<Secret<String>>,
}

View File

@@ -12,107 +12,144 @@ pub struct MandateId {
pub mandate_id: String,
}
#[derive(Default, Debug, Deserialize, Serialize, ToSchema)]
#[derive(Default, Debug, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct MandateRevokedResponse {
/// The identifier for mandate
#[smithy(value_type = "String")]
pub mandate_id: String,
/// The status for mandates
#[schema(value_type = MandateStatus)]
#[smithy(value_type = "MandateStatus")]
pub status: api_enums::MandateStatus,
/// If there was an error while calling the connectors the code is received here
#[schema(example = "E0001")]
#[smithy(value_type = "Option<String>")]
pub error_code: Option<String>,
/// If there was an error while calling the connector the error message is received here
#[schema(example = "Failed while verifying the card")]
#[smithy(value_type = "Option<String>")]
pub error_message: Option<String>,
}
#[derive(Default, Debug, Deserialize, Serialize, ToSchema, Clone)]
#[derive(Default, Debug, Deserialize, Serialize, ToSchema, Clone, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct MandateResponse {
/// The identifier for mandate
#[smithy(value_type = "String")]
pub mandate_id: String,
/// The status for mandates
#[schema(value_type = MandateStatus)]
#[smithy(value_type = "MandateStatus")]
pub status: api_enums::MandateStatus,
/// The identifier for payment method
#[smithy(value_type = "String")]
pub payment_method_id: String,
/// The payment method
#[smithy(value_type = "String")]
pub payment_method: String,
/// The payment method type
#[smithy(value_type = "Option<String>")]
pub payment_method_type: Option<String>,
/// The card details for mandate
#[smithy(value_type = "Option<MandateCardDetails>")]
pub card: Option<MandateCardDetails>,
/// Details about the customers acceptance
#[schema(value_type = Option<CustomerAcceptance>)]
#[smithy(value_type = "Option<CustomerAcceptance>")]
pub customer_acceptance: Option<common_payments_types::CustomerAcceptance>,
}
#[derive(Default, Debug, Deserialize, Serialize, ToSchema, Clone)]
#[derive(Default, Debug, Deserialize, Serialize, ToSchema, Clone, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct MandateCardDetails {
/// The last 4 digits of card
#[smithy(value_type = "Option<String>")]
pub last4_digits: Option<String>,
/// The expiry month of card
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub card_exp_month: Option<Secret<String>>,
/// The expiry year of card
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub card_exp_year: Option<Secret<String>>,
/// The card holder name
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub card_holder_name: Option<Secret<String>>,
/// The token from card locker
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub card_token: Option<Secret<String>>,
/// The card scheme network for the particular card
#[smithy(value_type = "Option<String>")]
pub scheme: Option<String>,
/// The country code in in which the card was issued
#[smithy(value_type = "Option<String>")]
pub issuer_country: Option<String>,
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
/// A unique identifier alias to identify a particular card
pub card_fingerprint: Option<Secret<String>>,
/// The first 6 digits of card
#[smithy(value_type = "Option<String>")]
pub card_isin: Option<String>,
/// The bank that issued the card
#[smithy(value_type = "Option<String>")]
pub card_issuer: Option<String>,
/// The network that facilitates payment card transactions
#[schema(value_type = Option<CardNetwork>)]
#[smithy(value_type = "Option<CardNetwork>")]
pub card_network: Option<api_enums::CardNetwork>,
/// The type of the payment card
#[smithy(value_type = "Option<String>")]
pub card_type: Option<String>,
/// The nick_name of the card holder
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub nick_name: Option<Secret<String>>,
}
#[derive(Clone, Debug, Deserialize, ToSchema, Serialize)]
#[derive(Clone, Debug, Deserialize, ToSchema, Serialize, SmithyModel)]
#[serde(deny_unknown_fields)]
#[smithy(namespace = "com.hyperswitch.smithy.types", mixin = true)]
pub struct MandateListConstraints {
/// limit on the number of objects to return
#[smithy(value_type = "Option<i64>", http_query = "limit")]
pub limit: Option<i64>,
/// offset on the number of objects to return
#[smithy(value_type = "Option<i64>", http_query = "offset")]
pub offset: Option<i64>,
/// status of the mandate
#[smithy(value_type = "Option<MandateStatus>", http_query = "mandate_status")]
pub mandate_status: Option<api_enums::MandateStatus>,
/// connector linked to mandate
#[smithy(value_type = "Option<String>", http_query = "connector")]
pub connector: Option<String>,
/// The time at which mandate is created
#[schema(example = "2022-09-10T10:11:12Z")]
#[smithy(value_type = "Option<String>", http_query = "created_time")]
pub created_time: Option<PrimitiveDateTime>,
/// Time less than the mandate created time
#[schema(example = "2022-09-10T10:11:12Z")]
#[serde(rename = "created_time.lt")]
#[smithy(value_type = "Option<String>", http_query = "created_time.lt")]
pub created_time_lt: Option<PrimitiveDateTime>,
/// Time greater than the mandate created time
#[schema(example = "2022-09-10T10:11:12Z")]
#[serde(rename = "created_time.gt")]
#[smithy(value_type = "Option<String>", http_query = "created_time.gt")]
pub created_time_gt: Option<PrimitiveDateTime>,
/// Time less than or equals to the mandate created time
#[schema(example = "2022-09-10T10:11:12Z")]
#[serde(rename = "created_time.lte")]
#[smithy(value_type = "Option<String>", http_query = "created_time.lte")]
pub created_time_lte: Option<PrimitiveDateTime>,
/// Time greater than or equals to the mandate created time
#[schema(example = "2022-09-10T10:11:12Z")]
#[serde(rename = "created_time.gte")]
#[smithy(value_type = "Option<String>", http_query = "created_time.gte")]
pub created_time_gte: Option<PrimitiveDateTime>,
}

View File

@@ -8587,11 +8587,16 @@ pub struct PaymentsAggregateResponse {
pub status_with_count: HashMap<enums::IntentStatus, i64>,
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]
#[derive(
Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema, SmithyModel,
)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct AmountFilter {
/// The start amount to filter list of transactions which are greater than or equal to the start amount
#[smithy(value_type = "Option<i64>")]
pub start_amount: Option<i64>,
/// The end amount to filter list of transactions which are less than or equal to the end amount
#[smithy(value_type = "Option<i64>")]
pub end_amount: Option<i64>,
}

View File

@@ -429,35 +429,46 @@ pub struct RefundErrorDetails {
}
#[cfg(feature = "v1")]
#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, ToSchema)]
#[derive(Debug, Clone, Eq, PartialEq, Deserialize, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct RefundListRequest {
/// The identifier for the payment
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub payment_id: Option<common_utils::id_type::PaymentId>,
/// The identifier for the refund
#[smithy(value_type = "Option<String>")]
pub refund_id: Option<String>,
/// The identifier for business profile
#[schema(value_type = Option<String>)]
#[smithy(value_type = "Option<String>")]
pub profile_id: Option<common_utils::id_type::ProfileId>,
/// Limit on the number of objects to return
#[smithy(value_type = "Option<i64>")]
pub limit: Option<i64>,
/// The starting point within a list of objects
#[smithy(value_type = "Option<i64>")]
pub offset: Option<i64>,
/// The time range for which objects are needed. TimeRange has two fields start_time and end_time from which objects can be filtered as per required scenarios (created_at, time less than, greater than etc)
#[serde(flatten)]
pub time_range: Option<TimeRange>,
/// The amount to filter reufnds list. Amount takes two option fields start_amount and end_amount from which objects can be filtered as per required scenarios (less_than, greater_than, equal_to and range)
#[smithy(value_type = "Option<AmountFilter>")]
pub amount_filter: Option<AmountFilter>,
/// The list of connectors to filter refunds list
#[smithy(value_type = "Option<Vec<String>>")]
pub connector: Option<Vec<String>>,
/// The list of merchant connector ids to filter the refunds list for selected label
#[schema(value_type = Option<Vec<String>>)]
#[smithy(value_type = "Option<Vec<String>>")]
pub merchant_connector_id: Option<Vec<common_utils::id_type::MerchantConnectorAccountId>>,
/// The list of currencies to filter refunds list
#[schema(value_type = Option<Vec<Currency>>)]
#[smithy(value_type = "Option<Vec<Currency>>")]
pub currency: Option<Vec<enums::Currency>>,
/// The list of refund statuses to filter refunds list
#[schema(value_type = Option<Vec<RefundStatus>>)]
#[smithy(value_type = "Option<Vec<RefundStatus>>")]
pub refund_status: Option<Vec<enums::RefundStatus>>,
}
#[cfg(feature = "v2")]
@@ -490,13 +501,17 @@ pub struct RefundListRequest {
#[schema(value_type = Option<Vec<RefundStatus>>)]
pub refund_status: Option<Vec<enums::RefundStatus>>,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, ToSchema)]
#[derive(Debug, Clone, Eq, PartialEq, Serialize, ToSchema, SmithyModel)]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub struct RefundListResponse {
/// The number of refunds included in the list
#[smithy(value_type = "usize")]
pub count: usize,
/// The total number of refunds in the list
#[smithy(value_type = "i64")]
pub total_count: i64,
/// The List of refund response object
#[smithy(value_type = "Vec<RefundResponse>")]
pub data: Vec<RefundResponse>,
}

View File

@@ -2796,6 +2796,7 @@ pub enum FrmTransactionType {
Default,
serde::Deserialize,
serde::Serialize,
SmithyModel,
strum::Display,
strum::EnumIter,
strum::EnumString,
@@ -2804,6 +2805,7 @@ pub enum FrmTransactionType {
#[router_derive::diesel_enum(storage_type = "db_enum")]
#[serde(rename_all = "snake_case")]
#[strum(serialize_all = "snake_case")]
#[smithy(namespace = "com.hyperswitch.smithy.types")]
pub enum MandateStatus {
#[default]
Active,

View File

@@ -338,7 +338,10 @@ fn scan_rust_file(
let enabled_features = feature_resolver.get_enabled_crate_features(crate_name);
// Special handling for items that have multiple definitions with different derives
if item_name == "FeatureMetadata" {
if item_name == "FeatureMetadata"
|| item_name == "CustomerRequest"
|| item_name == "CustomerUpdateRequest"
{
// FeatureMetadata only has SmithyModel in v1 version
if !enabled_features.contains("v1") {
continue;

View File

@@ -0,0 +1,338 @@
$version: "2"
namespace com.hyperswitch
use com.hyperswitch.smithy.types#PaymentsRequest
use com.hyperswitch.smithy.types#PaymentsResponse
use com.hyperswitch.smithy.types#RefundRequest
use com.hyperswitch.smithy.types#RefundResponse
use com.hyperswitch.smithy.types#RefundUpdateRequest
use com.hyperswitch.smithy.types#RefundListRequest
use com.hyperswitch.smithy.types#RefundListResponse
use com.hyperswitch.smithy.types#PaymentsCaptureRequest
use com.hyperswitch.smithy.types#PaymentsCancelRequest
use com.hyperswitch.smithy.types#CustomerRequest
use com.hyperswitch.smithy.types#CustomerResponse
use com.hyperswitch.smithy.types#CustomerUpdateRequest
use com.hyperswitch.smithy.types#CustomerDeleteResponse
use com.hyperswitch.smithy.types#CustomerListRequest
use com.hyperswitch.smithy.types#MandateRevokedResponse
use com.hyperswitch.smithy.types#MandateResponse
use com.hyperswitch.smithy.types#MandateListConstraints
use aws.protocols#restJson1
/// The Hyperswitch API.
@restJson1
@aws.api#service(
sdkId: "hyperswitch",
arnNamespace: "hyperswitch",
cloudFormationName: "Hyperswitch",
endpointPrefix: "api"
)
service Hyperswitch {
version: "2024-07-31",
operations: [PaymentsCreate, PaymentsConfirm, PaymentsUpdate, PaymentsRetrieve, PaymentsCapture, PaymentsCancel, RefundsCreate, RefundsRetrieve, RefundsUpdate, RefundsList, CustomersCreate, CustomersRetrieve, CustomersUpdate, CustomersDelete, CustomersList, MandatesRevoke, MandatesRetrieve, MandatesList]
}
/// Structure for creating a payment
structure PaymentsCreateRequest {
/// The payment request details
@required
@httpPayload
payload: PaymentsRequest
}
@documentation("Create a payment with the specified details.")
@http(method: "POST", uri: "/payments")
operation PaymentsCreate {
input: PaymentsCreateRequest,
output: PaymentsResponse,
}
/// Structure for confirming a payment
structure PaymentsConfirmRequest {
/// The unique identifier for the payment to confirm
@required
@httpLabel
payment_id: smithy.api#String
/// The payment confirmation request details
@required
@httpPayload
payload: PaymentsRequest
}
@documentation("Confirm a payment using the payment_id.")
@http(method: "POST", uri: "/payments/{payment_id}/confirm")
operation PaymentsConfirm {
input: PaymentsConfirmRequest,
output: PaymentsResponse,
}
/// Structure for updating a payment
structure PaymentsUpdateRequest {
/// The unique identifier for the payment to update
@required
@httpLabel
payment_id: smithy.api#String
/// The payment update request details
@required
@httpPayload
payload: PaymentsRequest
}
@documentation("Update a payment using the payment_id.")
@http(method: "POST", uri: "/payments/{payment_id}")
operation PaymentsUpdate {
input: PaymentsUpdateRequest,
output: PaymentsResponse,
}
structure PaymentsRetrieveRequest {
/// The unique identifier for the payment to retrieve
@required
@httpLabel
payment_id: smithy.api#String
}
@documentation("Retrieve a payment using the payment_id.")
@http(method: "GET", uri: "/payments/{payment_id}")
operation PaymentsRetrieve {
input: PaymentsRetrieveRequest,
output: PaymentsResponse,
}
/// Input structure for capturing a payment
structure PaymentsCaptureRequestInput {
/// The unique identifier for the payment to capture
@required
@httpLabel
payment_id: smithy.api#String
/// The capture request details
@required
@httpPayload
payload: PaymentsCaptureRequest
}
@documentation("Capture a payment that has been previously authorized.")
@http(method: "POST", uri: "/payments/{payment_id}/capture")
operation PaymentsCapture {
input: PaymentsCaptureRequestInput,
output: PaymentsResponse,
}
/// Input structure for canceling a payment
structure PaymentsCancelRequestInput {
/// The unique identifier for the payment to cancel
@required
@httpLabel
payment_id: smithy.api#String
/// The cancel request details
@required
@httpPayload
payload: PaymentsCancelRequest
}
@documentation("Cancel a payment using the payment_id.")
@http(method: "POST", uri: "/payments/{payment_id}/cancel")
operation PaymentsCancel {
input: PaymentsCancelRequestInput,
output: PaymentsResponse,
}
/// Structure for creating a refund
structure RefundsCreateRequest {
/// The refund request details
@required
@httpPayload
payload: RefundRequest
}
@documentation("Create a refund for a payment.")
@http(method: "POST", uri: "/refunds")
operation RefundsCreate {
input: RefundsCreateRequest,
output: RefundResponse,
}
structure RefundsRetrieveRequest {
/// The unique identifier for the refund to retrieve
@required
@httpLabel
id: smithy.api#String
}
@documentation("Retrieve a refund using the refund_id.")
@http(method: "GET", uri: "/refunds/{id}")
operation RefundsRetrieve {
input: RefundsRetrieveRequest,
output: RefundResponse,
}
/// Structure for updating a refund
structure RefundsUpdateRequest {
/// The unique identifier for the refund to update
@required
@httpLabel
id: smithy.api#String
/// The refund update request details
@required
@httpPayload
payload: RefundUpdateRequest
}
@documentation("Update a refund using the refund_id.")
@http(method: "POST", uri: "/refunds/{id}")
operation RefundsUpdate {
input: RefundsUpdateRequest,
output: RefundResponse,
}
/// Structure for listing refunds
structure RefundsListRequestInput {
/// The refund list request details
@required
@httpPayload
payload: RefundListRequest
}
@documentation("Retrieve a list of refunds.")
@http(method: "POST", uri: "/refunds/list")
operation RefundsList {
input: RefundsListRequestInput,
output: RefundListResponse,
}
/// Structure for creating a customer
structure CustomersCreateRequest {
/// The customer request details
@required
@httpPayload
payload: CustomerRequest
}
@documentation("Create a customer with the specified details.")
@http(method: "POST", uri: "/customers")
operation CustomersCreate {
input: CustomersCreateRequest,
output: CustomerResponse,
}
/// Structure for retrieving a customer
structure CustomersRetrieveRequest {
/// The unique identifier for the customer to retrieve
@required
@httpLabel
customer_id: smithy.api#String
}
@documentation("Retrieve a customer using the customer_id.")
@http(method: "GET", uri: "/customers/{customer_id}")
operation CustomersRetrieve {
input: CustomersRetrieveRequest,
output: CustomerResponse,
}
/// Structure for updating a customer
structure CustomersUpdateRequest {
/// The unique identifier for the customer to update
@required
@httpLabel
customer_id: smithy.api#String
/// The customer update request details
@required
@httpPayload
payload: CustomerUpdateRequest
}
@documentation("Update a customer using the customer_id.")
@http(method: "POST", uri: "/customers/{customer_id}")
operation CustomersUpdate {
input: CustomersUpdateRequest,
output: CustomerResponse,
}
/// Structure for deleting a customer
structure CustomersDeleteRequest {
/// The unique identifier for the customer to delete
@required
@httpLabel
customer_id: smithy.api#String
}
@documentation("Delete a customer using the customer_id.")
@http(method: "DELETE", uri: "/customers/{customer_id}")
operation CustomersDelete {
input: CustomersDeleteRequest,
output: CustomerDeleteResponse,
}
list CustomerResponseList {
member: CustomerResponse
}
structure CustomersListRequestInput with [CustomerListRequest] {
}
@documentation("Retrieve a list of customers.")
@http(method: "GET", uri: "/customers/list")
operation CustomersList {
input: CustomersListRequestInput,
output:= {
@httpPayload
customers_list: smithy.api#Document
},
}
/// Structure for revoking a mandate
structure MandatesRevokeRequest {
/// The unique identifier for the mandate to revoke
@required
@httpLabel
id: smithy.api#String
}
@documentation("Revoke a mandate using the mandate_id.")
@http(method: "POST", uri: "/mandates/revoke/{id}")
operation MandatesRevoke {
input: MandatesRevokeRequest,
output: MandateRevokedResponse,
}
/// Structure for retrieving a mandate
structure MandatesRetrieveRequest {
/// The unique identifier for the mandate to retrieve
@required
@httpLabel
id: smithy.api#String
}
@documentation("Retrieve a mandate using the mandate_id.")
@http(method: "GET", uri: "/mandates/{id}")
operation MandatesRetrieve {
input: MandatesRetrieveRequest,
output: MandateResponse,
}
list MandateResponseList {
member: MandateResponse
}
structure MandatesListRequestInput with [MandateListConstraints] {
}
@documentation("Retrieve a list of mandates.")
@http(method: "GET", uri: "/mandates/list")
operation MandatesList {
input: MandatesListRequestInput,
output:= {
@httpPayload
mandates_list: smithy.api#Document
},
}

18
smithy/smithy-build.json Normal file
View File

@@ -0,0 +1,18 @@
{
"version": "1.0",
"sources": ["models/"],
"outputDirectory": "openapi",
"maven": {
"dependencies": [
"software.amazon.smithy:smithy-openapi:1.63.0",
"software.amazon.smithy:smithy-aws-traits:1.63.0"
]
},
"plugins": {
"openapi": {
"service": "com.hyperswitch#Hyperswitch",
"protocol": "aws.protocols#restJson1",
"version": "3.1.0"
}
}
}