#![allow(deprecated)]
#[cfg(feature = "advanced")]
pub mod ab_testing;
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod ai_contract_diff;
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod ai_response;
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod ai_studio;
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod behavioral_cloning;
#[cfg(feature = "advanced")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod behavioral_economics;
#[allow(dead_code)]
pub(crate) mod cache;
pub mod chain_execution;
pub mod chaos_utilities;
#[cfg(feature = "advanced")]
#[deprecated(note = "Will be extracted to mockforge-import crate")]
pub mod codegen;
#[allow(dead_code)]
pub(crate) mod collection_export;
pub mod conditions;
pub mod config;
#[allow(dead_code)]
pub(crate) mod connection_pool;
#[cfg(feature = "advanced")]
pub mod consistency;
#[cfg(feature = "contracts")]
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub mod consumer_contracts;
#[cfg(feature = "contracts")]
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub mod contract_drift;
#[cfg(feature = "contracts")]
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub mod contract_validation;
#[cfg(feature = "contracts")]
#[allow(dead_code)]
pub(crate) mod contract_webhooks;
pub mod custom_fixture;
pub mod data_source;
pub mod deceptive_canary;
#[allow(dead_code)]
pub(crate) mod docker_compose;
#[cfg(feature = "contracts")]
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub mod drift_gitops;
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod encryption;
pub mod error;
pub mod failure_analysis;
pub mod failure_injection;
pub mod fidelity;
pub mod fixture_store;
pub mod generate_config;
#[allow(dead_code)]
pub(crate) mod generative_schema;
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod git_watch;
#[cfg(feature = "advanced")]
pub mod graph;
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-import crate")]
pub mod import;
#[cfg(feature = "contracts")]
pub mod incidents;
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub mod intelligent_behavior;
pub mod latency;
pub mod lifecycle;
#[cfg(feature = "advanced")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod multi_tenant;
pub mod network_profiles;
pub mod odata_rewrite;
pub mod openapi;
pub mod openapi_routes;
pub mod output_control;
pub mod overrides;
pub mod performance;
pub mod pillar_tracking;
pub mod pillars;
#[cfg(feature = "contracts")]
pub mod pr_generation;
pub mod priority_handler;
pub mod protocol_abstraction;
pub mod protocol_server;
#[deprecated(note = "Will be extracted to mockforge-proxy crate")]
pub mod proxy;
pub mod reality;
#[cfg(feature = "advanced")]
pub mod reality_continuum;
pub mod record_replay;
pub mod request_capture;
pub mod request_chaining;
pub mod request_fingerprint;
pub mod request_logger;
#[cfg(feature = "scripting")]
pub(crate) mod request_scripting;
#[allow(dead_code)]
pub(crate) mod persona_lifecycle_time;
pub mod routing;
pub mod runtime_validation;
#[cfg(feature = "advanced")]
pub mod scenario_studio;
#[cfg(feature = "advanced")]
pub mod scenarios;
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub mod schema_diff;
pub mod security;
pub mod server_utils;
#[cfg(feature = "advanced")]
pub mod snapshots;
pub mod spec_parser;
pub mod stateful_handler;
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod sync_watcher;
pub mod template_expansion;
pub mod template_library;
pub mod templating;
#[cfg(feature = "advanced")]
pub mod time_travel;
#[cfg(feature = "advanced")]
pub mod time_travel_handler;
pub mod tls;
pub mod traffic_shaping;
pub mod validation;
pub mod verification;
#[cfg(feature = "voice")]
pub mod voice;
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod workspace;
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod workspace_import;
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub mod workspace_persistence;
pub mod ws_proxy;
#[cfg(feature = "advanced")]
pub use ab_testing::{
apply_variant_to_response, select_variant, ABTestConfig, ABTestReport,
ABTestingMiddlewareState, MockVariant, VariantAllocation, VariantAnalytics, VariantComparison,
VariantManager, VariantSelectionStrategy,
};
#[cfg(feature = "ai")]
#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
pub use behavioral_cloning::{
AmplificationScope, BehavioralSequence, EdgeAmplificationConfig, EdgeAmplifier,
EndpointProbabilityModel, ErrorPattern, LatencyDistribution, PayloadVariation,
ProbabilisticModel, SequenceLearner, SequenceStep,
};
pub use chain_execution::{ChainExecutionEngine, ChainExecutionResult, ChainExecutionStatus};
#[deprecated(note = "Use mockforge_chaos::core_chaos_utilities instead")]
pub use chaos_utilities::{ChaosConfig, ChaosEngine, ChaosResult, ChaosStatistics};
pub use conditions::{evaluate_condition, ConditionContext, ConditionError};
pub use config::{
apply_env_overrides, load_config, load_config_with_fallback, save_config, ApiKeyConfig,
AuthConfig, ServerConfig,
};
#[cfg(feature = "advanced")]
pub use consistency::{
ConsistencyEngine, EntityState, ProtocolState, SessionInfo, StateChangeEvent, UnifiedState,
};
pub use custom_fixture::{CustomFixture, CustomFixtureLoader, NestedFixture};
pub use data_source::{
DataSource, DataSourceConfig, DataSourceContent, DataSourceFactory, DataSourceManager,
DataSourceType, GitDataSource, HttpDataSource, LocalDataSource,
};
pub use deceptive_canary::{
CanaryRoutingStrategy, CanaryStats, DeceptiveCanaryConfig, DeceptiveCanaryRouter,
TeamIdentifiers,
};
pub use error::{Error, Result};
pub use failure_analysis::{
ContributingFactor, FailureContext, FailureContextCollector, FailureNarrative,
FailureNarrativeGenerator, NarrativeFrame,
};
#[deprecated(note = "Use mockforge_chaos::core_failure_injection instead")]
pub use failure_injection::{
create_failure_injector, FailureConfig, FailureInjector, TagFailureConfig,
};
pub use fidelity::{FidelityCalculator, FidelityScore, SampleComparator, SchemaComparator};
pub use generate_config::{
discover_config_file, load_generate_config, load_generate_config_with_fallback,
save_generate_config, BarrelType, GenerateConfig, GenerateOptions, InputConfig, OutputConfig,
PluginConfig,
};
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use git_watch::{GitWatchConfig, GitWatchService};
#[cfg(feature = "advanced")]
pub use graph::{
builder::GraphBuilder, relationships, ClusterType, EdgeType, GraphCluster, GraphData,
GraphEdge, GraphNode, NodeType, Protocol as GraphProtocol,
};
pub use latency::LatencyProfile;
pub use lifecycle::{
LifecycleHook, LifecycleHookRegistry, MockLifecycleEvent, RequestContext, ResponseContext,
ServerLifecycleEvent,
};
#[cfg(feature = "advanced")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use multi_tenant::{
MultiTenantConfig, MultiTenantWorkspaceRegistry, RoutingStrategy, TenantWorkspace,
WorkspaceContext, WorkspaceRouter, WorkspaceStats,
};
#[deprecated(note = "Use mockforge_chaos::core_network_profiles instead")]
pub use network_profiles::{NetworkProfile, NetworkProfileCatalog};
pub use openapi::{
OpenApiOperation, OpenApiRoute, OpenApiSchema, OpenApiSecurityRequirement, OpenApiSpec,
};
pub use openapi_routes::{
create_registry_from_file, create_registry_from_json, OpenApiRouteRegistry, ValidationOptions,
};
pub use output_control::{
apply_banner, apply_extension, apply_file_naming_template, build_file_naming_context,
process_generated_file, BarrelGenerator, FileNamingContext, GeneratedFile,
};
pub use overrides::{OverrideMode, OverrideRule, Overrides, PatchOp};
pub use pillars::{Pillar, PillarMetadata};
pub use priority_handler::{
CustomFixtureStep, FailureInjectionStep, GenerationResult, MockGenerator, MockResponse,
PriorityHttpHandler, PriorityRequest, PriorityResponse, PriorityStep, SimpleMockGenerator,
};
pub use protocol_abstraction::{
MessagePattern, MiddlewareAction, MiddlewareChain, Protocol, ProtocolMiddleware,
ProtocolRequest, ProtocolResponse, RequestMatcher, ResponseStatus, SpecOperation, SpecRegistry,
ValidationError as ProtocolValidationError, ValidationResult as ProtocolValidationResult,
};
#[deprecated(note = "Will be extracted to mockforge-proxy crate")]
pub use proxy::{ProxyConfig, ProxyHandler, ProxyResponse};
pub use reality::{PresetMetadata, RealityConfig, RealityEngine, RealityLevel, RealityPreset};
#[cfg(feature = "advanced")]
pub use reality_continuum::{
ContinuumConfig, ContinuumRule, MergeStrategy, RealityContinuumEngine, ResponseBlender,
TimeSchedule, TransitionCurve, TransitionMode,
};
pub use record_replay::{
clean_old_fixtures, list_fixtures, list_ready_fixtures, list_smoke_endpoints, RecordHandler,
RecordReplayHandler, RecordedRequest, ReplayHandler,
};
pub use request_chaining::{
ChainConfig, ChainContext, ChainDefinition, ChainExecutionContext, ChainLink, ChainRequest,
ChainResponse, ChainStore, ChainTemplatingContext, RequestChainRegistry,
};
pub use request_fingerprint::{
RequestFingerprint, RequestHandlerResult, ResponsePriority, ResponseSource,
};
pub use request_logger::{
create_grpc_log_entry, create_http_log_entry, create_http_log_entry_with_query,
create_websocket_log_entry, get_global_logger, init_global_logger, log_request_global,
CentralizedRequestLogger, RequestLogEntry,
};
pub use routing::{HttpMethod, Route, RouteRegistry};
pub use runtime_validation::{
RuntimeValidationError, RuntimeValidationResult, RuntimeValidatorConfig, SchemaMetadata,
};
#[cfg(feature = "advanced")]
pub use scenario_studio::{
ConditionOperator, FlowCondition, FlowConnection, FlowDefinition, FlowExecutionResult,
FlowExecutor, FlowPosition, FlowStep, FlowStepResult, FlowType, FlowVariant, StepType,
};
#[cfg(feature = "advanced")]
pub use scenarios::types::StepResult;
#[cfg(feature = "advanced")]
pub use scenarios::{
ScenarioDefinition, ScenarioExecutor, ScenarioParameter, ScenarioRegistry, ScenarioResult,
ScenarioStep,
};
#[cfg(feature = "contracts")]
#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
pub use schema_diff::{to_enhanced_422_json, validation_diff, ValidationError};
pub use server_utils::errors::{json_error, json_success};
pub use server_utils::{create_socket_addr, localhost_socket_addr, wildcard_socket_addr};
#[cfg(feature = "advanced")]
pub use snapshots::{SnapshotComponents, SnapshotManager, SnapshotManifest, SnapshotMetadata};
pub use spec_parser::{GraphQLValidator, OpenApiValidator, SpecFormat};
pub use stateful_handler::{
ResourceIdExtract, StateInfo, StateResponse, StatefulConfig, StatefulResponse,
StatefulResponseHandler, TransitionTrigger,
};
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use sync_watcher::{FileChange, SyncEvent, SyncService, SyncWatcher};
pub use template_library::{
TemplateLibrary, TemplateLibraryEntry, TemplateLibraryManager, TemplateMarketplace,
TemplateMetadata, TemplateVersion,
};
pub use templating::{expand_str, expand_tokens};
#[cfg(feature = "advanced")]
pub use time_travel::{
cron::{CronJob, CronJobAction, CronScheduler},
get_global_clock, is_time_travel_enabled, now as time_travel_now, register_global_clock,
unregister_global_clock, RepeatConfig, ResponseScheduler, ScheduledResponse, TimeScenario,
TimeTravelConfig, TimeTravelManager, TimeTravelStatus, VirtualClock,
};
#[cfg(feature = "advanced")]
pub use time_travel_handler::{
time_travel_middleware, ScheduledResponseWrapper, TimeTravelHandler,
};
#[deprecated(note = "Use mockforge_chaos::core_traffic_shaping instead")]
pub use traffic_shaping::{BandwidthConfig, BurstLossConfig, TrafficShaper, TrafficShapingConfig};
pub use uuid::Uuid;
pub use validation::{validate_openapi_operation_security, validate_openapi_security, Validator};
pub use verification::{
matches_verification_pattern, verify_at_least, verify_never, verify_requests, verify_sequence,
VerificationCount, VerificationRequest, VerificationResult,
};
#[cfg(feature = "voice")]
pub use voice::{
ConversationContext, ConversationManager, ConversationState, GeneratedWorkspaceScenario,
HookTranspiler, ParsedCommand, ParsedWorkspaceScenario, VoiceCommandParser, VoiceSpecGenerator,
WorkspaceConfigSummary, WorkspaceScenarioGenerator,
};
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use workspace::promotion_trait::PromotionService;
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use workspace::{EntityId, Folder, MockRequest, Workspace, WorkspaceConfig, WorkspaceRegistry};
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use workspace_import::{
create_workspace_from_curl, create_workspace_from_har, create_workspace_from_insomnia,
create_workspace_from_postman, import_postman_to_existing_workspace,
import_postman_to_workspace, WorkspaceImportConfig, WorkspaceImportResult,
};
#[cfg(feature = "workspace-mgmt")]
#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
pub use workspace_persistence::WorkspacePersistence;
pub use ws_proxy::{WsProxyConfig, WsProxyHandler, WsProxyRule};
pub mod routes {
pub use crate::openapi::{
OpenApiOperation, OpenApiRoute, OpenApiSchema, OpenApiSecurityRequirement, OpenApiSpec,
};
pub use crate::openapi_routes::{
create_registry_from_file, create_registry_from_json, OpenApiRouteRegistry,
ValidationOptions,
};
pub use crate::routing::{HttpMethod, Route, RouteRegistry};
}
pub mod middleware {
pub use crate::latency::LatencyInjector;
pub use crate::overrides::{OverrideMode, OverrideRule, Overrides, PatchOp};
pub use crate::protocol_abstraction::{
MessagePattern, MiddlewareAction, MiddlewareChain, Protocol, ProtocolMiddleware,
ProtocolRequest, ProtocolResponse, RequestMatcher, ResponseStatus, SpecOperation,
SpecRegistry,
};
}
pub mod generation {
pub use crate::priority_handler::{
CustomFixtureStep, FailureInjectionStep, GenerationResult, MockGenerator, MockResponse,
PriorityHttpHandler, PriorityRequest, PriorityResponse, PriorityStep, SimpleMockGenerator,
};
pub use crate::stateful_handler::{StatefulConfig, StatefulResponse, StatefulResponseHandler};
}
pub mod validate {
pub use crate::runtime_validation::{
RuntimeValidationError, RuntimeValidationResult, RuntimeValidatorConfig, SchemaMetadata,
};
pub use crate::spec_parser::{GraphQLValidator, OpenApiValidator, SpecFormat};
pub use crate::validation::{
validate_openapi_operation_security, validate_openapi_security, Validator,
};
pub use crate::verification::{
matches_verification_pattern, verify_at_least, verify_never, verify_requests,
verify_sequence, VerificationCount, VerificationRequest, VerificationResult,
};
}
pub mod fixtures {
pub use crate::custom_fixture::{CustomFixture, CustomFixtureLoader, NestedFixture};
pub use crate::fixture_store::{
load_fixtures_from_dir, FixtureFileFormat, FixtureFileGranularity, FixtureLoadErrorMode,
FixtureLoadOptions,
};
pub use crate::record_replay::{
RecordHandler, RecordReplayHandler, RecordedRequest, ReplayHandler,
};
}
#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(default)]
pub struct Config {
pub latency_enabled: bool,
pub failures_enabled: bool,
pub overrides_enabled: bool,
pub traffic_shaping_enabled: bool,
pub failure_config: Option<FailureConfig>,
pub proxy: Option<ProxyConfig>,
pub default_latency: LatencyProfile,
pub traffic_shaping: TrafficShapingConfig,
pub chaos_random: Option<ChaosConfig>,
pub max_request_logs: usize,
pub time_travel: TimeTravelConfig,
}
impl Default for Config {
fn default() -> Self {
Self {
latency_enabled: true,
failures_enabled: false,
overrides_enabled: true,
traffic_shaping_enabled: false,
failure_config: None,
proxy: None,
default_latency: LatencyProfile::default(),
traffic_shaping: TrafficShapingConfig::default(),
chaos_random: None,
max_request_logs: 1000, time_travel: TimeTravelConfig::default(),
}
}
}
impl Config {
pub fn create_chaos_engine(&self) -> Option<ChaosEngine> {
self.chaos_random.as_ref().map(|config| ChaosEngine::new(config.clone()))
}
pub fn is_chaos_random_enabled(&self) -> bool {
self.chaos_random.as_ref().map(|c| c.enabled).unwrap_or(false)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_config_default() {
let config = Config::default();
assert!(config.latency_enabled);
assert!(!config.failures_enabled);
assert!(config.overrides_enabled);
assert!(!config.traffic_shaping_enabled);
assert!(config.failure_config.is_none());
assert!(config.proxy.is_none());
}
#[test]
fn test_config_serialization() {
let config = Config::default();
let json = serde_json::to_string(&config).unwrap();
assert!(json.contains("latency_enabled"));
assert!(json.contains("failures_enabled"));
}
#[test]
fn test_config_deserialization() {
let config = Config {
latency_enabled: false,
failures_enabled: true,
..Default::default()
};
let json = serde_json::to_string(&config).unwrap();
let deserialized: Config = serde_json::from_str(&json).unwrap();
assert!(!deserialized.latency_enabled);
assert!(deserialized.failures_enabled);
assert!(deserialized.overrides_enabled);
}
#[test]
fn test_config_with_custom_values() {
let config = Config {
latency_enabled: false,
failures_enabled: true,
..Default::default()
};
assert!(!config.latency_enabled);
assert!(config.failures_enabled);
}
}