Skip to main content

Crate backbone_core

Crate backbone_core 

Source
Expand description

Backbone Framework Core

Foundation for generic CRUD system with 11 standard endpoints. This is the core package that can be published and reused across projects.

§Key Components

  • CrudService trait: Core async trait for entity CRUD operations
  • BackboneCrudHandler: Generic Axum router builder for all 11 endpoints
  • extractors::JsonOrForm: Body extractor that accepts JSON or url-encoded form payloads; BackboneCrudHandler uses it so every generated endpoint accepts both content types.
  • Response types: ApiResponse, PaginatedResponse, BulkResponse
  • Utilities: Timestamp, ID generation, pagination, validation
  • Persistence: Generic repositories for PostgreSQL and in-memory storage

§Quick Start

ⓘ
use backbone_core::{CrudService, BackboneCrudHandler, ApiResponse};

// 1. Implement CrudService for your entity
impl CrudService<User, CreateUserDto, UpdateUserDto> for UserCrudService {
    // ... implement all 11 methods
}

// 2. Create router with all 11 endpoints
let routes = BackboneCrudHandler::<_, User, CreateUserDto, UpdateUserDto, UserResponse>
    ::routes(Arc::new(user_crud), "/api/v1/users");

§Option 2: Using Generic Repositories

ⓘ
use backbone_core::persistence::{InMemoryRepository, PostgresRepository, CrudRepository};

// For testing/prototyping
let repo = InMemoryRepository::<User>::new();

// For production (requires "postgres" feature)
let repo = PostgresRepository::<User>::new(pool);

Re-exports§

pub use macros::log_include_hydration_failure;
pub use trigger::TriggerHandler;
pub use trigger::TriggerEvent;
pub use trigger::TriggerContext;
pub use trigger::TriggerContextMut;
pub use trigger::ActionExecutor;
pub use trigger::TriggerRegistry;
pub use config::BackboneConfig;
pub use config::ConfigError;
pub use config::ConfigResult;
pub use config::ConfigLoader;
pub use config::AppConfig;
pub use config::Environment;
pub use config::ServerConfig;
pub use config::DatabaseConfig;
pub use config::CacheConfig;
pub use config::ModulesConfig;
pub use config::SapiensConfig;
pub use config::PostmanConfig;
pub use config::BucketConfig;
pub use config::SapiensAuthConfig;
pub use config::PasswordHasherConfig;
pub use config::SapiensLockoutConfig;
pub use config::SmtpConfig;
pub use config::TemplatesConfig;
pub use config::StorageConfig;
pub use config::LoggingConfig;
pub use config::LoggingFileConfig;
pub use config::MonitoringConfig;
pub use config::ContextsConfig;
pub use config::RedisEventBusConfig;
pub use config::FeaturesConfig;
pub use config::RateLimitingConfig;
pub use config::SecurityConfig;
pub use config::CsrfConfig;
pub use config::SecurityHeadersConfig;
pub use config::ConfigurationBus;
pub use config::ConfigValue;
pub use config::ConfigChangeEvent;
pub use http::CrudService;
pub use http::BackboneCrudHandler;
pub use http::BackboneHttpHandler;
pub use http::AccessScope;
pub use http::ApiResponse;
pub use http::PaginatedResponse;
pub use http::PaginatedApiResponse;
pub use http::PaginationResponse;
pub use http::BulkResponse;
pub use http::BulkCreateRequest;
pub use http::ListQueryParams;
pub use http::ListRequest;
pub use http::UpsertRequest;
pub use http::FilterOptions;
pub use http::SortOrder;
pub use http::BatchIdsRequest;
pub use http::BulkUpdateItem;
pub use http::BulkPatchItem;
pub use http::BulkPatchRequest;
pub use http::PaginationRequest;
pub use utils::BackboneError;
pub use utils::PaginationParams;
pub use utils::PaginationMeta as BackbonePaginationMeta;
pub use utils::now;
pub use utils::days_ago;
pub use utils::days_from_now;
pub use utils::hours_ago;
pub use utils::hours_from_now;
pub use utils::minutes_from_now;
pub use utils::new_id;
pub use utils::new_id_string;
pub use utils::parse_id;
pub use utils::is_valid_uuid;
pub use utils::is_valid_email;
pub use utils::is_valid_username;
pub use utils::normalize_string;
pub use persistence::CrudRepository;
pub use persistence::PersistentEntity;
pub use persistence::RepositoryError;
pub use persistence::PartialUpdatable;
pub use persistence::SearchableRepository;
pub use persistence::Versioned;
pub use persistence::InMemoryRepository;
pub use persistence::CrudServiceAdapter;
pub use persistence::SimpleCrudServiceAdapter;
pub use persistence::AdapterError;
pub use specification::Specification;
pub use specification::AndSpecification;
pub use specification::OrSpecification;
pub use specification::NotSpecification;
pub use specification::SpecificationResult;
pub use specification::SpecificationEvaluator;
pub use specification::AlwaysTrue;
pub use specification::AlwaysFalse;
pub use specification::PredicateSpecification;
pub use specification::predicate;
pub use registry::ModuleService;
pub use registry::ServiceRegistry;
pub use registry::ServiceHealth;
pub use registry::HealthStatus;
pub use registry::RegistryHealth;
pub use registry::RegistryStatistics;
pub use registry::ServiceDescriptor;
pub use module::BackboneModule;
pub use module::MigrationInfo;
pub use module::SeedInfo;
pub use module_registry::ModuleRegistry;
pub use module_registry::ModuleRegistryError;
pub use module_registry::ModuleRegistryResult;
pub use domain_service::DomainService;
pub use domain_service::TransactionalDomainService;
pub use command::Command;
pub use command::CommandHandler;
pub use command::CommandDispatcher;
pub use command::ValidatableCommand;
pub use command::ValidatingCommandHandler;
pub use query::Query;
pub use query::QueryHandler;
pub use query::QueryDispatcher;
pub use query::CacheableQuery;
pub use query::PaginatedQuery;
pub use query::PaginatedQueryResult;
pub use value_object::ValueObject;
pub use value_object::OptionalValueObject;
pub use value_object::ValueObjectError;
pub use aggregate::AggregateRoot;
pub use aggregate::EventSourcedAggregate;
pub use aggregate::InvariantAggregate;
pub use aggregate::AggregateMetadata;
pub use error::ModuleError;
pub use error::ErrorCategory;
pub use error::ErrorResponse;
pub use error::CommonError;
pub use service::GenericCrudService;
pub use service::ServiceError;
pub use service::ServiceResult;
pub use service::FromCreateDto;
pub use service::ApplyUpdateDto;
pub use service::ServiceLifecycle;
pub use service::NoOpLifecycle;
pub use usecase::UseCaseError;
pub use usecase::UseCaseResult;
pub use usecase::UseCaseHooks;
pub use usecase::DefaultHooks;
pub use usecase::UseCaseService;
pub use usecase::EntityFactory;
pub use usecase::EntityUpdater;
pub use usecase::CreateUseCase;
pub use usecase::UpdateUseCase;
pub use usecase::GetUseCase;
pub use usecase::DeleteUseCase;
pub use usecase::ListUseCase;
pub use usecase::ListParams;
pub use usecase::ListResult;
pub use usecase::ListService;
pub use validation::ValidationError;
pub use validation::ValidationErrors;
pub use validation::FieldRule;
pub use validation::EntityValidator;
pub use validation::RequiredString;
pub use validation::MaxLength;
pub use validation::NonNegative;
pub use validation::OptionalNotBlank;
pub use validation::Regex;
pub use validation::RequiredUuid;
pub use policy::PolicyContext;
pub use policy::PolicyOutcome;
pub use policy::PolicyDecision;
pub use policy::DomainPolicy;
pub use policy::PermitAllPolicy;
pub use policy::DenyAllPolicy;
pub use policy::AllOfPolicy;
pub use policy::AnyOfPolicy;
pub use policy::NotPolicy;
pub use bulk::BulkFailureMode;
pub use bulk::BulkOperationConfig;
pub use bulk::BulkItemResult;
pub use bulk::BulkOperationResult;
pub use bulk::BulkOperationProgress;
pub use bulk::BulkCapableService;
pub use bulk::GenericBulkService;
pub use integration::ModuleAdapter;
pub use integration::ProjectionAdapter;
pub use integration::IntegrationError;
pub use integration::EventBridge;
pub use integration::IdentityAdapter;
pub use integration::identity_adapter;
pub use cqrs::GenericCreateCommand;
pub use cqrs::GenericUpdateCommand;
pub use cqrs::GenericDeleteCommand;
pub use cqrs::GenericRestoreCommand;
pub use cqrs::GenericGetQuery;
pub use cqrs::GenericListQuery;
pub use cqrs::GenericListDeletedQuery;
pub use cqrs::GenericCommandHandler;
pub use cqrs::GenericQueryHandler;
pub use cqrs::CqrsService;
pub use cqrs::CqrsReadService;
pub use graphql::GenericGraphQLResolver;
pub use graphql::GraphQLCapableService;
pub use graphql::GraphQLListResult;
pub use graphql::GraphQLPaginationInput;
pub use entity::*;
pub use repository::*;
pub use grpc::*;
pub use builder::*;

Modules§

aggregate
DDD Aggregate Root Pattern
builder
Builder Pattern Dependency Injection
bulk
Generic bulk operations — create, update, delete multiple entities in one call.
command
CQRS Command Pattern
config
Configuration management system for Backbone Framework
cqrs
Generic CQRS commands, queries, and their handlers.
crud
CRUD operations and generic implementations
domain_service
Domain Service Trait
entity
Entity traits and common entity implementations
error
Module Error Trait
extractors
Request body extractors.
flow
Workflow step and context traits for saga-pattern workflows.
graphql
Generic GraphQL resolver — mirrors BackboneCrudHandler for the GraphQL transport.
grpc
gRPC layer and service implementations
http
HTTP layer and REST endpoint implementations
integration
Cross-module integration — adapters, anti-corruption layer, and event bridges.
macros
Code-generation macros for backbone-schema generated repositories.
module
Backbone Module System
module_registry
Module Registry - Discovery and management of Backbone modules
persistence
Persistence Layer - Reusable Repository Implementations
policy
Domain policy — enforces pure business rules that govern whether CRUD operations are valid for a given entity state.
projection
Projector base trait for CQRS read models.
query
CQRS Query Pattern
registry
Module Service Registry - Discovery and access to module services
repository
Repository traits and common implementations
service
Generic CRUD service — one implementation used by all entities.
specification
Specification Pattern - Business Rules as Objects
state_machine
Generic state machine infrastructure for domain state machines.
trigger
Generic trigger handler trait and types for entity lifecycle events.
usecase
Generic use cases — one per CRUD operation, composable via hooks.
utils
Backbone Framework Utilities
validation
Generic entity validation — composable field rules with typed errors.
value_object
DDD Value Object Pattern

Macros§

define_string_value_object
Helper macro for implementing simple string-based value objects.
impl_crud_repository
Implement backbone_core::CrudRepository<E> for a generated repository struct.

Constants§

STANDARD_ENDPOINTS
The 11 standard Backbone endpoints that are auto-generated for each entity:
STANDARD_ENDPOINT_COUNT
Number of standard CRUD endpoints generated per entity
VERSION
Core version