Crate sumup

Crate sumup 

Source
Expand description

§SumUp Rust SDK

Official Rust SDK for the SumUp REST API.

§Quick Start

use sumup::Client;

#[tokio::main]
async fn main() {
    // Create a client (reads SUMUP_API_KEY from environment)
    let client = Client::default();

    // Call an API endpoint
    let checkouts = client
        .checkouts()
        .list(Default::default())
        .await
        .expect("list checkouts request failed");
    println!("found {} checkouts", checkouts.len());
}

§Configuration

§Authentication

Set your API key via environment variable or explicitly:

// From environment variable SUMUP_API_KEY
let client = Client::default();

// Explicit token
let client = Client::default()
    .with_authorization("your_api_key");

§Custom Configuration

use std::time::Duration;

let client = Client::default()
    .with_authorization("your_api_key")
    .with_timeout(Duration::from_secs(30));

§Making API Calls

The SDK organizes endpoints by tags:

// Create a checkout
let checkout = client.checkouts().create(Some(CheckoutCreateRequest {
    checkout_reference: "unique-ref".to_string(),
    amount: 10.0,
    currency: Currency::Eur,
    merchant_code: "MCODE".to_string(),
    description: None,
    return_url: None,
    customer_id: None,
    purpose: None,
    id: None,
    status: None,
    date: None,
    valid_until: None,
    transactions: None,
    redirect_url: None,
}))
.await
.expect("create checkout");
println!("created checkout {}", checkout.id.unwrap_or_default());

// Transactions with query parameters
use sumup::resources::transactions::ListTransactionsParams;
let transactions = client
    .transactions()
    .list_deprecated(ListTransactionsParams {
    limit: Some(10),
    ..Default::default()
})
.await
.expect("list transactions");
let count = transactions.items.as_ref().map_or(0, |items| items.len());
println!("fetched {} historical transactions", count);

§DateTime Support

The SDK supports both chrono (default) and jiff for datetime types:

# Use chrono (default)
[dependencies]
sumup = "0.0.1"

# Use jiff instead
[dependencies]
sumup = { version = "0.0.1", default-features = false, features = ["jiff"] }

§Error Handling

All SDK calls return a SdkResult whose error side is a SdkError. When the SumUp API responds with a non-success status, the SDK builds an SdkError::Api containing an endpoint-specific payload (e.g. a Unauthorized enum variant). Any undocumented status codes fall back to SdkError::Unexpected, which preserves the HTTP status and best-effort body parsing. You can inspect failures like this:

let client = Client::default();
match client.checkouts().list(Default::default()).await {
    Ok(checkouts) => println!("retrieved {} checkouts", checkouts.len()),
    Err(SdkError::Api(body)) => match body {
        ListCheckoutsErrorBody::Unauthorized(details) => eprintln!("unauthorized: {:?}", details),
    },
    Err(SdkError::Unexpected(status, body)) => {
        eprintln!("unexpected {} response: {}", status, body);
    }
    Err(SdkError::Network(err)) => panic!("network error: {}", err),
}

§Features

  • chrono (default): Use chrono for datetime types
  • jiff: Use jiff for datetime types (mutually exclusive with chrono)

§Resources

Re-exports§

pub use client::Client;
pub use error::SdkError;
pub use error::SdkResult;
pub use error::UnknownApiBody;
pub use secret::Password;
pub use version::VERSION;
pub use crate::resources::*;

Modules§

client
datetime
error
SDK error helpers.
resources
secret
version