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#[cfg(feature = "core")]
61pub use stateset_primitives as primitives;
62
63#[cfg(feature = "core")]
65pub use stateset_core as core;
66
67#[cfg(feature = "core")]
69pub use stateset_db as db;
70
71#[cfg(feature = "core")]
73pub use stateset_embedded as embedded;
74
75#[cfg(feature = "core")]
77pub use stateset_observability as observability;
78
79#[cfg(feature = "crypto")]
83pub use stateset_crypto as crypto;
84
85#[cfg(feature = "policy")]
87pub use stateset_policy as policy;
88
89#[cfg(feature = "macros")]
91pub use stateset_macros as macros;
92
93#[cfg(feature = "sync")]
95pub use stateset_sync as sync;
96
97#[cfg(feature = "sync")]
98pub mod sync_runtime;
99
100#[cfg(feature = "sync")]
101pub use sync_runtime::{SyncRuntime, SyncRuntimeAuth, SyncRuntimeConfig, SyncRuntimeSnapshot};
102
103#[cfg(feature = "core")]
111pub mod prelude {
112 pub use stateset_embedded::Commerce;
114
115 pub use stateset_primitives::{CurrencyCode, Money, Sku};
117
118 pub use stateset_core::{
120 CustomerId, FulfillmentId, OrderId, OrderItemId, PaymentId, ProductId, ReturnId, ShipmentId,
121 };
122
123 pub use stateset_core::{
125 AddCartItem,
127 Address,
129 AdjustInventory,
131 Cart,
132 CreateCart,
133 CreateCustomer,
135 CreateInventoryItem,
136 CreateOrder,
138 CreateOrderItem,
139 CreatePayment,
141 CreateProduct,
143 CreateReturn,
145 CreateShipment,
147 Customer,
148 CustomerFilter,
149 CustomerStatus,
150 InventoryItem,
151 Order,
152 OrderFilter,
153 OrderItem,
154 OrderStatus,
155 Payment,
156 PaymentFilter,
157 PaymentStatus,
158 Product,
159 ProductFilter,
160 ProductStatus,
161 Return,
162 ReturnFilter,
163 ReturnStatus,
164 Shipment,
165 };
166
167 pub use stateset_core::CommerceEvent;
169
170 pub use stateset_core::{CommerceError, Result};
172
173 pub use stateset_db::Database;
175
176 pub use stateset_observability::{Metrics, MetricsConfig};
178
179 #[cfg(feature = "sync")]
181 pub use crate::{SyncRuntime, SyncRuntimeAuth, SyncRuntimeConfig, SyncRuntimeSnapshot};
182
183 #[cfg(feature = "sync")]
184 pub use stateset_sync::{
185 AttestationError, BudgetAuthorization, BudgetCheckpoint, CommandAttestation,
186 CommandConvergence, CommandInclusionProof, CommitmentManifest, CommitmentTrustPolicy,
187 CounterpartyCommitment, CounterpartyConvergenceStatus, DeadLetter, KernelExecutionError,
188 KernelMetadata, KernelReceipt, KernelReceiptStatus, KernelTransaction,
189 ManifestVerificationError, PolicyCheckpoint, PolicyDecision, PullResult, PushConfirmation,
190 PushResult, RemoteHead, SequenceAuthority, SequencerHttpTransport, SignerTrustMode,
191 SyncConfig, SyncEngine, SyncError, SyncEvent, SyncStatus, VerifiedCommitmentManifest,
192 compute_commitment_manifest_hash, sign_commitment_manifest, verify_commitment_manifest,
193 verify_commitment_manifest_against_state,
194 };
195}
196
197#[cfg(test)]
198mod tests {
199 use super::*;
200
201 #[cfg(feature = "core")]
202 #[test]
203 fn prelude_imports_compile() {
204 use crate::prelude::*;
206 let _: Money = Money::zero(CurrencyCode::USD);
207 let _: OrderId = OrderId::new();
208
209 #[cfg(feature = "sync")]
210 {
211 let _: SyncConfig = SyncConfig::new("agent-1", "tenant-1", "store-1");
212 let _: SequenceAuthority = SequenceAuthority::LocalOutbox;
213 let runtime = SyncRuntimeConfig::new(
214 "https://sequencer.stateset.com",
215 SyncConfig::new("agent-1", "tenant-1", "store-1"),
216 )
217 .with_agent_key_id(5)
218 .build()
219 .unwrap();
220 let _: SyncRuntimeSnapshot = runtime.snapshot();
221 assert_eq!(runtime.transport().agent_id(), "agent-1");
222 assert_eq!(runtime.transport().agent_key_id(), 5);
223 }
224 }
225
226 #[cfg(feature = "core")]
227 #[test]
228 fn core_reexport_accessible() {
229 let _ = core::CommerceError::NotFound;
230 }
231
232 #[cfg(feature = "core")]
233 #[test]
234 fn primitives_reexport_accessible() {
235 let _id = primitives::OrderId::new();
236 }
237
238 #[cfg(feature = "core")]
239 #[test]
240 fn db_reexport_accessible() {
241 let _cfg = db::DatabaseConfig::in_memory();
243 }
244
245 #[cfg(feature = "core")]
246 #[test]
247 fn observability_reexport_accessible() {
248 let _cfg = observability::MetricsConfig::default();
249 }
250
251 #[cfg(feature = "crypto")]
252 #[test]
253 fn crypto_reexport_accessible() {
254 let _ = crypto::ZERO_HASH;
255 }
256
257 #[cfg(feature = "sync")]
258 #[test]
259 fn sync_reexport_accessible() {
260 let runtime = SyncRuntimeConfig::new(
261 "https://sequencer.stateset.com",
262 sync::SyncConfig::new("agent-1", "tenant-1", "store-1"),
263 )
264 .with_api_key("ss_example_key")
265 .with_agent_key_id(11)
266 .build()
267 .unwrap();
268 assert_eq!(runtime.transport().agent_key_id(), 11);
269 }
270
271 #[cfg(feature = "policy")]
272 #[test]
273 fn policy_reexport_accessible() {
274 let _ = policy::PolicyEngine::new();
275 }
276
277 #[cfg(feature = "macros")]
278 #[test]
279 fn macros_reexport_accessible() {
280 #[allow(unused_imports)]
281 use crate::macros as _;
282 }
283}
284
285#[cfg(doctest)]
288#[doc = include_str!("../README.md")]
289struct ReadmeDoctests;