Skip to main content

Crate pleme_providers

Crate pleme_providers 

Source
Expand description

§pleme-providers

Multi-provider integration library for Pleme platform services.

§Philosophy

This library implements the Strategy Pattern for integrating multiple external providers:

  • Single interface for multiple implementations
  • Runtime provider selection via registry
  • Consistent error handling across providers
  • Capability negotiation

§Use Cases

  • Product Catalog: Multiple dropshipping providers (CJ, EPROLO, Alibaba, etc.)
  • Payment Processing: Multiple payment gateways (Stripe, PayPal, Mercado Pago, PIX)
  • Shipping: Multiple carriers (Correios, FedEx, DHL)
  • Email: Multiple email services (SES, SendGrid, Mailgun)
  • SMS: Multiple SMS providers (Twilio, Vonage)

§Usage

use pleme_providers::{Provider, ProviderRegistry, ProviderCapabilities, ProviderBatch, ProviderError};
use async_trait::async_trait;

// Define your domain-specific item type
#[derive(Clone)]
struct Product {
    id: String,
    name: String,
}

// Implement the Provider trait for your specific provider
struct MyDropshipProvider;

#[async_trait]
impl Provider for MyDropshipProvider {
    type Item = Product;
    type Filter = ();
    type Pagination = ();

    fn provider_id(&self) -> &str { "my-provider" }
    fn provider_name(&self) -> &str { "My Provider" }
    fn capabilities(&self) -> ProviderCapabilities {
        ProviderCapabilities::default()
    }

    async fn fetch_items(
        &self,
        _filter: Self::Filter,
        _pagination: Self::Pagination,
    ) -> Result<ProviderBatch<Self::Item>, ProviderError> {
        Ok(ProviderBatch::empty())
    }

    async fn validate_credentials(&self) -> Result<(), ProviderError> {
        Ok(())
    }
}

// Use the registry to manage multiple providers
let mut registry = ProviderRegistry::new();
registry.register(std::sync::Arc::new(MyDropshipProvider));

let provider = registry.get("my-provider").expect("Provider not found");

Re-exports§

pub use provider::Provider;
pub use registry::ProviderRegistry;
pub use capabilities::ProviderCapabilities;
pub use error::ProviderError;
pub use batch::ProviderBatch;

Modules§

batch
Provider batch results with pagination metadata
capabilities
Provider capabilities and feature flags
error
Provider error types
provider
Generic provider trait for multi-provider integrations
registry
Provider registry for managing multiple provider implementations

Type Aliases§

Result
Result type for provider operations