1#![allow(deprecated)]
203
204#[cfg(feature = "advanced")]
205pub mod ab_testing;
206#[cfg(feature = "ai")]
207#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
208pub mod ai_contract_diff;
209#[cfg(feature = "ai")]
210#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
211pub mod ai_response;
212#[cfg(feature = "ai")]
214#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
215pub mod ai_studio;
216#[cfg(feature = "ai")]
218#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
219pub mod behavioral_cloning;
220#[cfg(feature = "advanced")]
221#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
222pub mod behavioral_economics;
223#[allow(dead_code)]
224pub(crate) mod cache;
225pub mod chain_execution;
226pub mod chaos_utilities;
227#[cfg(feature = "advanced")]
228#[deprecated(note = "Will be extracted to mockforge-import crate")]
229pub mod codegen;
230#[allow(dead_code)]
232pub(crate) mod collection_export;
233pub mod conditions;
234pub mod config;
235#[allow(dead_code)]
237pub(crate) mod connection_pool;
238#[cfg(feature = "advanced")]
240pub mod consistency;
241#[cfg(feature = "contracts")]
242#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
243pub mod consumer_contracts;
245#[cfg(feature = "contracts")]
246#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
247pub mod contract_drift;
249#[cfg(feature = "contracts")]
250#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
251pub mod contract_validation;
253#[cfg(feature = "contracts")]
255#[allow(dead_code)]
256pub(crate) mod contract_webhooks;
257pub mod custom_fixture;
258pub mod data_source;
260pub mod deceptive_canary;
262#[allow(dead_code)]
264pub(crate) mod docker_compose;
265#[cfg(feature = "contracts")]
266#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
267pub mod drift_gitops;
269#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
270pub mod encryption;
271pub mod error;
272pub mod failure_analysis;
273pub mod failure_injection;
274pub mod fidelity;
275pub mod fixture_store;
277pub mod generate_config;
278#[allow(dead_code)]
279pub(crate) mod generative_schema;
280#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
281pub mod git_watch;
282#[cfg(feature = "advanced")]
283pub mod graph;
284#[cfg(feature = "workspace-mgmt")]
285#[deprecated(note = "Will be extracted to mockforge-import crate")]
286pub mod import;
287#[cfg(feature = "contracts")]
288pub mod incidents;
289#[cfg(feature = "ai")]
290#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
291pub mod intelligent_behavior;
292pub mod latency;
293pub mod lifecycle;
294#[cfg(feature = "advanced")]
295#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
296pub mod multi_tenant;
297pub mod network_profiles;
298pub mod odata_rewrite;
300pub mod openapi;
301pub mod openapi_routes;
302pub mod output_control;
303pub mod overrides;
304pub mod performance;
305pub mod pillar_tracking;
307pub mod pillars;
309#[cfg(feature = "contracts")]
310pub mod pr_generation;
311pub mod priority_handler;
312pub mod protocol_abstraction;
313pub mod protocol_server;
315#[deprecated(note = "Will be extracted to mockforge-proxy crate")]
316pub mod proxy;
317pub mod reality;
318#[cfg(feature = "advanced")]
319pub mod reality_continuum;
320pub mod record_replay;
321pub mod request_capture;
322pub mod request_chaining;
323pub mod request_fingerprint;
324pub mod request_logger;
325#[cfg(feature = "scripting")]
326pub(crate) mod request_scripting;
327#[allow(dead_code)]
331pub(crate) mod persona_lifecycle_time;
332pub mod routing;
333pub mod runtime_validation;
335#[cfg(feature = "advanced")]
337pub mod scenario_studio;
338#[cfg(feature = "advanced")]
339pub mod scenarios;
340#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
341pub mod schema_diff;
342pub mod security;
343pub mod server_utils;
344#[cfg(feature = "advanced")]
346pub mod snapshots;
347pub mod spec_parser;
348pub mod stateful_handler;
349#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
350pub mod sync_watcher;
351pub mod template_expansion;
353pub mod template_library;
355pub mod templating;
356#[cfg(feature = "advanced")]
357pub mod time_travel;
358#[cfg(feature = "advanced")]
359pub mod time_travel_handler;
360pub mod tls;
362pub mod traffic_shaping;
363pub mod validation;
364pub mod verification;
365#[cfg(feature = "voice")]
366pub mod voice;
367#[cfg(feature = "workspace-mgmt")]
368#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
369pub mod workspace;
370#[cfg(feature = "workspace-mgmt")]
371#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
372pub mod workspace_import;
373#[cfg(feature = "workspace-mgmt")]
374#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
375pub mod workspace_persistence;
376pub mod ws_proxy;
377
378#[cfg(feature = "advanced")]
379pub use ab_testing::{
380 apply_variant_to_response, select_variant, ABTestConfig, ABTestReport,
381 ABTestingMiddlewareState, MockVariant, VariantAllocation, VariantAnalytics, VariantComparison,
382 VariantManager, VariantSelectionStrategy,
383};
384#[cfg(feature = "ai")]
385#[deprecated(note = "Will be extracted to mockforge-intelligence crate")]
386pub use behavioral_cloning::{
387 AmplificationScope, BehavioralSequence, EdgeAmplificationConfig, EdgeAmplifier,
388 EndpointProbabilityModel, ErrorPattern, LatencyDistribution, PayloadVariation,
389 ProbabilisticModel, SequenceLearner, SequenceStep,
390};
391pub use chain_execution::{ChainExecutionEngine, ChainExecutionResult, ChainExecutionStatus};
392#[deprecated(note = "Use mockforge_chaos::core_chaos_utilities instead")]
393pub use chaos_utilities::{ChaosConfig, ChaosEngine, ChaosResult, ChaosStatistics};
394pub use conditions::{evaluate_condition, ConditionContext, ConditionError};
395pub use config::{
396 apply_env_overrides, load_config, load_config_with_fallback, save_config, ApiKeyConfig,
397 AuthConfig, ServerConfig,
398};
399#[cfg(feature = "advanced")]
400pub use consistency::{
401 ConsistencyEngine, EntityState, ProtocolState, SessionInfo, StateChangeEvent, UnifiedState,
402};
403pub use custom_fixture::{CustomFixture, CustomFixtureLoader, NestedFixture};
404pub use data_source::{
405 DataSource, DataSourceConfig, DataSourceContent, DataSourceFactory, DataSourceManager,
406 DataSourceType, GitDataSource, HttpDataSource, LocalDataSource,
407};
408pub use deceptive_canary::{
409 CanaryRoutingStrategy, CanaryStats, DeceptiveCanaryConfig, DeceptiveCanaryRouter,
410 TeamIdentifiers,
411};
412pub use error::{Error, Result};
413pub use failure_analysis::{
414 ContributingFactor, FailureContext, FailureContextCollector, FailureNarrative,
415 FailureNarrativeGenerator, NarrativeFrame,
416};
417#[deprecated(note = "Use mockforge_chaos::core_failure_injection instead")]
418pub use failure_injection::{
419 create_failure_injector, FailureConfig, FailureInjector, TagFailureConfig,
420};
421pub use fidelity::{FidelityCalculator, FidelityScore, SampleComparator, SchemaComparator};
422pub use generate_config::{
423 discover_config_file, load_generate_config, load_generate_config_with_fallback,
424 save_generate_config, BarrelType, GenerateConfig, GenerateOptions, InputConfig, OutputConfig,
425 PluginConfig,
426};
427#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
428pub use git_watch::{GitWatchConfig, GitWatchService};
429#[cfg(feature = "advanced")]
430pub use graph::{
431 builder::GraphBuilder, relationships, ClusterType, EdgeType, GraphCluster, GraphData,
432 GraphEdge, GraphNode, NodeType, Protocol as GraphProtocol,
433};
434pub use latency::LatencyProfile;
435pub use lifecycle::{
436 LifecycleHook, LifecycleHookRegistry, MockLifecycleEvent, RequestContext, ResponseContext,
437 ServerLifecycleEvent,
438};
439#[cfg(feature = "advanced")]
440#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
441pub use multi_tenant::{
442 MultiTenantConfig, MultiTenantWorkspaceRegistry, RoutingStrategy, TenantWorkspace,
443 WorkspaceContext, WorkspaceRouter, WorkspaceStats,
444};
445#[deprecated(note = "Use mockforge_chaos::core_network_profiles instead")]
446pub use network_profiles::{NetworkProfile, NetworkProfileCatalog};
447pub use openapi::{
448 OpenApiOperation, OpenApiRoute, OpenApiSchema, OpenApiSecurityRequirement, OpenApiSpec,
449};
450pub use openapi_routes::{
451 create_registry_from_file, create_registry_from_json, OpenApiRouteRegistry, ValidationOptions,
452};
453pub use output_control::{
454 apply_banner, apply_extension, apply_file_naming_template, build_file_naming_context,
455 process_generated_file, BarrelGenerator, FileNamingContext, GeneratedFile,
456};
457pub use overrides::{OverrideMode, OverrideRule, Overrides, PatchOp};
458pub use pillars::{Pillar, PillarMetadata};
459pub use priority_handler::{
460 CustomFixtureStep, FailureInjectionStep, GenerationResult, MockGenerator, MockResponse,
461 PriorityHttpHandler, PriorityRequest, PriorityResponse, PriorityStep, SimpleMockGenerator,
462};
463pub use protocol_abstraction::{
464 MessagePattern, MiddlewareAction, MiddlewareChain, Protocol, ProtocolMiddleware,
465 ProtocolRequest, ProtocolResponse, RequestMatcher, ResponseStatus, SpecOperation, SpecRegistry,
466 ValidationError as ProtocolValidationError, ValidationResult as ProtocolValidationResult,
467};
468#[deprecated(note = "Will be extracted to mockforge-proxy crate")]
469pub use proxy::{ProxyConfig, ProxyHandler, ProxyResponse};
470pub use reality::{PresetMetadata, RealityConfig, RealityEngine, RealityLevel, RealityPreset};
471#[cfg(feature = "advanced")]
472pub use reality_continuum::{
473 ContinuumConfig, ContinuumRule, MergeStrategy, RealityContinuumEngine, ResponseBlender,
474 TimeSchedule, TransitionCurve, TransitionMode,
475};
476pub use record_replay::{
477 clean_old_fixtures, list_fixtures, list_ready_fixtures, list_smoke_endpoints, RecordHandler,
478 RecordReplayHandler, RecordedRequest, ReplayHandler,
479};
480pub use request_chaining::{
481 ChainConfig, ChainContext, ChainDefinition, ChainExecutionContext, ChainLink, ChainRequest,
482 ChainResponse, ChainStore, ChainTemplatingContext, RequestChainRegistry,
483};
484pub use request_fingerprint::{
485 RequestFingerprint, RequestHandlerResult, ResponsePriority, ResponseSource,
486};
487pub use request_logger::{
488 create_grpc_log_entry, create_http_log_entry, create_http_log_entry_with_query,
489 create_websocket_log_entry, get_global_logger, init_global_logger, log_request_global,
490 CentralizedRequestLogger, RequestLogEntry,
491};
492pub use routing::{HttpMethod, Route, RouteRegistry};
495pub use runtime_validation::{
496 RuntimeValidationError, RuntimeValidationResult, RuntimeValidatorConfig, SchemaMetadata,
497};
498#[cfg(feature = "advanced")]
499pub use scenario_studio::{
500 ConditionOperator, FlowCondition, FlowConnection, FlowDefinition, FlowExecutionResult,
501 FlowExecutor, FlowPosition, FlowStep, FlowStepResult, FlowType, FlowVariant, StepType,
502};
503#[cfg(feature = "advanced")]
504pub use scenarios::types::StepResult;
505#[cfg(feature = "advanced")]
506pub use scenarios::{
507 ScenarioDefinition, ScenarioExecutor, ScenarioParameter, ScenarioRegistry, ScenarioResult,
508 ScenarioStep,
509};
510#[cfg(feature = "contracts")]
511#[deprecated(note = "Will be extracted to mockforge-contracts crate")]
512pub use schema_diff::{to_enhanced_422_json, validation_diff, ValidationError};
513pub use server_utils::errors::{json_error, json_success};
514pub use server_utils::{create_socket_addr, localhost_socket_addr, wildcard_socket_addr};
515#[cfg(feature = "advanced")]
516pub use snapshots::{SnapshotComponents, SnapshotManager, SnapshotManifest, SnapshotMetadata};
517pub use spec_parser::{GraphQLValidator, OpenApiValidator, SpecFormat};
518pub use stateful_handler::{
519 ResourceIdExtract, StateInfo, StateResponse, StatefulConfig, StatefulResponse,
520 StatefulResponseHandler, TransitionTrigger,
521};
522#[cfg(feature = "workspace-mgmt")]
523#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
524pub use sync_watcher::{FileChange, SyncEvent, SyncService, SyncWatcher};
525pub use template_library::{
526 TemplateLibrary, TemplateLibraryEntry, TemplateLibraryManager, TemplateMarketplace,
527 TemplateMetadata, TemplateVersion,
528};
529pub use templating::{expand_str, expand_tokens};
530#[cfg(feature = "advanced")]
531pub use time_travel::{
532 cron::{CronJob, CronJobAction, CronScheduler},
533 get_global_clock, is_time_travel_enabled, now as time_travel_now, register_global_clock,
534 unregister_global_clock, RepeatConfig, ResponseScheduler, ScheduledResponse, TimeScenario,
535 TimeTravelConfig, TimeTravelManager, TimeTravelStatus, VirtualClock,
536};
537#[cfg(feature = "advanced")]
538pub use time_travel_handler::{
539 time_travel_middleware, ScheduledResponseWrapper, TimeTravelHandler,
540};
541#[deprecated(note = "Use mockforge_chaos::core_traffic_shaping instead")]
542pub use traffic_shaping::{BandwidthConfig, BurstLossConfig, TrafficShaper, TrafficShapingConfig};
543pub use uuid::Uuid;
544pub use validation::{validate_openapi_operation_security, validate_openapi_security, Validator};
545pub use verification::{
546 matches_verification_pattern, verify_at_least, verify_never, verify_requests, verify_sequence,
547 VerificationCount, VerificationRequest, VerificationResult,
548};
549#[cfg(feature = "voice")]
550pub use voice::{
551 ConversationContext, ConversationManager, ConversationState, GeneratedWorkspaceScenario,
552 HookTranspiler, ParsedCommand, ParsedWorkspaceScenario, VoiceCommandParser, VoiceSpecGenerator,
553 WorkspaceConfigSummary, WorkspaceScenarioGenerator,
554};
555#[cfg(feature = "workspace-mgmt")]
556#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
557pub use workspace::promotion_trait::PromotionService;
558#[cfg(feature = "workspace-mgmt")]
559#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
560pub use workspace::{EntityId, Folder, MockRequest, Workspace, WorkspaceConfig, WorkspaceRegistry};
561#[cfg(feature = "workspace-mgmt")]
562#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
563pub use workspace_import::{
564 create_workspace_from_curl, create_workspace_from_har, create_workspace_from_insomnia,
565 create_workspace_from_postman, import_postman_to_existing_workspace,
566 import_postman_to_workspace, WorkspaceImportConfig, WorkspaceImportResult,
567};
568#[cfg(feature = "workspace-mgmt")]
569#[deprecated(note = "Will be extracted to mockforge-workspace crate")]
570pub use workspace_persistence::WorkspacePersistence;
571pub use ws_proxy::{WsProxyConfig, WsProxyHandler, WsProxyRule};
572pub mod routes {
581 pub use crate::openapi::{
582 OpenApiOperation, OpenApiRoute, OpenApiSchema, OpenApiSecurityRequirement, OpenApiSpec,
583 };
584 pub use crate::openapi_routes::{
585 create_registry_from_file, create_registry_from_json, OpenApiRouteRegistry,
586 ValidationOptions,
587 };
588 pub use crate::routing::{HttpMethod, Route, RouteRegistry};
589}
590
591pub mod middleware {
593 pub use crate::latency::LatencyInjector;
594 pub use crate::overrides::{OverrideMode, OverrideRule, Overrides, PatchOp};
595 pub use crate::protocol_abstraction::{
596 MessagePattern, MiddlewareAction, MiddlewareChain, Protocol, ProtocolMiddleware,
597 ProtocolRequest, ProtocolResponse, RequestMatcher, ResponseStatus, SpecOperation,
598 SpecRegistry,
599 };
600}
601
602pub mod generation {
604 pub use crate::priority_handler::{
605 CustomFixtureStep, FailureInjectionStep, GenerationResult, MockGenerator, MockResponse,
606 PriorityHttpHandler, PriorityRequest, PriorityResponse, PriorityStep, SimpleMockGenerator,
607 };
608 pub use crate::stateful_handler::{StatefulConfig, StatefulResponse, StatefulResponseHandler};
609}
610
611pub mod validate {
613 pub use crate::runtime_validation::{
614 RuntimeValidationError, RuntimeValidationResult, RuntimeValidatorConfig, SchemaMetadata,
615 };
616 pub use crate::spec_parser::{GraphQLValidator, OpenApiValidator, SpecFormat};
617 pub use crate::validation::{
618 validate_openapi_operation_security, validate_openapi_security, Validator,
619 };
620 pub use crate::verification::{
621 matches_verification_pattern, verify_at_least, verify_never, verify_requests,
622 verify_sequence, VerificationCount, VerificationRequest, VerificationResult,
623 };
624}
625
626pub mod fixtures {
628 pub use crate::custom_fixture::{CustomFixture, CustomFixtureLoader, NestedFixture};
629 pub use crate::fixture_store::{
630 load_fixtures_from_dir, FixtureFileFormat, FixtureFileGranularity, FixtureLoadErrorMode,
631 FixtureLoadOptions,
632 };
633 pub use crate::record_replay::{
634 RecordHandler, RecordReplayHandler, RecordedRequest, ReplayHandler,
635 };
636}
637
638#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)]
640#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
641#[serde(default)]
642pub struct Config {
643 pub latency_enabled: bool,
645 pub failures_enabled: bool,
647 pub overrides_enabled: bool,
649 pub traffic_shaping_enabled: bool,
651 pub failure_config: Option<FailureConfig>,
653 pub proxy: Option<ProxyConfig>,
655 pub default_latency: LatencyProfile,
657 pub traffic_shaping: TrafficShapingConfig,
659 pub chaos_random: Option<ChaosConfig>,
661 pub max_request_logs: usize,
664 pub time_travel: TimeTravelConfig,
666}
667
668impl Default for Config {
670 fn default() -> Self {
671 Self {
672 latency_enabled: true,
673 failures_enabled: false,
674 overrides_enabled: true,
675 traffic_shaping_enabled: false,
676 failure_config: None,
677 proxy: None,
678 default_latency: LatencyProfile::default(),
679 traffic_shaping: TrafficShapingConfig::default(),
680 chaos_random: None,
681 max_request_logs: 1000, time_travel: TimeTravelConfig::default(),
683 }
684 }
685}
686
687impl Config {
688 pub fn create_chaos_engine(&self) -> Option<ChaosEngine> {
690 self.chaos_random.as_ref().map(|config| ChaosEngine::new(config.clone()))
691 }
692
693 pub fn is_chaos_random_enabled(&self) -> bool {
695 self.chaos_random.as_ref().map(|c| c.enabled).unwrap_or(false)
696 }
697}
698
699#[cfg(test)]
700mod tests {
701 use super::*;
702
703 #[test]
704 fn test_config_default() {
705 let config = Config::default();
706 assert!(config.latency_enabled);
707 assert!(!config.failures_enabled);
708 assert!(config.overrides_enabled);
709 assert!(!config.traffic_shaping_enabled);
710 assert!(config.failure_config.is_none());
711 assert!(config.proxy.is_none());
712 }
713
714 #[test]
715 fn test_config_serialization() {
716 let config = Config::default();
717 let json = serde_json::to_string(&config).unwrap();
718 assert!(json.contains("latency_enabled"));
719 assert!(json.contains("failures_enabled"));
720 }
721
722 #[test]
723 fn test_config_deserialization() {
724 let config = Config {
726 latency_enabled: false,
727 failures_enabled: true,
728 ..Default::default()
729 };
730
731 let json = serde_json::to_string(&config).unwrap();
733 let deserialized: Config = serde_json::from_str(&json).unwrap();
734
735 assert!(!deserialized.latency_enabled);
736 assert!(deserialized.failures_enabled);
737 assert!(deserialized.overrides_enabled);
738 }
739
740 #[test]
741 fn test_config_with_custom_values() {
742 let config = Config {
743 latency_enabled: false,
744 failures_enabled: true,
745 ..Default::default()
746 };
747
748 assert!(!config.latency_enabled);
749 assert!(config.failures_enabled);
750 }
751}