tideway 0.7.17

A batteries-included Rust web framework built on Axum for building SaaS applications quickly
Documentation
//! Billing module for Stripe-based subscriptions.
//!
//! Provides subscription management, seat handling, and feature entitlements
//! for SaaS applications using Stripe.
//!
//! # Features
//!
//! - `billing` - Enables Stripe integration
//!
//! # Example
//!
//! ```rust,ignore
//! use tideway::billing::{
//!     BillingManager, BillingConfig, Plans, CheckoutRequest,
//! };
//!
//! // Configure plans
//! let plans = Plans::builder()
//!     .plan("starter")
//!         .stripe_price("price_starter")
//!         .extra_seat_price("price_seat")
//!         .included_seats(3)
//!         .features(["reports"])
//!         .trial_days(14)
//!         .done()?
//!     .plan("pro")
//!         .stripe_price("price_pro")
//!         .extra_seat_price("price_seat")
//!         .included_seats(5)
//!         .features(["reports", "api", "priority_support"])
//!         .done()?
//!     .build()?;
//!
//! // Create manager
//! let billing = BillingManager::new(store, config, plans);
//!
//! // Create checkout session
//! let session = billing.create_checkout_session(CheckoutRequest {
//!     billable_id: org.id.to_string(),
//!     plan_id: "starter".to_string(),
//!     success_url: "https://app.example.com/success".to_string(),
//!     cancel_url: "https://app.example.com/cancel".to_string(),
//!     ..Default::default()
//! }).await?;
//!
//! // Check entitlements
//! if !billing.check_feature(&org.id, "api").await? {
//!     return Err(ApiError::UpgradeRequired);
//! }
//! ```

pub mod audit;
pub mod checkout;
pub mod client;
pub mod customer;
pub mod entitlements;
pub mod error;
pub mod invoice;
pub mod live_client;
pub mod payment;
pub mod plans;
pub mod portal;
pub mod refund;
#[cfg(feature = "billing-seaorm")]
pub mod sea_orm_store;
pub mod seats;
pub mod storage;
pub mod subscription;
pub mod usage;
pub mod validation;
pub mod webhook;

// Plan exports
pub use plans::{
    LimitCheckResult, PlanBuilder, PlanChangeType, PlanComparison, PlanConfig, PlanDowngradeError,
    PlanLimits, Plans, PlansBuilder, can_downgrade, compare_plans,
};

// Storage exports
pub use storage::{
    BillableEntity, BillingStore, CachedPlanStore, PlanInterval, PlanStore, StoredPlan,
    StoredSubscription, SubscriptionStatus,
};

// Customer exports
pub use customer::{
    CreateCustomerRequest, CustomerManager, CustomerMetadata, StripeClient, UpdateCustomerRequest,
};

// Subscription exports
pub use subscription::{
    ProrationBehavior, ReconcileDifference, ReconcileResult, StripeSubscriptionClient,
    StripeSubscriptionData, Subscription, SubscriptionManager, SubscriptionMetadata,
    UpdateSubscriptionRequest,
};

// Checkout exports
pub use checkout::{
    CheckoutConfig, CheckoutLineItem, CheckoutManager, CheckoutMetadata, CheckoutMode,
    CheckoutRequest, CheckoutSession, CreateCheckoutSessionRequest, PaymentMethodCollection,
    SeatCheckoutRequest, StripeCheckoutClient,
};

// Portal exports
pub use portal::{
    CreatePortalSessionRequest, PortalConfig, PortalFlow, PortalManager, PortalSession,
    StripePortalClient,
};

// Webhook exports
pub use webhook::{WebhookEvent, WebhookEventData, WebhookHandler, WebhookOutcome};

// Invoice exports
pub use invoice::{
    CachedInvoiceManager, Invoice, InvoiceConfig, InvoiceLineItem, InvoiceList, InvoiceListParams,
    InvoiceManager, InvoiceOperations, InvoiceStatus, InvoiceStatusParseError, StripeInvoiceClient,
};

// Seats exports
pub use seats::{SeatChangeResult, SeatInfo, SeatManager};

// Usage exports
pub use usage::{
    StripeUsageClient, UsageAction, UsageCheckResult, UsageItemSummary, UsageManager, UsageRecord,
    UsageRecordResult, UsageRecordSummary, UsageSummary, UsageThreshold, UsageTracker, check_usage,
};

// Payment exports
pub use payment::{
    PaymentMethod, PaymentMethodList, PaymentMethodManager, StripePaymentMethodClient,
};

// Refund exports
pub use refund::{
    CreateRefundRequest, Refund, RefundManager, RefundReason, RefundStatus, SecureRefundManager,
    StripeRefundClient,
};

// Entitlements exports
pub use entitlements::{
    CachedEntitlementsManager, EntitlementLimits, Entitlements, EntitlementsManager,
    FeatureCheckResult, require_feature, require_seat,
};

// Audit exports
pub use audit::{BillingAuditEvent, BillingAuditLogger, NoOpAuditLogger, TracingAuditLogger};

// Error exports
pub use error::BillingError;

// Client exports
pub use client::FullStripeClient;

// Live client exports (production Stripe client)
pub use live_client::{
    CircuitBreaker, CircuitBreakerConfig, CircuitState, InvalidApiKeyError, LiveStripeClient,
    LiveStripeClientConfig,
};

// SeaORM storage exports
#[cfg(feature = "billing-seaorm")]
pub use sea_orm_store::SeaOrmBillingStore;

// Validation exports
pub use validation::{
    StripePrice, StripePriceValidator, validate_billable_id, validate_plan, validate_plan_id,
    validate_plan_with_stripe,
};

#[cfg(any(test, feature = "test-billing"))]
pub use validation::test::MockPriceValidator;

// Test exports
#[cfg(any(test, feature = "test-billing"))]
pub use storage::test::InMemoryBillingStore;

#[cfg(any(test, feature = "test-billing"))]
pub use customer::test::MockStripeClient;

#[cfg(any(test, feature = "test-billing"))]
pub use subscription::test::MockStripeSubscriptionClient;

#[cfg(any(test, feature = "test-billing"))]
pub use checkout::test::{MockFullStripeClient, MockStripeCheckoutClient};

#[cfg(any(test, feature = "test-billing"))]
pub use portal::test::MockStripePortalClient;

#[cfg(any(test, feature = "test-billing"))]
pub use invoice::test::MockStripeInvoiceClient;

#[cfg(any(test, feature = "test-billing"))]
pub use payment::test::MockStripePaymentMethodClient;

#[cfg(any(test, feature = "test-billing"))]
pub use refund::test::MockStripeRefundClient;

#[cfg(any(test, feature = "test-billing"))]
pub use usage::test::MockStripeUsageClient;

#[cfg(any(test, feature = "test-billing"))]
pub use client::test::{ComprehensiveMockStripeClient, FullMockStripeClient};