stateset_core/lib.rs
1#![deny(unsafe_code)]
2#![cfg_attr(not(test), deny(clippy::unwrap_used))]
3#![cfg_attr(not(test), warn(unused_crate_dependencies))]
4#![cfg_attr(docsrs, feature(doc_cfg))]
5#![doc(
6 html_logo_url = "https://raw.githubusercontent.com/stateset/stateset-icommerce/main/assets/stateset.png",
7 html_favicon_url = "https://raw.githubusercontent.com/stateset/stateset-icommerce/main/assets/favicon.ico",
8 issue_tracker_base_url = "https://github.com/stateset/stateset-icommerce/issues/"
9)]
10
11//! # StateSet Core
12//!
13//! Pure domain models and business logic for commerce operations.
14//! This crate has no I/O dependencies - just data structures and validation.
15//!
16//! ## Overview
17//!
18//! `stateset-core` provides the foundational types for the StateSet iCommerce platform:
19//!
20//! - **Domain Models**: Strongly-typed structs for all commerce entities
21//! - **Repository Traits**: Abstract interfaces for data access
22//! - **Error Types**: Comprehensive error handling with categorization
23//! - **Validation**: Composable validation builders and traits
24//! - **Events**: Domain event types for event-driven architectures
25//!
26//! ## Core Domains
27//!
28//! | Domain | Description |
29//! |--------|-------------|
30//! | **Orders** | Order management with line items, status tracking |
31//! | **Inventory** | Stock tracking, reservations, adjustments |
32//! | **Customers** | Customer profiles, addresses, contact info |
33//! | **Products** | Product catalog with variants, pricing |
34//! | **Returns** | Return processing, refunds, RMA |
35//! | **Manufacturing** | Bill of Materials (BOM), Work Orders |
36//! | **Shipments** | Shipping, tracking, carrier integration |
37//! | **Payments** | Payment processing, refunds |
38//! | **Subscriptions** | Recurring billing, subscription plans |
39//! | **Promotions** | Discounts, coupons, promotional campaigns |
40//! | **Tax** | Multi-jurisdiction tax calculation |
41//! | **Currency** | Multi-currency support, exchange rates |
42//!
43//! ## Error Handling
44//!
45//! All operations return `Result<T, CommerceError>`. Errors can be categorized:
46//!
47//! ```rust
48//! use stateset_core::CommerceError;
49//!
50//! fn handle_error(err: &CommerceError) {
51//! if err.is_not_found() {
52//! // Handle not found errors (404)
53//! } else if err.is_validation() {
54//! // Handle validation errors (400)
55//! } else if err.is_conflict() {
56//! // Handle conflict errors (409)
57//! } else if err.is_database() {
58//! // Handle database errors (500)
59//! } else if err.is_retryable() {
60//! // Retry the operation
61//! }
62//! }
63//! ```
64//!
65//! ## Validation
66//!
67//! Use `ValidationBuilder` for composable validations:
68//!
69//! ```rust
70//! use stateset_core::{ValidationBuilder, Result};
71//!
72//! fn validate_order(email: &str, quantity: i32) -> Result<()> {
73//! ValidationBuilder::new()
74//! .email("email", email)
75//! .positive_i32("quantity", quantity)
76//! .build()
77//! }
78//! ```
79//!
80//! Or implement the `Validate` trait for domain models:
81//!
82//! ```rust
83//! use stateset_core::{Validate, ValidationBuilder, Result};
84//!
85//! struct OrderInput {
86//! email: String,
87//! quantity: i32,
88//! }
89//!
90//! impl Validate for OrderInput {
91//! fn validate(&self) -> Result<()> {
92//! ValidationBuilder::new()
93//! .email("email", &self.email)
94//! .positive_i32("quantity", self.quantity)
95//! .build()
96//! }
97//! }
98//!
99//! // Use with method chaining
100//! // let input = OrderInput { ... }.validated()?;
101//! ```
102//!
103//! ## Example
104//!
105//! ```rust
106//! use stateset_core::prelude::*;
107//! use rust_decimal_macros::dec;
108//!
109//! // Create an order input
110//! let order = CreateOrder {
111//! customer_id: CustomerId::new(),
112//! items: vec![CreateOrderItem {
113//! sku: "SKU-001".to_string(),
114//! name: "Widget".to_string(),
115//! quantity: 2,
116//! unit_price: dec!(29.99),
117//! ..Default::default()
118//! }],
119//! ..Default::default()
120//! };
121//! ```
122//!
123//! ## Feature Flags
124//!
125//! - `embeddings` - Enable vector search via embedding services
126//! - `metrics` - Enable Prometheus metrics support
127
128// This crate has extensive surface area; enforcing `missing_docs` across the whole
129// API makes `-D warnings` builds impractical. We keep the option to enable it for
130// docs builds instead.
131#![cfg_attr(docsrs, warn(missing_docs))]
132
133pub mod errors;
134pub mod events;
135pub mod models;
136pub mod traits;
137pub mod validation;
138
139#[cfg(feature = "embeddings")]
140pub mod services;
141
142#[cfg(feature = "metrics")]
143pub mod metrics;
144
145pub use errors::*;
146pub use events::*;
147pub use models::*;
148pub use traits::*;
149pub use validation::*;
150
151#[cfg(feature = "embeddings")]
152pub use services::*;
153
154// Re-export strongly-typed primitives so downstream crates can import from
155// `stateset_core` directly without depending on `stateset-primitives`.
156pub use stateset_primitives::{
157 ActivityLogId, AgentId, CartId, ChannelId, CompanyAddressId, CompanyId, ContactId, CreditId,
158 CurrencyCode, CustomerId, EdiDocumentId, FraudRuleId, FulfillmentId, GiftCardId,
159 GiftCardTransactionId, InboundShipmentId, InboundShipmentItemId, IntegrationFieldMappingId,
160 IntegrationMappingId, InventoryItemId, InvoiceId, LoyaltyAccountId, LoyaltyProgramId,
161 LoyaltyTransactionId, Money, OrderId, OrderItemId, PaymentId, PaymentObligationId,
162 PrepaymentApplicationId, PrepaymentId, PriceLevelId, PriceScheduleId, PrintJobId,
163 PrintStationId, ProductId, ProductionBatchId, PromotionId, PurchaseOrderId,
164 PurgatoryLineItemId, PurgatoryOrderId, ReturnId, ReviewId, RewardId, SearchConfigId, SegmentId,
165 ShipmentId, ShippingMethodId, ShippingZoneId, Sku, StockSnapshotId, StockSnapshotLineId,
166 StoreCreditId, StoreCreditTransactionId, SubscriptionId, SupplierSkuId, TopologySnapshotId,
167 TransferOrderId, TransferOrderItemId, UnitClassId, UnitConversionRuleId, UnitOfMeasureId,
168 VendorCreditApplicationId, VendorCreditId, VendorReturnId, VendorReturnItemId, WarehouseId,
169 WarrantyId, WishlistId,
170};
171
172/// Re-export common types for convenience
173pub mod prelude {
174 pub use crate::errors::*;
175 pub use crate::events::*;
176 pub use crate::models::*;
177 pub use crate::traits::*;
178 pub use crate::validation::*;
179
180 // Typed IDs and value types
181 pub use stateset_primitives::{
182 ActivityLogId, AgentId, CartId, ChannelId, CompanyAddressId, CompanyId, ContactId,
183 CreditId, CurrencyCode, CustomerId, EdiDocumentId, FraudRuleId, FulfillmentId, GiftCardId,
184 GiftCardTransactionId, InboundShipmentId, InboundShipmentItemId, IntegrationFieldMappingId,
185 IntegrationMappingId, InventoryItemId, InvoiceId, LoyaltyAccountId, LoyaltyProgramId,
186 LoyaltyTransactionId, Money, OrderId, OrderItemId, PaymentId, PaymentObligationId,
187 PrepaymentApplicationId, PrepaymentId, PriceLevelId, PriceScheduleId, PrintJobId,
188 PrintStationId, ProductId, ProductionBatchId, PromotionId, PurchaseOrderId,
189 PurgatoryLineItemId, PurgatoryOrderId, ReturnId, ReviewId, RewardId, SearchConfigId,
190 SegmentId, ShipmentId, ShippingMethodId, ShippingZoneId, Sku, StockSnapshotId,
191 StockSnapshotLineId, StoreCreditId, StoreCreditTransactionId, SubscriptionId,
192 SupplierSkuId, TopologySnapshotId, TransferOrderId, TransferOrderItemId, UnitClassId,
193 UnitConversionRuleId, UnitOfMeasureId, VendorCreditApplicationId, VendorCreditId,
194 VendorReturnId, VendorReturnItemId, WarehouseId, WarrantyId, WishlistId,
195 };
196}
197
198/// Compiles the code examples in `README.md` as doctests, so the crates.io
199/// landing page can never drift from the real API.
200#[cfg(doctest)]
201#[doc = include_str!("../README.md")]
202struct ReadmeDoctests;