service_builder/lib.rs
1//! Service Builder is a lightweight, type-safe service construction library that leverages
2//! the builder pattern for dependency injection in Rust.
3//!
4//! # Overview
5//!
6//! This crate provides a procedural macro for automatically implementing the builder pattern
7//! for service initialization. It focuses on compile-time safety, zero-cost abstractions,
8//! and idiomatic Rust patterns.
9//!
10//! # Features
11//!
12//! - Type-safe dependency injection at compile time
13//! - Zero runtime overhead
14//! - Automatic builder implementation via proc-macros
15//! - Field-level getter and setter generation
16//! - Comprehensive error handling
17//!
18//! # Example
19//!
20//! ```ignore
21//! use service_builder::builder;
22//! use service_builder::error::BuildError;
23//! use std::sync::Arc;
24//!
25//! #[builder]
26//! struct UserService {
27//! #[builder(getter)] // Generates a get_repository method
28//! repository: Arc<dyn UserRepository>,
29//! #[builder(setter)] // Generates a set_cache method
30//! cache: Arc<dyn Cache>,
31//! #[builder(getter, setter)] // Generates both getter and setter
32//! config: ServiceConfig,
33//! }
34//!
35//! let service = UserService::builder()
36//! .repository(user_repo)
37//! .cache(cache)
38//! .config(config)
39//! .build()?;
40//!
41//! // Access fields using generated getters
42//! let repo = service.get_repository();
43//!
44//! // Modify fields using generated setters
45//! service.set_cache(new_cache);
46//! ```
47//!
48//! # Field Attributes
49//!
50//! The `builder` attribute supports the following field-level options:
51//!
52//! - `#[builder(getter)]`: Generates a getter method for the field
53//! - `#[builder(setter)]`: Generates a setter method for the field
54//! - Both can be combined: `#[builder(getter, setter)]`
55//!
56//! Generated methods follow these naming conventions:
57//! - Getters: `get_field_name() -> &FieldType`
58//! - Setters: `set_field_name(value: FieldType)`
59
60pub mod error;
61pub mod prelude;
62
63pub use service_builder_macro::builder;