├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── please-use-discord-for-questions-at-https---discord-com-channels-1074998995086225460-1074999099855753317.md └── workflows │ ├── docs.yml │ ├── dotnet.yml │ └── publish_nugets.yml ├── .gitignore ├── .nuke ├── build.schema.json └── parameters.json ├── Analysis.Build.props ├── Directory.Build.props ├── LICENSE ├── README.md ├── WolverineWebApiFSharp ├── Library.fs └── WolverineWebApiFSharp.fsproj ├── build.cmd ├── build.ps1 ├── build.sh ├── build ├── Configuration.cs ├── Directory.Build.props ├── Directory.Build.targets ├── build.cs └── build.csproj ├── docker-compose.yml ├── docs ├── .vitepress │ ├── algolia-config.json │ ├── config.mts │ └── theme │ │ ├── CustomLayout.vue │ │ ├── custom.css │ │ └── index.js ├── guide │ ├── basics.md │ ├── codegen.md │ ├── command-line.md │ ├── configuration.md │ ├── diagnostics.md │ ├── durability │ │ ├── dead-letter-storage.md │ │ ├── efcore.md │ │ ├── idempotency.md │ │ ├── index.md │ │ ├── leadership-and-troubleshooting.md │ │ ├── managing.md │ │ ├── marten │ │ │ ├── ancillary-stores.md │ │ │ ├── distribution.md │ │ │ ├── event-forwarding.md │ │ │ ├── event-sourcing.md │ │ │ ├── inbox.md │ │ │ ├── index.md │ │ │ ├── multi-tenancy.md │ │ │ ├── operations.md │ │ │ ├── outbox.md │ │ │ ├── sagas.md │ │ │ ├── subscriptions.md │ │ │ └── transactional-middleware.md │ │ ├── postgresql.md │ │ ├── ravendb.md │ │ ├── sagas.md │ │ └── sqlserver.md │ ├── extensions.md │ ├── handlers │ │ ├── batching.md │ │ ├── cascading.md │ │ ├── discovery.md │ │ ├── error-handling.md │ │ ├── fluent-validation.md │ │ ├── index.md │ │ ├── middleware.md │ │ ├── multi-tenancy.md │ │ ├── persistence.md │ │ ├── return-values.md │ │ ├── side-effects.md │ │ ├── sticky.md │ │ └── timeout.md │ ├── http │ │ ├── as-parameters.md │ │ ├── endpoints.md │ │ ├── files.md │ │ ├── fluentvalidation.md │ │ ├── forms.md │ │ ├── headers.md │ │ ├── index.md │ │ ├── integration.md │ │ ├── json.md │ │ ├── marten.md │ │ ├── mediator.md │ │ ├── messaging.md │ │ ├── metadata.md │ │ ├── middleware.md │ │ ├── multi-tenancy.md │ │ ├── policies.md │ │ ├── problemdetails.md │ │ ├── querystring.md │ │ ├── routing.md │ │ ├── sagas.md │ │ └── security.md │ ├── index.md │ ├── logging.md │ ├── messages.md │ ├── messaging │ │ ├── broadcast-to-topic.md │ │ ├── endpoint-operations.md │ │ ├── expiration.md │ │ ├── introduction.md │ │ ├── listeners.md │ │ ├── message-bus.md │ │ ├── policies.md │ │ ├── subscriptions.md │ │ └── transports │ │ │ ├── azureservicebus │ │ │ ├── conventional-routing.md │ │ │ ├── deadletterqueues.md │ │ │ ├── index.md │ │ │ ├── interoperability.md │ │ │ ├── listening.md │ │ │ ├── multi-tenancy.md │ │ │ ├── object-management.md │ │ │ ├── publishing.md │ │ │ ├── scheduled.md │ │ │ ├── session-identifiers.md │ │ │ └── topics.md │ │ │ ├── external-tables.md │ │ │ ├── gcp-pubsub │ │ │ ├── conventional-routing.md │ │ │ ├── deadlettering.md │ │ │ ├── index.md │ │ │ ├── interoperability.md │ │ │ ├── listening.md │ │ │ └── publishing.md │ │ │ ├── index.md │ │ │ ├── kafka.md │ │ │ ├── local.md │ │ │ ├── mqtt.md │ │ │ ├── postgresql.md │ │ │ ├── pulsar.md │ │ │ ├── rabbitmq │ │ │ ├── conventional-routing.md │ │ │ ├── deadletterqueues.md │ │ │ ├── index.md │ │ │ ├── interoperability.md │ │ │ ├── listening.md │ │ │ ├── multi-tenancy.md │ │ │ ├── multiple-brokers.md │ │ │ ├── object-management.md │ │ │ ├── publishing.md │ │ │ └── topics.md │ │ │ ├── sns.md │ │ │ ├── sqlserver.md │ │ │ ├── sqs │ │ │ ├── conventional-routing.md │ │ │ ├── deadletterqueues.md │ │ │ ├── index.md │ │ │ ├── interoperability.md │ │ │ ├── listening.md │ │ │ ├── publishing.md │ │ │ └── queues.md │ │ │ └── tcp.md │ ├── migration.md │ ├── runtime.md │ ├── samples.md │ ├── serverless.md │ └── testing.md ├── index.md ├── introduction │ ├── best-practices.md │ ├── from-mediatr.md │ ├── getting-started.md │ ├── support-policy.md │ └── whatiswolverine.md ├── public │ ├── WolverineMessaging.png │ ├── a-frame.png │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── apple-icon-180x180.png │ ├── buffered-endpoint.png │ ├── configuration-model.png │ ├── durable-endpoints.png │ ├── event-storming.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── inline-endpoint.png │ ├── invoke-handler.png │ ├── invoke-message-sequence-diagram.png │ ├── jasper.png │ ├── listen-for-message-sequence-diagram.png │ ├── logo.png │ ├── manifest.json │ ├── messages.jpeg │ ├── modular-monolith-communication-external-broker.png │ ├── modular-monolith-local-queues.png │ ├── modular-monolith.png │ ├── modules-hitting-same-database.png │ ├── nodes-and-agents.png │ ├── ping-pong.png │ ├── publish-event-to-multiple-handlers.png │ ├── publish-message-sequence-diagram.png │ ├── real_wolverine.jpeg │ ├── receive-message-twice.png │ ├── sending-message.png │ └── wolverine-subscriptions.png ├── tutorials │ ├── cqrs-with-marten.md │ ├── index.md │ ├── mediator.md │ ├── middleware.md │ ├── modular-monolith.md │ ├── ping-pong.md │ ├── railway-programming.md │ └── vertical-slice-architecture.md └── vite.config.js ├── global.json ├── kill-dotnet.bat ├── mdsnippets.json ├── netlify.toml ├── package-lock.json ├── package.json ├── src ├── Extensions │ ├── Wolverine.FluentValidation.Tests │ │ ├── Samples.cs │ │ ├── Usings.cs │ │ ├── Wolverine.FluentValidation.Tests.csproj │ │ ├── configuration_specs.cs │ │ ├── end_to_end.cs │ │ └── internals_tests.cs │ ├── Wolverine.FluentValidation │ │ ├── AssemblyAttributes.cs │ │ ├── IFailureAction.cs │ │ ├── Internals │ │ │ ├── FailureAction.cs │ │ │ ├── FluentValidationExecutor.cs │ │ │ ├── FluentValidationPolicy.cs │ │ │ └── WolverineFluentValidationMarker.cs │ │ ├── Wolverine.FluentValidation.csproj │ │ └── WolverineFluentValidationExtensions.cs │ ├── Wolverine.MemoryPack.Tests │ │ ├── Messages.cs │ │ ├── Samples.cs │ │ ├── Wolverine.MemoryPack.Tests.csproj │ │ ├── end_to_end.cs │ │ └── serialization_configuration.cs │ ├── Wolverine.MemoryPack │ │ ├── AssemblyAttributes.cs │ │ ├── Internal │ │ │ └── MemoryPackMessageSerializer.cs │ │ ├── Wolverine.MemoryPack.csproj │ │ └── WolverineMemoryPackSerializationExtensions.cs │ ├── Wolverine.MessagePack.Tests │ │ ├── Messages.cs │ │ ├── Samples.cs │ │ ├── Wolverine.MessagePack.Tests.csproj │ │ ├── end_to_end.cs │ │ └── serialization_configuration.cs │ └── Wolverine.MessagePack │ │ ├── AssemblyAttributes.cs │ │ ├── Internal │ │ └── MessagePackMessageSerializer.cs │ │ ├── Wolverine.MessagePack.csproj │ │ └── WolverineMessagePackSerializationExtensions.cs ├── Http │ ├── NSwagDemonstrator │ │ ├── Endpoints.cs │ │ ├── HelloEndpoint.cs │ │ ├── NSwagDemonstrator.csproj │ │ ├── NSwagDemonstrator.http │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── TodoListEndpoint.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── OpenApiDemonstrator │ │ ├── Endpoints.cs │ │ ├── OpenApiDemonstrator.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── SqlServerOutboxWebService │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SqlServerOutboxWebService.csproj │ │ ├── SqlServerOutboxWebService.http │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── StaticCodeGenDemonstrator │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── BadMessageHandler2100878584.cs │ │ │ │ └── POST_test.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── StaticCodeGenDemonstrator.csproj │ │ ├── StaticCodeGenDemonstrator.http │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Wolverine.AdminApi │ │ ├── Wolverine.AdminApi.csproj │ │ └── WolverineAdminApiExtensions.cs │ ├── Wolverine.Http.FluentValidation │ │ ├── FluentValidationExtension.cs │ │ ├── IProblemDetailSource.cs │ │ ├── Internals │ │ │ ├── FluentValidationHttpExecutor.cs │ │ │ ├── HttpChainFluentValidationPolicy.cs │ │ │ └── ProblemDetailSource.cs │ │ ├── Wolverine.Http.FluentValidation.csproj │ │ └── WolverineHttpOptionsExtensions.cs │ ├── Wolverine.Http.Marten │ │ ├── AggregateAttribute.cs │ │ ├── CompiledQueryWriterPolicy.cs │ │ ├── DocumentAttribute.cs │ │ ├── LoadAggregateFrame.cs │ │ ├── MemberAccessFrame.cs │ │ ├── SetVariableToNullIfSoftDeletedFrame.cs │ │ ├── Wolverine.Http.Marten.csproj │ │ ├── WolverineHttpOptionsExtensions.cs │ │ └── WolverineTenantDetectedSessionFactory.cs │ ├── Wolverine.Http.Tests.DifferentAssembly │ │ ├── Validation │ │ │ └── ValidatedEndpoint.cs │ │ └── Wolverine.Http.Tests.DifferentAssembly.csproj │ ├── Wolverine.Http.Tests │ │ ├── Bugs │ │ │ ├── Bug_1004_allow_nullable_bools.cs │ │ │ ├── Bug_1295_aggregate_handler_should_not_try_to_use_query_string.cs │ │ │ ├── Bug_1421_nullable_querystring.cs │ │ │ ├── Bug_1424_optional_route_parameters.cs │ │ │ ├── Bug_281_erroneous_215.cs │ │ │ ├── Bug_450_using_decimal_as_a_return_value.cs │ │ │ ├── Bug_463_codegen_with_IQuerySession.cs │ │ │ ├── Bug_505_required_attribute_not_working.cs │ │ │ ├── Bug_563_too_many_contexts.cs │ │ │ ├── Bug_568_do_not_freak_out_over_Refit.cs │ │ │ ├── Bug_582_erroneous_faliure_ack.cs │ │ │ ├── Bug_608_using_route_variables_in_middleware_without_argument.cs │ │ │ ├── Bug_766_status_code_overwritten.cs │ │ │ ├── Bug_772_Saga_codegen.cs │ │ │ ├── Bug_865_returning_IResult_using_Auto_codegen.cs │ │ │ ├── Bug_926_form_file_used_by_middleware.cs │ │ │ ├── Bug_934_using_custom_lock_class.cs │ │ │ ├── Bug_970_starting_up_in_mediator_only_mode.cs │ │ │ ├── Bug_using_fromquery_with_aggregatehandler.cs │ │ │ └── bug_298_variable_named_event.cs │ │ ├── DocumentationSamples.cs │ │ ├── IntegrationContext.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── POST_api_tenants_tenant_counters_id_inc.cs │ │ │ │ └── POST_api_tenants_tenant_counters_id_inc2.cs │ │ ├── Marten │ │ │ ├── compiled_query_writer.cs │ │ │ ├── document_attribute_required_usage.cs │ │ │ ├── document_attribute_usage.cs │ │ │ ├── message_publishing_with_entity_attribute_usage.cs │ │ │ ├── multi_tenanted_session_factory_without_wolverine.cs │ │ │ ├── using_aggregate_handler_workflow.cs │ │ │ ├── using_ancillary_stores.cs │ │ │ ├── using_read_aggregate_attribute.cs │ │ │ └── using_write_by_id.cs │ │ ├── Parallelization.cs │ │ ├── Samples │ │ │ ├── ConfiguringJson.cs │ │ │ └── MultiTenancy.cs │ │ ├── Transport │ │ │ └── http_transport_end_to_end.cs │ │ ├── Usings.cs │ │ ├── Wolverine.Http.Tests.csproj │ │ ├── WolverineActionDescriptorTests.cs │ │ ├── acceptresponse_statuscode.cs │ │ ├── asparameters_binding.cs │ │ ├── bootstrap_with_no_persistence.cs │ │ ├── building_a_saga_and_publishing_other_messages_from_http_endpoint.cs │ │ ├── correlation_id_from_request_through_to_message_context.cs │ │ ├── dead_letter_endpoints.cs │ │ ├── determining_valid_response_types.cs │ │ ├── end_to_end.cs │ │ ├── endpoint_adds_requesttype_audit_tags_to_activity.cs │ │ ├── endpoint_discovery_and_construction.cs │ │ ├── fluent_validation_middleware.cs │ │ ├── from_form_binding.cs │ │ ├── from_query_binding.cs │ │ ├── header_binding.cs │ │ ├── initializing_endpoints_from_method_call.cs │ │ ├── mapping_routes_to_wolverine_handlers.cs │ │ ├── multi_tenancy_detection_and_integration.cs │ │ ├── open_api_generation.cs │ │ ├── override_durability_mode_to_solo.cs │ │ ├── posting_json.cs │ │ ├── problem_details_usage_in_http_middleware.cs │ │ ├── publishing_messages_from_http_endpoint.cs │ │ ├── publishing_messages_from_middleware.cs │ │ ├── respecting_fromservices_attribute.cs │ │ ├── route_wildcard.cs │ │ ├── routename_applies_routenamemetadata_to_route.cs │ │ ├── sending_messages_from_http_endpoint.cs │ │ ├── smoke_test_code_generation_of_endpoints_with_no_service_dependencies.cs │ │ ├── swashbuckle_integration.cs │ │ ├── todo_endpoint_specs.cs │ │ ├── use_cascaded_messages_with_http.cs │ │ ├── using_IResult_in_endpoints.cs │ │ ├── using_container_services_as_method_arguments.cs │ │ ├── using_create_response_and_metadata_derived_from_response_type.cs │ │ ├── using_efcore.cs │ │ ├── using_empty_request_attribute.cs │ │ ├── using_form_parameters.cs │ │ ├── using_http_context_elements_in_routes.cs │ │ ├── using_keyed_services.cs │ │ ├── using_marten.cs │ │ ├── using_middleware.cs │ │ ├── using_newtonsoft_for_serialization.cs │ │ ├── using_policies_and_attributes_to_customize_handling.cs │ │ ├── using_querystring_parameters.cs │ │ ├── using_storage_actions_and_entity_attribute.cs │ │ └── variable_status_code_return_values.cs │ ├── Wolverine.Http │ │ ├── AssemblyAttributes.cs │ │ ├── CodeGen │ │ │ ├── AsParametersBindingFrame.cs │ │ │ ├── FormBindingFrame.cs │ │ │ ├── FormHandling.cs │ │ │ ├── FromFileStrategy.cs │ │ │ ├── FromHeaderStrategy.cs │ │ │ ├── FromServicesParameterStrategy.cs │ │ │ ├── HttpChainParameterAttributeStrategy.cs │ │ │ ├── HttpContextElements.cs │ │ │ ├── HttpElementVariable.cs │ │ │ ├── IParameterStrategy.cs │ │ │ ├── IReadHttpFrame.cs │ │ │ ├── JsonHandling.cs │ │ │ ├── MessageBusSource.cs │ │ │ ├── MessageBusStrategy.cs │ │ │ ├── ParsedArrayQueryStringValue.cs │ │ │ ├── ProblemDetailsContinuationPolicy.cs │ │ │ ├── QueryStringBindingFrame.cs │ │ │ ├── QueryStringHandling.cs │ │ │ ├── ResultContinuationPolicy.cs │ │ │ ├── RouteHandling.cs │ │ │ ├── WriteContentLength.cs │ │ │ ├── WriteContentType.cs │ │ │ └── WriteJsonFrame.cs │ │ ├── DeadLettersEndpointExtensions.cs │ │ ├── EmptyResponseAttribute.cs │ │ ├── HttpChain.ApiDescription.cs │ │ ├── HttpChain.Codegen.cs │ │ ├── HttpChain.EndpointBuilder.cs │ │ ├── HttpChain.cs │ │ ├── HttpChainSource.cs │ │ ├── HttpGraph.ParameterMatching.cs │ │ ├── HttpGraph.cs │ │ ├── HttpHandler.cs │ │ ├── IHttpAware.cs │ │ ├── IHttpPolicy.cs │ │ ├── Metadata │ │ │ └── FromRouteMetadata.cs │ │ ├── ModifyHttpChainAttribute.cs │ │ ├── NewtonsoftHttpSerialization.cs │ │ ├── NotBodyAttribute.cs │ │ ├── Policies │ │ │ └── RequiredEntityPolicy.cs │ │ ├── Resources │ │ │ ├── EmptyBody204Policy.cs │ │ │ ├── IResourceWriterPolicy.cs │ │ │ ├── JsonResourceWriterPolicy.cs │ │ │ ├── ResultWriterPolicy.cs │ │ │ ├── StatusCodePolicy.cs │ │ │ ├── StringResourceWriterPolicy.cs │ │ │ └── WolverineProducesResponseTypeMetadata.cs │ │ ├── Runtime │ │ │ ├── MultiTenancy │ │ │ │ ├── ArgumentDetection.cs │ │ │ │ ├── ClaimsPrincipalDetection.cs │ │ │ │ ├── DetectTenantIdFrame.cs │ │ │ │ ├── FallbackDefault.cs │ │ │ │ ├── ITenantDetection.cs │ │ │ │ ├── QueryStringDetection.cs │ │ │ │ ├── RequestHeaderDetection.cs │ │ │ │ ├── SubDomainNameDetection.cs │ │ │ │ └── TenantIdDetection.cs │ │ │ ├── PublishingEndpoint.cs │ │ │ ├── RequestIdMiddleware.cs │ │ │ └── SendingEndpoint.cs │ │ ├── ServiceCollectionExtensions.cs │ │ ├── StubDisposable.cs │ │ ├── TenancyMode.cs │ │ ├── Transport │ │ │ ├── HttpEndpoint.cs │ │ │ ├── HttpSenderProtocol.cs │ │ │ ├── HttpTransport.cs │ │ │ ├── HttpTransportExecutor.cs │ │ │ ├── HttpTransportExtensions.cs │ │ │ ├── HttpTransportSubscriberConfiguration.cs │ │ │ ├── NulloListener.cs │ │ │ └── WolverineHttpTransportClient.cs │ │ ├── Wolverine.Http.csproj │ │ ├── WolverineApiDescriptionProvider.cs │ │ ├── WolverineContinue.cs │ │ ├── WolverineHttpEndpointRouteBuilderExtensions.cs │ │ ├── WolverineHttpOptions.cs │ │ └── WolverineMarker.cs │ └── WolverineWebApi │ │ ├── AssemblyAttributes.cs │ │ ├── AttributeEndpoints.cs │ │ ├── AuditableEndpoint.cs │ │ ├── Bugs │ │ ├── ConvertBookEndpoint.cs │ │ ├── MiddlewareWithAggregateHandlerWorkflow.cs │ │ ├── MyAppLandingEndpoint.cs │ │ └── SomeEndpoint.cs │ │ ├── CascadingEndpoint.cs │ │ ├── CreateEndpoint.cs │ │ ├── CustomMetadata.cs │ │ ├── CustomParameterEndpoint.cs │ │ ├── CustomResourceWriterPolicy.cs │ │ ├── DiscoverMe.cs │ │ ├── EFCore.cs │ │ ├── EfCoreEndpoints.cs │ │ ├── FakeEndpoint.cs │ │ ├── FileUploadEndpoint.cs │ │ ├── FormEndpoints.cs │ │ ├── HeaderUsingEndpoint.cs │ │ ├── HomeEndpoint.cs │ │ ├── HttpContextEndpoints.cs │ │ ├── IgnoredEndpoint.cs │ │ ├── Internal │ │ └── Generated │ │ │ └── WolverineHandlers │ │ │ └── POST_things.cs │ │ ├── KeyedServices.cs │ │ ├── Marten │ │ ├── DocumentRequiredEndpoint.cs │ │ ├── Documents.cs │ │ ├── Orders.cs │ │ ├── StreamCollisionExceptionPolicy.cs │ │ └── Todos.cs │ │ ├── MessageHandlers.cs │ │ ├── MiddlewareEndpoints.cs │ │ ├── NamedRouteEndpoint.cs │ │ ├── OpenApiEndpoints.cs │ │ ├── ProblemDetailsUsage.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── QuerystringEndpoints.cs │ │ ├── ResultEndpoints.cs │ │ ├── SagaExample.cs │ │ ├── Samples │ │ ├── CustomParameter.cs │ │ ├── MediatorController.cs │ │ ├── PublishingMessages.cs │ │ ├── SendingMessages.cs │ │ └── TodoController.cs │ │ ├── ServiceEndpoints.cs │ │ ├── SignupEndpoint.cs │ │ ├── SpecialModifyHttpChainAttribute.cs │ │ ├── StatusCodeEndpoint.cs │ │ ├── SwaggerEndpoints.cs │ │ ├── TestAsyncExtension.cs │ │ ├── TestEndpoints.cs │ │ ├── TestSupport │ │ ├── ExpectMatchAttribute.cs │ │ ├── ExpectProducesAttribute.cs │ │ ├── ExpectStatusCodesAttribute.cs │ │ ├── IOpenApiSource.cs │ │ └── OpenApiExpectationAttribute.cs │ │ ├── Things │ │ └── Code.cs │ │ ├── TinyOrder.cs │ │ ├── Todos │ │ └── Todo2.cs │ │ ├── TraceEndpoint.cs │ │ ├── TracingEndpoint.cs │ │ ├── UserEndpoints.cs │ │ ├── Validation │ │ ├── CreateCustomerEndpoint.cs │ │ └── ValidatedCompoundEndpoint.cs │ │ ├── WebSockets │ │ └── BroadcastHub.cs │ │ ├── WildcardEndpoint.cs │ │ ├── WolverineOperationFilter.cs │ │ ├── WolverineWebApi.csproj │ │ ├── WriteToEndpoints.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json ├── LICENSE.txt ├── Persistence │ ├── DuplicateMessageSending │ │ ├── DuplicateMessageSending.csproj │ │ └── Program.cs │ ├── EfCoreTests │ │ ├── Bug_252_codegen_issue.cs │ │ ├── Bug_661_postgresql_with_ef_core.cs │ │ ├── EfCoreCompilationScenarios.cs │ │ ├── EfCoreTests.csproj │ │ ├── GlobalUsings.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ └── CreateItemHandler1945924936.cs │ │ ├── MultiTenancy │ │ │ ├── MultiTenancyCompliance.cs │ │ │ ├── MultiTenancyDocumentationSamples.cs │ │ │ ├── multi_tenancy_with_marten_managed_multi_tenancy.cs │ │ │ ├── multi_tenancy_with_master_table_approach_postgresql.cs │ │ │ ├── multi_tenancy_with_master_table_approach_sqlserver.cs │ │ │ ├── multi_tenancy_with_shared_database_between_tenants_sql_server.cs │ │ │ ├── multi_tenancy_with_static_tenants_and_connection_strings_for_postgresql.cs │ │ │ ├── multi_tenancy_with_static_tenants_and_connection_strings_for_sqlserver.cs │ │ │ └── multi_tenancy_with_static_tenants_and_data_sources_for_postgresql.cs │ │ ├── NoParallelization.cs │ │ ├── OutboxedMessageHandler.cs │ │ ├── Sagas │ │ │ ├── EfCoreSagaHost.cs │ │ │ ├── SagaDbContext.cs │ │ │ ├── WorkflowStateTable.cs │ │ │ ├── basic_mechanics_with_guid.cs │ │ │ ├── basic_mechanics_with_int.cs │ │ │ ├── basic_mechanics_with_long.cs │ │ │ └── basic_mechanics_with_string.cs │ │ ├── SampleDbContext.cs │ │ ├── SampleUsageWithAutoApplyTransactions.cs │ │ ├── end_to_end_efcore_persistence.cs │ │ ├── persisting_envelopes_with_sqlserver.cs │ │ ├── using_add_dbcontext_with_wolverine_integration.cs │ │ └── using_storage_return_types_and_entity_attributes.cs │ ├── MartenTests │ │ ├── AggregateHandlerAttributeTests.cs │ │ ├── AncillaryStores │ │ │ ├── ancillary_stores_use_different_databases.cs │ │ │ ├── bootstrapping_ancillary_marten_stores_with_wolverine.cs │ │ │ └── notes.md │ │ ├── Bugs │ │ │ ├── Bug_1175_schema_name_with_queues.cs │ │ │ ├── Bug_1427_no_endpoint_error_on_retries.cs │ │ │ ├── Bug_191_marten_aggregate_handler_command_should_not_require_version.cs │ │ │ ├── Bug_215_erroneous_failure_ack_on_invoke_async_of_t.cs │ │ │ ├── Bug_218_auto_transaction_when_session_is_dependency_of_a_dependency.cs │ │ │ ├── Bug_225_compound_handlers_and_marten_event_streams.cs │ │ │ ├── Bug_226_disambiguate_loggers.cs │ │ │ ├── Bug_262_test_does_not_complete_with_timeout_message.cs │ │ │ ├── Bug_305_invoke_async_with_return_not_publishing_with_tuple_return_value.cs │ │ │ ├── Bug_309_service_dependencies_should_be_deep_on_injected_arguments.cs │ │ │ ├── Bug_310_saga_handler_that_returns_another_saga.cs │ │ │ ├── Bug_581_complex_dependency_graph_transactional_middleware_application.cs │ │ │ ├── Bug_756_composite_handler_on_saga.cs │ │ │ ├── Bug_778_multiple_marten_ops_in_tuple.cs │ │ │ ├── Bug_826_issue_with_paused_listener.cs │ │ │ ├── Bug_971_replay_dead_letter_queue_of_event_wrapper.cs │ │ │ ├── ConsumerFeature1 │ │ │ │ └── MyEventConsumer.cs │ │ │ ├── ConsumerFeature2 │ │ │ │ └── MyEventConsumer.cs │ │ │ ├── bug_369_reply_to_local_message_tries_to_be_Outgoing.cs │ │ │ ├── event_forwarding_bug.cs │ │ │ └── event_forwarding_routing_bug.cs │ │ ├── Distribution │ │ │ ├── Support │ │ │ │ ├── MultiTenantContext.cs │ │ │ │ ├── OutputLoggerProvider.cs │ │ │ │ ├── SingleTenantContext.cs │ │ │ │ ├── XUnitEventObserver.cs │ │ │ │ └── XUnitLogger.cs │ │ │ ├── TripDomain │ │ │ │ ├── Arrival.cs │ │ │ │ ├── Day.cs │ │ │ │ ├── DayProjection.cs │ │ │ │ ├── Departure.cs │ │ │ │ ├── Direction.cs │ │ │ │ ├── Distance.cs │ │ │ │ ├── DistanceProjection.cs │ │ │ │ ├── FailingEvent.cs │ │ │ │ ├── IDayEvent.cs │ │ │ │ ├── Movement.cs │ │ │ │ ├── Stop.cs │ │ │ │ ├── Travel.cs │ │ │ │ ├── Trip.cs │ │ │ │ ├── TripAborted.cs │ │ │ │ ├── TripEnded.cs │ │ │ │ ├── TripProjection.cs │ │ │ │ ├── TripStarted.cs │ │ │ │ └── TripStream.cs │ │ │ ├── basic_agent_mechanics_multiple_tenants.cs │ │ │ ├── basic_agent_mechanics_single_tenant.cs │ │ │ ├── blue_green_deployment_with_single_tenant.cs │ │ │ └── parsing_uris.cs │ │ ├── DurableTcpTransportCompliance.cs │ │ ├── EventTypeForwarderTests.cs │ │ ├── GlobalUsings.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── Event3Handler1609469393.cs │ │ │ │ ├── IncrementA2Handler79726078.cs │ │ │ │ ├── IncrementABHandler79726094.cs │ │ │ │ ├── IncrementAHandler1658474384.cs │ │ │ │ ├── IncrementB2Handler483010605.cs │ │ │ │ ├── IncrementBCHandler483010622.cs │ │ │ │ ├── IncrementBHandler1255189857.cs │ │ │ │ ├── IncrementCDHandler1083073314.cs │ │ │ │ ├── IncrementCHandler1473693498.cs │ │ │ │ ├── IncrementDHandler1876978025.cs │ │ │ │ ├── IncrementMany2Handler448896552.cs │ │ │ │ ├── IncrementManyAsyncHandler2038967698.cs │ │ │ │ ├── IncrementManyHandler1569177634.cs │ │ │ │ ├── LetterMessage1Handler726704086.cs │ │ │ │ ├── LetterMessage2Handler839379855.cs │ │ │ │ ├── Outgoing1Handler1264108911.cs │ │ │ │ ├── RaiseAAAHandler1649029811.cs │ │ │ │ ├── RaiseAABCCHandler1413048758.cs │ │ │ │ ├── RaiseABCHandler1483138068.cs │ │ │ │ ├── RaiseBBCCCHandler1900945687.cs │ │ │ │ ├── RaiseHandler985277900.cs │ │ │ │ ├── RaiseIfValidatedHandler2071345539.cs │ │ │ │ ├── RaiseLotsAsyncHandler89313884.cs │ │ │ │ ├── RaiseOnlyDHandler1609388090.cs │ │ │ │ └── ResponseHandler2107844337.cs │ │ ├── MartenOutbox_end_to_end.cs │ │ ├── MartenTests.csproj │ │ ├── Marten_StorageCommand_Smoke_Tests.cs │ │ ├── MultiTenancy │ │ │ ├── MultiTenancyFixture.cs │ │ │ ├── agent_mechanics.cs │ │ │ ├── basic_bootstrapping_and_database_configuration.cs │ │ │ ├── conjoined_tenancy.cs │ │ │ ├── cross_database_message_storage.cs │ │ │ ├── dynamically_spin_up_new_durability_agents_for_new_tenant_databases.cs │ │ │ ├── dynamically_spin_up_new_tenant_databases_in_solo_mode.cs │ │ │ ├── dynamically_spin_up_new_tenant_databases_with_autocreate.cs │ │ │ ├── end_to_end.cs │ │ │ ├── multi_tenancy_queue_usage.cs │ │ │ └── using_tenant_specific_queues_and_subscriptions.cs │ │ ├── NoParallelization.cs │ │ ├── Persistence │ │ │ ├── ItemCreated.cs │ │ │ ├── ItemCreatedHandler.cs │ │ │ ├── MartenBackedListenerContext.cs │ │ │ ├── MartenBackedMessagePersistenceTests.cs │ │ │ ├── Resiliency │ │ │ │ └── QuestionAndAnswer.cs │ │ │ ├── Sagas │ │ │ │ ├── MartenSagaHost.cs │ │ │ │ ├── basic_mechanics_with_guid.cs │ │ │ │ ├── basic_mechanics_with_int.cs │ │ │ │ ├── basic_mechanics_with_long.cs │ │ │ │ └── basic_mechanics_with_string.cs │ │ │ ├── end_to_end_with_persistence.cs │ │ │ └── marten_durability_end_to_end.cs │ │ ├── PostgresqlContext.cs │ │ ├── Saga │ │ │ ├── HappyMealSaga.cs │ │ │ ├── OrderSagaTests.cs │ │ │ ├── RevisionedSaga.cs │ │ │ ├── UserRegistrationSaga.cs │ │ │ ├── When_handling_messages_in_saga.cs │ │ │ ├── When_ordering_a_happy_meal.cs │ │ │ └── starting_saga_by_returning_it_from_handler.cs │ │ ├── Sample │ │ │ ├── BootstrapWithAutoTransactions.cs │ │ │ ├── Endpoints.cs │ │ │ ├── SampleApp.cs │ │ │ └── SampleController.cs │ │ ├── ScheduledJobs │ │ │ ├── MartenDurabilityCompliance.cs │ │ │ └── marten_scheduled_jobs.cs │ │ ├── Subscriptions │ │ │ └── subscriptions_end_to_end.cs │ │ ├── aggregate_handler_workflow.cs │ │ ├── basic_marten_integration.cs │ │ ├── batch_processing.cs │ │ ├── end_to_end_publish_messages_through_marten_to_wolverine.cs │ │ ├── event_streaming.cs │ │ ├── handler_actions_with_implied_marten_operations.cs │ │ ├── handler_actions_with_returned_StartStream.cs │ │ ├── marten_command_workflow_middleware.cs │ │ ├── read_aggregate_attribute_usage.cs │ │ ├── transactional_frame_end_to_end.cs │ │ ├── using_an_aggregate_that_handles_commands.cs │ │ ├── using_storage_return_types_and_entity_attributes.cs │ │ └── validate_empty_stream_key_on_start_stream.cs │ ├── MultiTenantedEfCoreWithPostgreSQL │ │ ├── Migrations │ │ │ ├── 20250519181411_InitialCreateOrders.Designer.cs │ │ │ ├── 20250519181411_InitialCreateOrders.cs │ │ │ ├── ItemsDb │ │ │ │ ├── 20250514191755_InitialCreate.Designer.cs │ │ │ │ ├── 20250514191755_InitialCreate.cs │ │ │ │ └── ItemsDbContextModelSnapshot.cs │ │ │ └── OrdersDbContextModelSnapshot.cs │ │ ├── MultiTenantedEfCoreWithPostgreSQL.csproj │ │ ├── MultiTenantedEfCoreWithPostgreSQL.http │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── MultiTenantedEfCoreWithSqlServer │ │ ├── Migrations │ │ │ ├── ItemsDb │ │ │ │ ├── 20250519140210_InitialCreate.Designer.cs │ │ │ │ ├── 20250519140210_InitialCreate.cs │ │ │ │ └── ItemsDbContextModelSnapshot.cs │ │ │ └── OrdersDb │ │ │ │ ├── 20250519140201_InitialCreate.Designer.cs │ │ │ │ ├── 20250519140201_InitialCreate.cs │ │ │ │ └── OrdersDbContextModelSnapshot.cs │ │ ├── MultiTenantedEfCoreWithSqlServer.csproj │ │ ├── MultiTenantedEfCoreWithSqlServer.http │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── OrderEventSourcingSample │ │ ├── Alternatives │ │ │ └── Signatures.cs │ │ ├── Order.cs │ │ ├── OrderEventSourcingSample.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── PausingAndRestartingListener │ │ ├── PausingAndRestartingListener.csproj │ │ ├── Program.cs │ │ ├── TestMessageHandler.cs │ │ └── WolverineReproDbContext.cs │ ├── PersistenceTests │ │ ├── Agents │ │ │ └── durability_modes.cs │ │ ├── Durability │ │ │ └── CheckRecoverableIncomingMessageOperationTests.cs │ │ ├── DurableFixture.cs │ │ ├── OutboxedMessageHandler.cs │ │ ├── PersistenceTests.csproj │ │ ├── Postgresql │ │ │ └── Transport │ │ │ │ ├── DocumentationSamples.cs │ │ │ │ └── data_operations.cs │ │ ├── PostgresqlContext.cs │ │ ├── SampleDbContext.cs │ │ ├── Samples │ │ │ ├── DocumentationSamples.cs │ │ │ └── DurabilityAgentCustomization.cs │ │ ├── application_of_transaction_middleware.cs │ │ ├── durability_with_local.cs │ │ └── modular_monolith_usage.cs │ ├── PostgresqlTests │ │ ├── Agents │ │ │ ├── control_queue_tests.cs │ │ │ ├── leader_election.cs │ │ │ └── node_persistence.cs │ │ ├── DocumentationSamples.cs │ │ ├── GlobalUsings.cs │ │ ├── LocalPostgresqlBackedTransportCompliance.cs │ │ ├── MultiTenancy │ │ │ ├── MultiTenancyContext.cs │ │ │ └── static_multi_tenancy.cs │ │ ├── NoParallelization.cs │ │ ├── PostgresqlContext.cs │ │ ├── PostgresqlMessageStoreTests.cs │ │ ├── PostgresqlMessageStore_DQL_expiration.cs │ │ ├── PostgresqlMessageStore_with_DeadLetter_Expiration.cs │ │ ├── PostgresqlMessageStore_with_IdAndDestination_Identity.cs │ │ ├── PostgresqlTests.csproj │ │ ├── Sagas │ │ │ ├── configuring_saga_table_storage.cs │ │ │ ├── lightweight_saga_persistence.cs │ │ │ ├── order_saga_example.cs │ │ │ └── saga_storage_operations.cs │ │ ├── Transport │ │ │ ├── PostgreSQLTransportTests.cs │ │ │ ├── PostgresqlQueueTests.cs │ │ │ ├── basic_functionality.cs │ │ │ ├── compliance_tests.cs │ │ │ ├── end_to_end_from_scratch.cs │ │ │ ├── external_message_tables.cs │ │ │ ├── inbox_outbox_usage.cs │ │ │ └── stateful_resource_smoke_tests.cs │ │ ├── configuration_extension_methods.cs │ │ ├── deadletter_admin_compliance.cs │ │ ├── extension_registrations.cs │ │ ├── message_store_initialization_and_configuration.cs │ │ └── using_default_message_schema_name.cs │ ├── RavenDbTests │ │ ├── Code.cs │ │ ├── DocumentationSamples.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── CompleteFourHandler1230864511.cs │ │ │ │ ├── CompleteOneHandler1612253335.cs │ │ │ │ ├── CompleteTwoHandler402398939.cs │ │ │ │ ├── FinishItAllHandler1534262635.cs │ │ │ │ ├── StringCompleteThreeHandler606415888.cs │ │ │ │ ├── StringDoThreeHandler1820069266.cs │ │ │ │ ├── StringStartHandler2085759971.cs │ │ │ │ └── WildcardStartHandler784149372.cs │ │ ├── Internals │ │ │ ├── DeadLetterMessage_mapping.cs │ │ │ ├── IncomingMessage_mapping.cs │ │ │ └── OutgoingMessage_mapping.cs │ │ ├── RavenDbTests.csproj │ │ ├── leadership_election_compliance.cs │ │ ├── leadership_locking.cs │ │ ├── message_store_compliance.cs │ │ ├── message_store_compliance_with_message_identity_using_id_and_destination.cs │ │ ├── node_persistence_compliance.cs │ │ ├── playing.cs │ │ ├── ravendb_durability_end_to_end.cs │ │ ├── saga_storage_compliance.cs │ │ ├── scheduled_job_compliance.cs │ │ ├── transactional_middleware.cs │ │ └── using_storage_return_types_and_entity_attributes.cs │ ├── SharedPersistenceModels │ │ ├── AssemblyAttributes.cs │ │ ├── Items │ │ │ ├── ApproveItem1.cs │ │ │ ├── ApproveItem2.cs │ │ │ ├── ApproveItem3.cs │ │ │ ├── Item.cs │ │ │ ├── ItemEndpoints.cs │ │ │ ├── ItemsDbContext.cs │ │ │ ├── SampleDbContext.cs │ │ │ └── StartNewItem.cs │ │ ├── Orders │ │ │ ├── ApproveOrder.cs │ │ │ ├── CreditLimitExceeded.cs │ │ │ ├── CreditReserved.cs │ │ │ ├── Order.cs │ │ │ ├── OrderApproved.cs │ │ │ ├── OrderCompleted.cs │ │ │ ├── OrderCreated.cs │ │ │ ├── OrderPlaced.cs │ │ │ ├── OrderRejected.cs │ │ │ ├── PlaceOrder.cs │ │ │ ├── RejectOrder.cs │ │ │ └── ReservceCredit.cs │ │ ├── SharedPersistenceModels.csproj │ │ └── TestingOverrides.cs │ ├── SqlServerTests │ │ ├── Agents │ │ │ ├── control_queue_tests.cs │ │ │ ├── leader_election.cs │ │ │ └── node_persistence.cs │ │ ├── GlobalUsings.cs │ │ ├── NoParallelization.cs │ │ ├── Persistence │ │ │ ├── ItemCreated.cs │ │ │ ├── ItemSender.cs │ │ │ ├── QuestionAndAnswer.cs │ │ │ ├── SqlServerBackedListenerContext.cs │ │ │ ├── SqlServerBackedListenerTests.cs │ │ │ ├── SqlServerBackedMessageStoreTests.cs │ │ │ ├── SqlServerMessageStoreTests.cs │ │ │ ├── SqlServerMessageStore_DQL_expiration.cs │ │ │ ├── SqlServerMessageStore_with_DeadLetter_Expiration.cs │ │ │ ├── SqlServerMessageStore_with_IdAndDestination_Identity.cs │ │ │ └── deadletter_admin_compliance.cs │ │ ├── Sagas │ │ │ ├── configuring_saga_table_storage.cs │ │ │ ├── lightweight_saga_persistence.cs │ │ │ ├── order_saga_example.cs │ │ │ └── saga_storage_operations.cs │ │ ├── ScheduledJobs │ │ │ ├── SqlServerDurabilityCompliance.cs │ │ │ └── sql_server_scheduled_jobs.cs │ │ ├── SqlServerContext.cs │ │ ├── SqlServerEnvelopeStorageAdminTests.cs │ │ ├── SqlServerTests.csproj │ │ ├── SqlServer_StorageCommand_Smoke_Tests.cs │ │ ├── Transport │ │ │ ├── DocumentationSamples.cs │ │ │ ├── SqlServerQueueTests.cs │ │ │ ├── SqlServerTransportTests.cs │ │ │ ├── compliance_tests.cs │ │ │ ├── data_operations.cs │ │ │ ├── external_message_tables.cs │ │ │ ├── inbox_outbox_usage.cs │ │ │ ├── stateful_resource_smoke_tests.cs │ │ │ └── with_multiple_hosts.cs │ │ ├── WeaselTests.cs │ │ ├── configuration_extension_methods.cs │ │ ├── extension_registrations.cs │ │ ├── message_store_initialization_and_configuration.cs │ │ ├── sqlserver_durability_end_to_end.cs │ │ └── using_default_message_schema_name.cs │ ├── Wolverine.EntityFrameworkCore │ │ ├── AssemblyAttributes.cs │ │ ├── Codegen │ │ │ └── EFCorePersistenceFrameProvider.cs │ │ ├── DbContextOutbox.cs │ │ ├── IDbContextOutbox.cs │ │ ├── IDbContextOutboxFactory.cs │ │ ├── Internals │ │ │ ├── EntityFrameworkCoreBackedPersistence.cs │ │ │ ├── IDbContextBuilder.cs │ │ │ ├── IncomingMessage.cs │ │ │ ├── MappedEnvelopeTransaction.cs │ │ │ ├── OutgoingMessage.cs │ │ │ ├── RawDatabaseEnvelopeTransaction.cs │ │ │ ├── TenantedDbContextBuilderByConnectionString.cs │ │ │ ├── TenantedDbContextBuilderByDbDataSource.cs │ │ │ ├── TenantedDbContextInitializer.cs │ │ │ └── WolverineModelCustomizer.cs │ │ ├── Wolverine.EntityFrameworkCore.csproj │ │ └── WolverineEntityCoreExtensions.cs │ ├── Wolverine.Marten │ │ ├── AggregateHandlerAttribute.cs │ │ ├── AncillaryWolverineOptionsMartenExtensions.cs │ │ ├── AssemblyAttributes.cs │ │ ├── Codegen │ │ │ ├── AncillaryOutboxFactoryFrame.cs │ │ │ ├── CreateDocumentSessionFrame.cs │ │ │ ├── EventStoreFrame.cs │ │ │ ├── LoadAggregateFrame.cs │ │ │ ├── MissingAggregateCheckFrame.cs │ │ │ ├── OpenMartenSessionFrame.cs │ │ │ ├── RegisterEventsFrame.cs │ │ │ └── SessionVariableSource.cs │ │ ├── ConcurrencyStyle.cs │ │ ├── Distribution │ │ │ ├── ProjectionAgent.cs │ │ │ ├── ProjectionAgents.cs │ │ │ └── notes.md │ │ ├── FlushOutgoingMessagesOnCommit.cs │ │ ├── IAggregateHandling.cs │ │ ├── IMartenOp.cs │ │ ├── IMartenOutbox.cs │ │ ├── MartenAggregateHandlerStrategy.cs │ │ ├── MartenBackedPersistenceMarker.cs │ │ ├── MartenEnvelopeTransaction.cs │ │ ├── MartenIntegration.cs │ │ ├── MartenMessageDatabaseSource.cs │ │ ├── MartenStoreAttribute.cs │ │ ├── MartenTestingExtensions.cs │ │ ├── Persistence │ │ │ ├── Operations │ │ │ │ ├── MartenStorageExtensions.cs │ │ │ │ ├── StoreIncomingEnvelope.cs │ │ │ │ └── StoreOutgoingEnvelope.cs │ │ │ └── Sagas │ │ │ │ ├── DocumentSessionOperationFrame.cs │ │ │ │ ├── LoadDocumentFrame.cs │ │ │ │ └── MartenPersistenceFrameProvider.cs │ │ ├── PublishIncomingEventsBeforeCommit.cs │ │ ├── Publishing │ │ │ ├── MartenToWolverineMessageBatch.cs │ │ │ ├── MartenToWolverineOutbox.cs │ │ │ └── OutboxedSessionFactory.cs │ │ ├── ReadAggregateAttribute.cs │ │ ├── Subscriptions │ │ │ ├── BatchSubscription.cs │ │ │ ├── IWolverineSubscription.cs │ │ │ ├── InlineInvoker.cs │ │ │ ├── InnerDataInvoker.cs │ │ │ ├── NulloMessageInvoker.cs │ │ │ ├── PublishingRelay.cs │ │ │ ├── ScopedWolverineSubscriptionRunner.cs │ │ │ ├── WolverineCallbackForCascadingMessages.cs │ │ │ └── WolverineSubscriptionRunner.cs │ │ ├── UnknownAggregateException.cs │ │ ├── UpdatedAggregate.cs │ │ ├── Wolverine.Marten.csproj │ │ └── WolverineOptionsMartenExtensions.cs │ ├── Wolverine.Postgresql │ │ ├── AssemblyAttributes.cs │ │ ├── PostgresqlBackedPersistence.cs │ │ ├── PostgresqlConfigurationExtensions.cs │ │ ├── PostgresqlMessageStore.cs │ │ ├── PostgresqlNodePersistence.cs │ │ ├── PostgresqlTenantedMessageStore.cs │ │ ├── Sagas │ │ │ └── DatabaseSagaSchema.cs │ │ ├── Schema │ │ │ ├── DeadLettersTable.cs │ │ │ ├── IncomingEnvelopeTable.cs │ │ │ └── OutgoingEnvelopeTable.cs │ │ ├── Transport │ │ │ ├── MultiTenantedQueueListener.cs │ │ │ ├── MultiTenantedQueueSender.cs │ │ │ ├── PostgresqlListenerConfiguration.cs │ │ │ ├── PostgresqlPersistenceExpression.cs │ │ │ ├── PostgresqlQueue.cs │ │ │ ├── PostgresqlQueueListener.cs │ │ │ ├── PostgresqlQueueSender.cs │ │ │ ├── PostgresqlSubscriberConfiguration.cs │ │ │ ├── PostgresqlTransport.cs │ │ │ ├── QueueTable.cs │ │ │ ├── ScheduledMessageTable.cs │ │ │ ├── StickyPostgresqlQueueListenerAgent.cs │ │ │ ├── StickyPostgresqlQueueListenerAgentFamily.cs │ │ │ └── TenantedPostgresqlQueue.cs │ │ ├── Util │ │ │ └── CommandExtensions.cs │ │ └── Wolverine.Postgresql.csproj │ ├── Wolverine.RDBMS │ │ ├── AssemblyAttributes.cs │ │ ├── ConnectionSource.cs │ │ ├── DatabaseBackedPersistenceMarker.cs │ │ ├── DatabaseConstants.cs │ │ ├── DatabaseEnvelopeTransaction.cs │ │ ├── DatabasePersistence.cs │ │ ├── DatabaseSettings.cs │ │ ├── Durability │ │ │ ├── CheckRecoverableIncomingMessagesOperation.cs │ │ │ ├── CheckRecoverableOutgoingMessagesOperation.cs │ │ │ ├── DeleteExpiredDeadLetterMessagesOperation.cs │ │ │ ├── DeleteExpiredEnvelopesOperation.cs │ │ │ ├── MoveReplayableErrorMessagesToIncomingOperation.cs │ │ │ ├── NodeRecoveryOperation.cs │ │ │ ├── PersistNodeRecord.cs │ │ │ └── RunScheduledMessagesOperation.cs │ │ ├── DurabilityAgent.cs │ │ ├── IMessageDatabase.cs │ │ ├── MessageDatabase.Admin.cs │ │ ├── MessageDatabase.Agents.cs │ │ ├── MessageDatabase.DeadLetterAdminService.cs │ │ ├── MessageDatabase.DeadLetters.cs │ │ ├── MessageDatabase.Incoming.cs │ │ ├── MessageDatabase.Outgoing.cs │ │ ├── MessageDatabase.Polling.cs │ │ ├── MessageDatabase.Scheduled.cs │ │ ├── MessageDatabase.Tenants.cs │ │ ├── MessageDatabase.Weasel.cs │ │ ├── MessageDatabase.cs │ │ ├── MigrationLogger.cs │ │ ├── MultiTenancy │ │ │ ├── IMessageDatabaseSource.cs │ │ │ ├── MasterTenantSource.cs │ │ │ └── MessageDatabaseDiscovery.cs │ │ ├── Polling │ │ │ ├── DatabaseBatcher.cs │ │ │ ├── DatabaseOperationBatch.cs │ │ │ ├── IDatabaseOperation.cs │ │ │ └── IDoNotReturnData.cs │ │ ├── SagaConfigurationExtensions.cs │ │ ├── Sagas │ │ │ ├── DatabaseSagaStorage.cs │ │ │ ├── IDatabaseSagaSchema.cs │ │ │ └── SagaTableDefinition.cs │ │ ├── Transport │ │ │ ├── DatabaseControlEndpoint.cs │ │ │ ├── DatabaseControlListener.cs │ │ │ ├── DatabaseControlSender.cs │ │ │ ├── DatabaseControlTransport.cs │ │ │ ├── DeleteExpiredMessages.cs │ │ │ ├── ExternalDbTransport.cs │ │ │ ├── ExternalDbTransportExtensions.cs │ │ │ ├── ExternalMessageTable.cs │ │ │ ├── ExternalMessageTableListener.cs │ │ │ ├── IExternalMessageTable.cs │ │ │ └── PollDatabaseControlQueue.cs │ │ ├── Usings.cs │ │ └── Wolverine.RDBMS.csproj │ ├── Wolverine.RavenDb │ │ ├── IRavenDbOp.cs │ │ ├── Internals │ │ │ ├── AgentAssignment.cs │ │ │ ├── BuildAsyncDocumentSession.cs │ │ │ ├── DeadLetterMessage.cs │ │ │ ├── DeadLetterQueueReplayer.cs │ │ │ ├── Durability │ │ │ │ ├── RavenDbDurabilityAgent.Incoming.cs │ │ │ │ ├── RavenDbDurabilityAgent.Outgoing.cs │ │ │ │ ├── RavenDbDurabilityAgent.Scheduled.cs │ │ │ │ └── RavenDbDurabilityAgent.cs │ │ │ ├── IRavenDbOutbox.cs │ │ │ ├── IncomingMessage.cs │ │ │ ├── LoadDocumentFrame.cs │ │ │ ├── OutgoingMessage.cs │ │ │ ├── RavenDbEnvelopeTransaction.cs │ │ │ ├── RavenDbMessageStore.Admin.cs │ │ │ ├── RavenDbMessageStore.DeadLetters.cs │ │ │ ├── RavenDbMessageStore.Inbox.cs │ │ │ ├── RavenDbMessageStore.Locking.cs │ │ │ ├── RavenDbMessageStore.NodeAgents.cs │ │ │ ├── RavenDbMessageStore.Outbox.cs │ │ │ ├── RavenDbMessageStore.cs │ │ │ ├── RavenDbOutbox.cs │ │ │ ├── RavenDbPersistenceFrameProvider.cs │ │ │ └── TransactionalFrame.cs │ │ ├── Wolverine.RavenDb.csproj │ │ └── WolverineRavenDbExtensions.cs │ └── Wolverine.SqlServer │ │ ├── AssemblyAttributes.cs │ │ ├── Persistence │ │ ├── SqlServerMessageStore.cs │ │ └── SqlServerNodePersistence.cs │ │ ├── Sagas │ │ └── DatabaseSagaSchema.cs │ │ ├── Schema │ │ ├── DeadLettersTable.cs │ │ ├── EnvelopeIdTable.cs │ │ ├── IncomingEnvelopeTable.cs │ │ ├── OutgoingEnvelopeTable.cs │ │ ├── WolverineStoredProcedure.cs │ │ ├── uspDeleteIncomingEnvelopes.sql │ │ ├── uspDeleteOutgoingEnvelopes.sql │ │ ├── uspDiscardAndReassignOutgoing.sql │ │ ├── uspMarkIncomingOwnership.sql │ │ └── uspMarkOutgoingOwnership.sql │ │ ├── SqlServerBackedPersistence.cs │ │ ├── SqlServerConfigurationExtensions.cs │ │ ├── SqlServerTenantedMessageStore.cs │ │ ├── Transport │ │ ├── QueueTable.cs │ │ ├── ScheduledMessageTable.cs │ │ ├── SqlServerListenerConfiguration.cs │ │ ├── SqlServerPersistenceExpression.cs │ │ ├── SqlServerQueue.cs │ │ ├── SqlServerQueueListener.cs │ │ ├── SqlServerQueueSender.cs │ │ ├── SqlServerSubscriberConfiguration.cs │ │ ├── SqlServerTransport.cs │ │ └── SqlServerTransportDatabase.cs │ │ ├── Util │ │ └── SqlCommandExtensions.cs │ │ └── Wolverine.SqlServer.csproj ├── Samples │ ├── CQRSWithMarten │ │ ├── TeleHealth.Backend │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── SeedCommand.cs │ │ │ ├── TeleHealth.Backend.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── TeleHealth.Common │ │ │ ├── AppointmentProjection.cs │ │ │ ├── Appointments.cs │ │ │ ├── BoardView.cs │ │ │ ├── BoardViewProjection.cs │ │ │ ├── Boards.cs │ │ │ ├── ConnectionSource.cs │ │ │ ├── ProviderShift.cs │ │ │ ├── Providers.cs │ │ │ └── TeleHealth.Common.csproj │ │ ├── TeleHealth.Tests │ │ │ ├── GettingStarted.cs │ │ │ ├── TeleHealth.Tests.csproj │ │ │ └── TestOutputMartenLogger.cs │ │ └── TeleHealth.WebApi │ │ │ ├── BoardViewEndpoint.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── launchSettings.json │ │ │ ├── ProviderShiftEndpoint.cs │ │ │ ├── TeleHealth.WebApi.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ ├── ChaosSender │ │ ├── ChaosSender.csproj │ │ ├── IMessageRecordRepository.cs │ │ ├── MartenStorage.cs │ │ ├── MessageHandlers.cs │ │ ├── MessageRecord.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ └── SendMessageHandler.cs │ ├── CommandBus │ │ ├── AssemblyAttributes.cs │ │ ├── CommandBus.csproj │ │ ├── HandlerCode.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Diagnostics │ │ ├── DiagnosticsApp │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── DiagnosticsApp.csproj │ │ │ ├── Invoices.cs │ │ │ ├── Program.cs │ │ │ └── Properties │ │ │ │ └── launchSettings.json │ │ ├── DiagnosticsModule │ │ │ ├── Class1.cs │ │ │ └── DiagnosticsModule.csproj │ │ └── DiagnosticsTests │ │ │ ├── DiagnosticsTests.csproj │ │ │ ├── IntegrationContext.cs │ │ │ ├── Usings.cs │ │ │ └── finding_message_types.cs │ ├── DocumentationSamples │ │ ├── BootstrappingSamples.cs │ │ ├── CascadingSamples.cs │ │ ├── CodegenUsage.cs │ │ ├── CompoundHandlerSamples.cs │ │ ├── ConfigureDurableLocalQueueApp.cs │ │ ├── CustomReturnType.cs │ │ ├── CustomWolverineOptions.cs │ │ ├── CustomizingMessageDelivery.cs │ │ ├── DeadLetterQueue.cs │ │ ├── DiagnosticSamples.cs │ │ ├── DisablingOpenTelemetry.cs │ │ ├── DisablingStorageConstruction.cs │ │ ├── DocumentationSamples.csproj │ │ ├── DurabilityModes.cs │ │ ├── EndpointConfiguration.cs │ │ ├── EnqueueSamples.cs │ │ ├── EnvelopeCustomization.cs │ │ ├── ExceptionHandling.cs │ │ ├── ExtensionSamples.cs │ │ ├── HandlerDiscoverySamples.cs │ │ ├── HandlerExamples.cs │ │ ├── HappyMealSaga.cs │ │ ├── ListenerTypes.cs │ │ ├── LocalQueueMessage.cs │ │ ├── LoggingUsage.cs │ │ ├── MartenSubscriptionSamples.cs │ │ ├── MessageBusBasics.cs │ │ ├── MessageDiscovery.cs │ │ ├── MessageVersioning.cs │ │ ├── MessagingConfigurationExamples.cs │ │ ├── MetricsSamples.cs │ │ ├── Middleware.cs │ │ ├── MissingHandlerSamples.cs │ │ ├── OutgoingMessagesSample.cs │ │ ├── PublishingSamples.cs │ │ ├── Quickstart.cs │ │ ├── ScheduledExecutionSamples.cs │ │ ├── SenderAndListener.cs │ │ ├── ServiceRegistration.cs │ │ ├── StaticPublishingRule.cs │ │ ├── TestingSupportSamples.cs │ │ └── using_group_ids.cs │ ├── EFCoreSample │ │ ├── ItemService.Tests │ │ │ ├── ItemService.Tests.csproj │ │ │ ├── Usings.cs │ │ │ ├── end_to_end.cs │ │ │ └── end_to_end_for_dbcontext_not_integrated_with_outbox.cs │ │ └── ItemService │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── CreateItemCommand.cs │ │ │ ├── CreateItemCommandHandler.cs │ │ │ ├── CreateItemController.cs │ │ │ ├── CreateItemWithDbContextNotIntegratedWithOutboxCommandHandler.cs │ │ │ ├── DatabaseSchemaCreator.cs │ │ │ ├── Item.cs │ │ │ ├── ItemCreated.cs │ │ │ ├── ItemCreatedHandler.cs │ │ │ ├── ItemService.csproj │ │ │ ├── ItemsDbContext.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── launchSettings.json │ │ │ ├── README.md │ │ │ └── appsettings.json │ ├── InMemoryMediator │ │ ├── CreateItemCommand.cs │ │ ├── DatabaseSchemaCreator.cs │ │ ├── DoItAllMyselfItemController.cs │ │ ├── InMemoryMediator.csproj │ │ ├── Item.cs │ │ ├── ItemCreated.cs │ │ ├── ItemCreatedHandler.cs │ │ ├── ItemHandler.cs │ │ ├── ItemsController.cs │ │ ├── ItemsDbContext.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── IncidentService │ │ ├── IncidentService.Tests │ │ │ ├── IncidentService.Tests.csproj │ │ │ ├── IntegrationContext.cs │ │ │ └── when_logging_an_incident.cs │ │ └── IncidentService │ │ │ ├── ArchiveIncident.cs │ │ │ ├── CategoriseIncident.cs │ │ │ ├── CloseIncident.cs │ │ │ ├── GetIncidentEndpoint.cs │ │ │ ├── Incident.cs │ │ │ ├── IncidentService.cs │ │ │ ├── IncidentService.csproj │ │ │ ├── IncidentService.http │ │ │ ├── LogIncident.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── todo.md │ ├── KitchenSink │ │ ├── MartenAndRabbitEmailService │ │ │ ├── MartenAndRabbitEmailService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── Worker.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── MartenAndRabbitIssueService │ │ │ ├── IssueAssignedHandler.cs │ │ │ ├── MartenAndRabbitIssueService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── MartenAndRabbitMessages │ │ │ ├── AssignIssue.cs │ │ │ ├── CreateIssue.cs │ │ │ ├── Issue.cs │ │ │ ├── IssueAssigned.cs │ │ │ ├── IssueCreated.cs │ │ │ ├── IssueTask.cs │ │ │ ├── IssueTimeout.cs │ │ │ └── MartenAndRabbitMessages.csproj │ ├── Middleware │ │ ├── AppWithMiddleware.Tests │ │ │ ├── AppWithMiddleware.Tests.csproj │ │ │ ├── Usings.cs │ │ │ └── try_out_the_middleware.cs │ │ └── AppWithMiddleware │ │ │ ├── Account.cs │ │ │ ├── AppWithMiddleware.csproj │ │ │ ├── AssemblyVisibility.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── launchSettings.json │ │ │ ├── README.md │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ ├── MultiTenantedTodoService │ │ ├── MultiTenantedTodoService │ │ │ ├── AssemblyAttribute.cs │ │ │ ├── Endpoints.cs │ │ │ ├── MultiTenantedTodoWebService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── README.md │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── MultiTenantedTodoWebService.Tests │ │ │ ├── MultiTenantedTodoWebService.Tests.csproj │ │ │ ├── Usings.cs │ │ │ └── end_to_end.cs │ ├── OptimizedArtifactWorkflowSample │ │ ├── Handlers.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ └── TrackedMessageHandler1291414011.cs │ │ ├── OptimizedArtifactWorkflowSample.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ └── README.md │ ├── OrderManagement │ │ ├── Messages │ │ │ ├── ApproveOrder.cs │ │ │ ├── CreditLimitExceeded.cs │ │ │ ├── CreditReserved.cs │ │ │ ├── Messages.csproj │ │ │ ├── OrderApproved.cs │ │ │ ├── OrderCompleted.cs │ │ │ ├── OrderCreated.cs │ │ │ ├── OrderPlaced.cs │ │ │ ├── OrderRejected.cs │ │ │ ├── PlaceOrder.cs │ │ │ ├── RejectOrder.cs │ │ │ └── ReservceCredit.cs │ │ ├── Orders │ │ │ ├── Orders.csproj │ │ │ ├── PlaceOrderHandler.cs │ │ │ ├── Program.cs │ │ │ ├── RejectOrderHandler.cs │ │ │ └── Sagas │ │ │ │ └── Order.cs │ │ └── RetailClient │ │ │ ├── Customer.cs │ │ │ ├── Data │ │ │ └── InitialData.cs │ │ │ ├── Program.cs │ │ │ ├── RetailClient.csproj │ │ │ └── Worker.cs │ ├── OrderSagaSample │ │ ├── OrderSaga.cs │ │ ├── OrderSagaSample.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── PingPong │ │ ├── Messages │ │ │ ├── Messages.cs │ │ │ └── Messages.csproj │ │ ├── Pinger │ │ │ ├── Pinger.csproj │ │ │ ├── PongHandler.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── Worker.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── Ponger │ │ │ ├── PingHandler.cs │ │ │ ├── Ponger.csproj │ │ │ └── Program.cs │ ├── PingPongWithRabbitMq │ │ ├── Pinger │ │ │ ├── Messages.cs │ │ │ ├── Pinger.csproj │ │ │ ├── PingerService.cs │ │ │ ├── PongHandler.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── Ponger │ │ │ ├── Messages.cs │ │ │ ├── PingHandler.cs │ │ │ ├── Ponger.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── tye.yaml │ ├── Quickstart │ │ ├── AssignIssue.cs │ │ ├── CreateIssue.cs │ │ ├── CreateIssueHandler.cs │ │ ├── Issue.cs │ │ ├── IssueAssigned.cs │ │ ├── IssueCreated.cs │ │ ├── IssueCreatedHandler.cs │ │ ├── IssueRepository.cs │ │ ├── IssueTask.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── Quickstart.csproj │ │ ├── README.md │ │ ├── User.cs │ │ ├── UserRepository.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── SampleTests │ │ └── SampleTests │ │ │ ├── CommandBusTests.cs │ │ │ └── SampleTests.csproj │ ├── TestHarness │ │ ├── BankingService.Tests │ │ │ ├── AlbaTestHarness.cs │ │ │ ├── BankingService.Tests.csproj │ │ │ └── Usings.cs │ │ └── BankingService │ │ │ ├── AccountCode.cs │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── BankingService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ └── launchSettings.json │ │ │ ├── README.md │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ ├── TodoWebService │ │ ├── TodoWebService │ │ │ ├── AssemblyAttribute.cs │ │ │ ├── Endpoints.cs │ │ │ ├── HelloEndpoint.cs │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── README.md │ │ │ ├── TodoListEndpoint.cs │ │ │ ├── TodoWebService.csproj │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ └── TodoWebServiceTests │ │ │ ├── TodoWebServiceTests.csproj │ │ │ ├── Usings.cs │ │ │ └── end_to_end.cs │ └── WebApiWithMarten │ │ ├── Order.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── WebApiWithMarten.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json ├── Servers.cs ├── Testing │ ├── Benchmarks │ │ ├── Benchmarks.csproj │ │ ├── Driver.cs │ │ ├── InvokeRunner.cs │ │ ├── LocalRunner.cs │ │ ├── PersistenceRunner.cs │ │ ├── Program.cs │ │ ├── RabbitMqRunner.cs │ │ ├── RabbitTesting.cs │ │ ├── TargetHandler.cs │ │ ├── TestMessages_Target.cs │ │ └── targets.json │ ├── ConsoleApp │ │ ├── ConsoleApp.csproj │ │ ├── Handlers.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── Message1Handler700775182.cs │ │ │ │ ├── Message2Handler700775183.cs │ │ │ │ ├── Message3Handler700775184.cs │ │ │ │ ├── Message4Handler700775185.cs │ │ │ │ ├── Message5Handler700775186.cs │ │ │ │ └── PongMessageHandler1540302571.cs │ │ ├── MyAppOptions.cs │ │ ├── Program.cs │ │ └── TestCommand.cs │ ├── CoreTests │ │ ├── Acceptance │ │ │ ├── batch_processing.cs │ │ │ ├── compound_handlers.cs │ │ │ ├── configuring_local_queues.cs │ │ │ ├── discarding_expired_envelopes.cs │ │ │ ├── endpoint_specific_customizations.cs │ │ │ ├── indefinite_scheduled_retries.cs │ │ │ ├── local_invoke_does_not_publish_the_return_value.cs │ │ │ ├── logging_configuration.cs │ │ │ ├── middleware_usage.cs │ │ │ ├── missing_handlers.cs │ │ │ ├── multi_tenancy.cs │ │ │ ├── no_available_route_behavior.cs │ │ │ ├── overriding_delivery_options_when_sending.cs │ │ │ ├── publish_versus_send_mechanics.cs │ │ │ ├── remote_invocation.cs │ │ │ ├── sending_messages_to_named_endpoints.cs │ │ │ ├── sticky_message_handlers.cs │ │ │ ├── using_ISendMyself_as_cascading_message.cs │ │ │ ├── using_async_extensions.cs │ │ │ ├── using_custom_response.cs │ │ │ ├── using_custom_side_effect.cs │ │ │ ├── using_error_handling_attributes.cs │ │ │ ├── using_side_effect_as_return_values.cs │ │ │ ├── using_with_keyed_services.cs │ │ │ ├── warn_if_using_wolverine_before_app_is_started.cs │ │ │ └── wolverine_as_command_bus.cs │ │ ├── BootstrappingSamples.cs │ │ ├── Bugs │ │ │ ├── Bug_1182_infinite_loop_codegen.cs │ │ │ ├── Bug_1336_side_effect_signature.cs │ │ │ ├── Bug_143_disambiguate_logger_variables.cs │ │ │ ├── Bug_147_disambiguate_variables_from_multiple_handlers.cs │ │ │ ├── Bug_229_using_generic_types_with_local_queue_names.cs │ │ │ ├── Bug_263_return_string_from_load_async.cs │ │ │ ├── Bug_263_returning_string_from_middleware_method.cs │ │ │ ├── Bug_267_throw_descriptive_message_on_multiple_variables.cs │ │ │ ├── Bug_312_multiple_handlers_for_same_message_with_same_name_bug_different_namespaces.cs │ │ │ ├── Bug_42_concurrent_creation_of_command_handlers.cs │ │ │ ├── Bug_516_allow_for_middleware_to_overwrite_the_original_message.cs │ │ │ ├── Bug_559_erroneous_failure_ack.cs │ │ │ └── Bug_614_using_ILogger_in_Finally_block.cs │ │ ├── Codegen │ │ │ ├── BruteForceTests.cs │ │ │ ├── ServiceLocationPlanTests.cs │ │ │ ├── ServiceVariablesTests.cs │ │ │ ├── SingletonPlanTests.cs │ │ │ ├── TestingTypes.cs │ │ │ ├── dealing_with_bi_directional_dependencies.cs │ │ │ ├── disposing_disposable_or_async_disposable.cs │ │ │ └── enumerable_dependencies.cs │ │ ├── Compilation │ │ │ ├── CompilationContext.cs │ │ │ ├── can_compile_a_handler_chain_for_an_inner_type.cs │ │ │ ├── can_customize_handler_chains_with_attributes.cs │ │ │ ├── handler_that_uses_ilogger.cs │ │ │ ├── handler_with_optional_side_effect.cs │ │ │ ├── simple_async_message_handlers.cs │ │ │ ├── use_wrappers.cs │ │ │ └── using_container_or_service_provider_in_handlers.cs │ │ ├── Configuration │ │ │ ├── DocumentationSamples.cs │ │ │ ├── EndpointTests.cs │ │ │ ├── HandlerChainSpecificationExtensions.cs │ │ │ ├── HandlerDiscoveryTests.cs │ │ │ ├── SenderConfigurationTests.cs │ │ │ ├── TopicRoutingTester.cs │ │ │ ├── UseWolverineGuardClauseTests.cs │ │ │ ├── auditing_determination.cs │ │ │ ├── bootstrapping_specs.cs │ │ │ ├── can_customize_handler_chain_through_Configure_call_on_HandlerType.cs │ │ │ ├── configuring_deliver_within_rules.cs │ │ │ ├── configuring_endpoints.cs │ │ │ ├── configuring_middleware.cs │ │ │ ├── configuring_return_value_actions.cs │ │ │ ├── disabling_all_external_transports.cs │ │ │ ├── environment_sensitive_configuration.cs │ │ │ ├── extension_loading_and_discovery.cs │ │ │ ├── find_handlers_with_the_default_handler_discovery.cs │ │ │ ├── using_solo_mode_as_override.cs │ │ │ └── when_configuring_StrongOrderedGuarantees_on_listener_endpoint.cs │ │ ├── ConfiguredMessageExtensionsTests.cs │ │ ├── CoreTests.csproj │ │ ├── DeliveryMessageTests.cs │ │ ├── DeliveryOptionsTests.cs │ │ ├── EnvelopeTests.cs │ │ ├── ErrorHandling │ │ │ ├── CircuitBreakerOptionsTests.cs │ │ │ ├── CircuitBreakerTests.cs │ │ │ ├── CircuitBreakerWrappedMessageHandlerTests.cs │ │ │ ├── ComplexMatchTests.cs │ │ │ ├── CompositeContinuationTests.cs │ │ │ ├── ErrorHandlingContext.cs │ │ │ ├── ExceptionMatchTypeTests.cs │ │ │ ├── FailureRuleCollectionTests.cs │ │ │ ├── FailureRuleTests.cs │ │ │ ├── FailureSlotTests.cs │ │ │ ├── Fallback_from_Chain_to_Global_Error_Handling.cs │ │ │ ├── LambdaContinuationTests.cs │ │ │ ├── RequeueContinuationTester.cs │ │ │ ├── RetryNowContinuationTester.cs │ │ │ ├── custom_action_for_inline_messages.cs │ │ │ ├── custom_error_action_raises_new_message.cs │ │ │ ├── message_moves_to_error_queue_with_no_error_handling.cs │ │ │ ├── moving_to_dead_letter_queue.cs │ │ │ └── requeue_mechanics.cs │ │ ├── IntegrationContext.cs │ │ ├── Internal │ │ │ └── Generated │ │ │ │ └── WolverineHandlers │ │ │ │ ├── CSP3Handler460104864.cs │ │ │ │ ├── CSP4Handler299410023.cs │ │ │ │ ├── SayStuffHandler1292291056.cs │ │ │ │ ├── WidgetUsingMessage2Handler1317104740.cs │ │ │ │ └── WidgetUsingMessageHandler4925106.cs │ │ ├── Logging │ │ │ └── ListenerObserverTests.cs │ │ ├── OutgoingMessagesTests.cs │ │ ├── Parallelization.cs │ │ ├── Persistence │ │ │ ├── Sagas │ │ │ │ ├── in_memory_saga.cs │ │ │ │ ├── saga_action_discovery.cs │ │ │ │ ├── saga_id_member_determination.cs │ │ │ │ └── saga_not_found_usages.cs │ │ │ ├── StorageSamples.cs │ │ │ └── using_storage_return_types_and_entity_attributes.cs │ │ ├── Runtime │ │ │ ├── Agents │ │ │ │ ├── AssignAgentTests.cs │ │ │ │ ├── NodeMessageTests.cs │ │ │ │ ├── ReassignAgentTests.cs │ │ │ │ ├── StopRemoteAgentTests.cs │ │ │ │ ├── WolverineNodeTests.cs │ │ │ │ ├── agent_command_serialization.cs │ │ │ │ └── assigning_agent_logic.cs │ │ │ ├── CommandBusTests.cs │ │ │ ├── ErrorReportTests.cs │ │ │ ├── Green │ │ │ │ └── Messages.cs │ │ │ ├── Handlers │ │ │ │ ├── HandlerCallTester.cs │ │ │ │ ├── HandlerChainTests.cs │ │ │ │ ├── HandlerChain_TryFindVariable.cs │ │ │ │ ├── HandlerGraphTests.cs │ │ │ │ ├── MethodInfoExtensionsTester.cs │ │ │ │ └── finding_service_dependencies_of_a_chain.cs │ │ │ ├── Interop │ │ │ │ └── MassTransitEnvelopeTests.cs │ │ │ ├── MessageContextTests.cs │ │ │ ├── MessageSucceededContinuationTester.cs │ │ │ ├── MessagingRootTester.cs │ │ │ ├── MockWolverineRuntime.cs │ │ │ ├── MoveToErrorQueueTester.cs │ │ │ ├── Red │ │ │ │ └── Messages.cs │ │ │ ├── RemoteInvocation │ │ │ │ ├── AcknowledgementTests.cs │ │ │ │ └── FailureAcknowledgementTests.cs │ │ │ ├── ResponseReply │ │ │ │ └── response_handling.cs │ │ │ ├── Routing │ │ │ │ ├── NoNamedEndpointRouteTests.cs │ │ │ │ └── routing_rules.cs │ │ │ ├── Samples │ │ │ │ ├── channels.cs │ │ │ │ └── error_handling.cs │ │ │ ├── SubscriptionTester.cs │ │ │ ├── WolverineTracingTests.cs │ │ │ ├── WorkerQueues │ │ │ │ └── when_durable_receiver_detects_duplicate_incoming_envelope.cs │ │ │ └── using_wolverine_activators.cs │ │ ├── SendingContext.cs │ │ ├── Serialization │ │ │ ├── MimeTypeListTester.cs │ │ │ ├── intrinsic_serialization.cs │ │ │ ├── reading_model_synchronously_by_content_type.cs │ │ │ ├── serialization_and_deserialization.cs │ │ │ └── serialization_configuration.cs │ │ ├── TestMessageContextTests.cs │ │ ├── TestingExtensionsTests.cs │ │ ├── Tracking │ │ │ ├── EnvelopeRecordTests.cs │ │ │ ├── TrackedSessionTester.cs │ │ │ ├── WaitForMessageTester.cs │ │ │ ├── when_determining_if_the_session_is_done.cs │ │ │ └── when_session_is_tracked_for_published_message_without_handler.cs │ │ ├── Transports │ │ │ ├── BackPressureAgentTests.cs │ │ │ ├── BrokerTransportTests.cs │ │ │ ├── Local │ │ │ │ ├── LocalQueueTests.cs │ │ │ │ ├── LocalTransportTests.cs │ │ │ │ └── local_integration_specs.cs │ │ │ ├── ReceiverWithRulesTests.cs │ │ │ ├── RecordingHandler.cs │ │ │ ├── Sending │ │ │ │ ├── BatchedSenderTests.cs │ │ │ │ ├── CircuitWatcherTester.cs │ │ │ │ ├── NulloSenderTester.cs │ │ │ │ └── TenantedSenderTests.cs │ │ │ └── Tcp │ │ │ │ ├── Protocol │ │ │ │ ├── ProtocolContext.cs │ │ │ │ ├── error_in_receiver.cs │ │ │ │ └── super_duper_happy_path.cs │ │ │ │ ├── TcpEndpointTests.cs │ │ │ │ ├── TestingListeningAgent.cs │ │ │ │ ├── message_forwarding.cs │ │ │ │ ├── ping_handling.cs │ │ │ │ └── using_stubbed_listeners.cs │ │ ├── Usings.cs │ │ ├── Util │ │ │ └── WolverineMessageNamingTests.cs │ │ ├── WolverineOptionsTests.cs │ │ ├── appsettings.json │ │ ├── critterstack_defaults_usage.cs │ │ └── respecting_jasper_fx_defaults.cs │ ├── MessageRoutingTests │ │ ├── MessageRoutingContext.cs │ │ ├── MessageRoutingTests.csproj │ │ ├── explicit_rules_always_win.cs │ │ ├── local_only_defaults.cs │ │ ├── separated_handlers_and_using_external_routing_conventions.cs │ │ ├── using_additive_local_routing_and_external_conventions.cs │ │ ├── using_local_routing_disabled_and_external_routing_conventions.cs │ │ ├── using_messaging_conventions_for_both_external_and_local.cs │ │ └── using_separate_handlers.cs │ ├── MetricsDemonstrator │ │ ├── MessagesAndHandlers.cs │ │ ├── MetricsDemonstrator.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ ├── Module1 │ │ ├── IInterfaceMessage.cs │ │ ├── IMessageAbstraction.cs │ │ ├── Module1.csproj │ │ ├── Module1Extension.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── TalkCommand.cs │ ├── Module2 │ │ ├── Handlers.cs │ │ └── Module2.csproj │ ├── OpenTelemetry │ │ ├── OtelMessages │ │ │ ├── Messages.cs │ │ │ └── OtelMessages.csproj │ │ ├── OtelWebApi │ │ │ ├── InitialCommandHandler.cs │ │ │ ├── InternalsVisibleAttribute.cs │ │ │ ├── MessageController.cs │ │ │ ├── OtelWebApi.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── Subscriber1 │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── Subscriber1.csproj │ │ │ ├── Subscriber1Handlers.cs │ │ │ ├── Worker.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── Subscriber2 │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── Subscriber2.csproj │ │ │ ├── Subscriber2Handlers.cs │ │ │ ├── Worker.cs │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── TracingTests │ │ │ ├── HostsFixture.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── TracingTests.csproj │ │ │ ├── Usings.cs │ │ │ ├── correlation_tracing.cs │ │ │ └── interoperability_tests.cs │ │ ├── docker-compose.yml │ │ └── tye.yaml │ ├── OrderExtension │ │ ├── Handlers.cs │ │ └── OrderExtension.csproj │ ├── PolicyTests │ │ ├── PolicyTests.csproj │ │ ├── Usings.cs │ │ └── endpoint_policy_configuration.cs │ ├── SlowTests │ │ ├── RetryBlockTests.cs │ │ ├── SlowTests.csproj │ │ ├── TcpTransport │ │ │ └── LightweightTcpTransportCompliance.cs │ │ ├── delayed_message_end_to_end.cs │ │ ├── in_memory_scheduled_messages.cs │ │ ├── intrinsic_serialization_end_to_end.cs │ │ └── message_timeout_mechanics.cs │ └── Wolverine.ComplianceTests │ │ ├── BaseContext.cs │ │ ├── Compliance │ │ ├── BlueHandler.cs │ │ ├── MessageConsumer.cs │ │ ├── MessageTypes.cs │ │ ├── Messages.cs │ │ ├── Target.cs │ │ └── TransportCompliance.cs │ │ ├── DeadLetterAdminCompliance.cs │ │ ├── ErrorHandling │ │ ├── AttemptTracker.cs │ │ ├── EnvelopeRecordExtensions.cs │ │ ├── ErrorCausingMessage.cs │ │ └── ErrorCausingMessageHandler.cs │ │ ├── FakeAgent.cs │ │ ├── FakeAgentFamily.cs │ │ ├── Fakes │ │ └── GenericFakeTransactionAttribute.cs │ │ ├── HandlerConfigurationExtensions.cs │ │ ├── IgnoreInScanning.cs │ │ ├── LeadershipElectionCompliance.cs │ │ ├── Logger.cs │ │ ├── MessageStoreCompliance.cs │ │ ├── NodePersistenceCompliance.cs │ │ ├── ObjectMother.cs │ │ ├── Sagas │ │ ├── GuidIdentifiedSagaComplianceSpecs.cs │ │ ├── ISagaHost.cs │ │ ├── IntIdentifiedSagaComplianceSpecs.cs │ │ ├── LongIdentifiedSagaComplianceSpecs.cs │ │ ├── SagaTestHarness.cs │ │ ├── StringIdentifiedSagaComplianceSpecs.cs │ │ └── TestMessages.cs │ │ ├── Scheduling │ │ ├── DurabilityComplianceContext.cs │ │ └── ScheduledJobCompliance.cs │ │ ├── SpecificationExtensions.cs │ │ ├── StorageActionCompliance.cs │ │ ├── Wolverine.ComplianceTests.csproj │ │ ├── WolverineHost.cs │ │ └── XUnitEventObserver.cs ├── Transports │ ├── AWS │ │ ├── Wolverine.AmazonSns.Tests │ │ │ ├── AmazonSnsTransportTests.cs │ │ │ ├── BufferedSendingAndReceivingCompliance.cs │ │ │ ├── InlineSendingAndReceivingCompliance.cs │ │ │ ├── Internal │ │ │ │ └── AmazonSnsTopicTests.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── Samples │ │ │ │ └── Bootstrapping.cs │ │ │ ├── Usings.cs │ │ │ ├── Wolverine.AmazonSns.Tests.csproj │ │ │ ├── bootstrapping.cs │ │ │ ├── send_to_topic_and_receive_in_queue.cs │ │ │ ├── send_to_topic_and_receive_in_queue_in_aws.cs │ │ │ ├── send_to_topic_and_receive_in_queue_with_rawMessageDelivery.cs │ │ │ └── sending_compliance_with_prefixes.cs │ │ ├── Wolverine.AmazonSns │ │ │ ├── AmazonSnsListenerConfiguration.cs │ │ │ ├── AmazonSnsSubscriberConfiguration.cs │ │ │ ├── AmazonSnsTransportExtensions.cs │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── ISnsEnvelopeMapper.cs │ │ │ ├── Internal │ │ │ │ ├── AmazonSnsSubscription.cs │ │ │ │ ├── AmazonSnsSubscriptionAttributes.cs │ │ │ │ ├── AmazonSnsTopic.cs │ │ │ │ ├── AmazonSnsTransport.cs │ │ │ │ ├── AmazonSnsTransportConfiguration.cs │ │ │ │ ├── InlineSnsSender.cs │ │ │ │ └── SnsSenderProtocol.cs │ │ │ ├── RawJsonSnsEnvelopeMapper.cs │ │ │ ├── Wolverine.AmazonSns.csproj │ │ │ └── WolverineSnsTransportException.cs │ │ ├── Wolverine.AmazonSqs.Tests │ │ │ ├── AmazonSqsTransportTests.cs │ │ │ ├── BufferedSendingAndReceivingCompliance.cs │ │ │ ├── Bugs │ │ │ │ └── disabling_dead_letter_queue.cs │ │ │ ├── ConventionalRouting │ │ │ │ ├── ConventionalRoutingContext.cs │ │ │ │ ├── PublishedMessage.cs │ │ │ │ ├── RoutedMessage.cs │ │ │ │ ├── RoutedMessageHandler.cs │ │ │ │ ├── conventional_listener_discovery.cs │ │ │ │ ├── discover_with_naming_prefix.cs │ │ │ │ ├── end_to_end_with_conventional_routing.cs │ │ │ │ ├── end_to_end_with_conventional_routing_with_prefix.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_all_defaults.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_overridden_queue_naming.cs │ │ │ │ └── when_discovering_a_sender_with_all_defaults.cs │ │ │ ├── DurableSendingAndReceivingCompliance.cs │ │ │ ├── InlineSendingAndReceivingCompliance.cs │ │ │ ├── Internal │ │ │ │ └── AmazonSqsQueueTests.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── README.md │ │ │ ├── RawJson │ │ │ │ ├── MyNativeJsonMessage.cs │ │ │ │ ├── MyNativeJsonMessageHandler.cs │ │ │ │ ├── RawJsonSqsEnvelopeMapperTests.cs │ │ │ │ ├── receive_raw_json_as_buffered.cs │ │ │ │ └── receive_raw_json_as_inline.cs │ │ │ ├── Samples │ │ │ │ └── Bootstrapping.cs │ │ │ ├── SnsTopic │ │ │ │ └── SnsTopicEnvelopeMapperTests.cs │ │ │ ├── StatefulResourceSmokeTests.cs │ │ │ ├── Usings.cs │ │ │ ├── Wolverine.AmazonSqs.Tests.csproj │ │ │ ├── bootstrapping.cs │ │ │ ├── send_and_receive.cs │ │ │ └── sending_compliance_with_prefixes.cs │ │ └── Wolverine.AmazonSqs │ │ │ ├── AmazonSqsListenerConfiguration.cs │ │ │ ├── AmazonSqsMessageRoutingConvention.cs │ │ │ ├── AmazonSqsSubscriberConfiguration.cs │ │ │ ├── AmazonSqsTransportExtensions.cs │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── CreateQueueRequestExtensions.cs │ │ │ ├── ISqsEnvelopeMapper.cs │ │ │ ├── Internal │ │ │ ├── AmazonSqsEnvelope.cs │ │ │ ├── AmazonSqsQueue.cs │ │ │ ├── AmazonSqsTransport.cs │ │ │ ├── AmazonSqsTransportConfiguration.cs │ │ │ ├── InlineSqsSender.cs │ │ │ ├── SqsListener.cs │ │ │ └── SqsSenderProtocol.cs │ │ │ ├── RawJsonSqsEnvelopeMapper.cs │ │ │ ├── SnsTopicEnvelopeMapper.cs │ │ │ ├── Wolverine.AmazonSqs.csproj │ │ │ └── WolverineSqsTransportException.cs │ ├── Azure │ │ ├── Wolverine.AzureServiceBus.Tests │ │ │ ├── AzureServiceBusTransportTests.cs │ │ │ ├── BufferedSendingAndReceivingCompliance.cs │ │ │ ├── ConventionalRouting │ │ │ │ ├── Broadcasting │ │ │ │ │ ├── BroadcastedMessage.cs │ │ │ │ │ ├── BroadcastedMessageHandler.cs │ │ │ │ │ └── end_to_end_with_conventional_routing.cs │ │ │ │ ├── ConventionalRoutingContext.cs │ │ │ │ ├── PublishedMessage.cs │ │ │ │ ├── RoutedMessage.cs │ │ │ │ ├── RoutedMessageHandler.cs │ │ │ │ ├── conventional_listener_discovery.cs │ │ │ │ ├── discover_with_naming_prefix.cs │ │ │ │ ├── end_to_end_with_conventional_routing.cs │ │ │ │ ├── end_to_end_with_conventional_routing_with_prefix.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_all_defaults.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_overridden_queue_naming.cs │ │ │ │ └── when_discovering_a_sender_with_all_defaults.cs │ │ │ ├── DocumentationSamples.cs │ │ │ ├── InlineSendingAndReceivingCompliance.cs │ │ │ ├── Internal │ │ │ │ ├── AzureServiceBusQueueTests.cs │ │ │ │ ├── AzureServiceBusSubscriptionTests.cs │ │ │ │ └── AzureServiceBusTopicTests.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── Samples.cs │ │ │ ├── StatefulResourceSmokeTests.cs │ │ │ ├── TestingExtensions.cs │ │ │ ├── Wolverine.AzureServiceBus.Tests.csproj │ │ │ ├── clean_off_queues.cs │ │ │ ├── end_to_end.cs │ │ │ ├── leader_election.cs │ │ │ ├── multi_tenancy_through_separate_namespaces.cs │ │ │ ├── send_and_receive_with_topics_and_subscriptions.cs │ │ │ ├── send_and_receive_with_topics_and_subscriptions_with_custom_rule.cs │ │ │ ├── sending_compliance_with_prefixes.cs │ │ │ └── using_native_scheduling.cs │ │ └── Wolverine.AzureServiceBus │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── AzureServiceBusConfiguration.cs │ │ │ ├── AzureServiceBusMessageRoutingConvention.cs │ │ │ ├── AzureServiceBusQueueListenerConfiguration.cs │ │ │ ├── AzureServiceBusQueueSubscriberConfiguration.cs │ │ │ ├── AzureServiceBusSubscriptionListenerConfiguration.cs │ │ │ ├── AzureServiceBusTenant.cs │ │ │ ├── AzureServiceBusTopicBroadcastingRoutingConvention.cs │ │ │ ├── AzureServiceBusTopicSubscriberConfiguration.cs │ │ │ ├── AzureServiceBusTransport.Listening.cs │ │ │ ├── AzureServiceBusTransport.Sending.cs │ │ │ ├── AzureServiceBusTransport.cs │ │ │ ├── AzureServiceBusTransportExtensions.cs │ │ │ ├── IAzureServiceBusEnvelopeMapper.cs │ │ │ ├── Internal │ │ │ ├── AsyncPageableExtensions.cs │ │ │ ├── AzureServiceBusEndpoint.cs │ │ │ ├── AzureServiceBusEnvelope.cs │ │ │ ├── AzureServiceBusEnvelopeMapper.cs │ │ │ ├── AzureServiceBusQueue.cs │ │ │ ├── AzureServiceBusSenderProtocol.cs │ │ │ ├── AzureServiceBusSubscription.cs │ │ │ ├── AzureServiceBusTopic.cs │ │ │ ├── BatchedAzureServiceBusListener.cs │ │ │ ├── InlineAzureServiceBusListener.cs │ │ │ ├── InlineAzureServiceBusSender.cs │ │ │ └── SessionSpecificListener.cs │ │ │ └── Wolverine.AzureServiceBus.csproj │ ├── GCP │ │ ├── Wolverine.Pubsub.Tests │ │ │ ├── BufferedSendingAndReceivingCompliance.cs │ │ │ ├── ConventionalRouting │ │ │ │ ├── ConventionalRoutingContext.cs │ │ │ │ ├── PublishedMessage.cs │ │ │ │ ├── RoutedMessage.cs │ │ │ │ ├── RoutedMessageHandler.cs │ │ │ │ ├── conventional_listener_discovery.cs │ │ │ │ ├── discover_with_naming_prefix.cs │ │ │ │ ├── end_to_end_with_conventional_routing.cs │ │ │ │ ├── end_to_end_with_conventional_routing_with_prefix.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_all_defaults.cs │ │ │ │ ├── when_discovering_a_listening_endpoint_with_overridden_queue_naming.cs │ │ │ │ └── when_discovering_a_sender_with_all_defaults.cs │ │ │ ├── DocumentationSamples.cs │ │ │ ├── DurableSendingAndReceivingCompliance.cs │ │ │ ├── InlineSendingAndReceivingCompliance.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── PubsubEndpointTests.cs │ │ │ ├── PubsubTransportTests.cs │ │ │ ├── StatefulResourceSmokeTests.cs │ │ │ ├── TestingExtensions.cs │ │ │ ├── Wolverine.Pubsub.Tests.csproj │ │ │ ├── send_and_receive.cs │ │ │ └── sending_compliance_with_prefixes.cs │ │ └── Wolverine.Pubsub │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── IPubsubEnvelopeMapper.cs │ │ │ ├── Internal │ │ │ ├── BatchedPubsubListener.cs │ │ │ ├── InlinePubsubListener.cs │ │ │ ├── InlinePubsubSender.cs │ │ │ ├── PubsubEnvelopeMapper.cs │ │ │ ├── PubsubListener.cs │ │ │ └── PubsubSenderProtocol.cs │ │ │ ├── PubsubConfiguration.cs │ │ │ ├── PubsubEndpoint.cs │ │ │ ├── PubsubEnvelope.cs │ │ │ ├── PubsubMessageRoutingConvention.cs │ │ │ ├── PubsubOptions.cs │ │ │ ├── PubsubTopicListenerConfiguration.cs │ │ │ ├── PubsubTopicSubscriberConfiguration.cs │ │ │ ├── PubsubTransport.cs │ │ │ ├── PubsubTransportExtensions.cs │ │ │ ├── SubscriptionNameExtensions.cs │ │ │ ├── Wolverine.Pubsub.csproj │ │ │ ├── WolverinePubsubInvalidEndpointNameException.cs │ │ │ ├── WolverinePubsubTransportException.cs │ │ │ └── WolverinePubsubTransportNotConnectedException.cs │ ├── Kafka │ │ ├── BatchMessaging │ │ │ ├── BatchMessaging.csproj │ │ │ ├── BatchMessaging.http │ │ │ ├── Program.cs │ │ │ ├── Properties │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ └── appsettings.json │ │ ├── Wolverine.Kafka.Tests │ │ │ ├── DocumentationSamples.cs │ │ │ ├── KafkaTransportTests.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── StatefulResourceSmokeTests.cs │ │ │ ├── Usings.cs │ │ │ ├── Wolverine.Kafka.Tests.csproj │ │ │ ├── batch_processing_with_kafka.cs │ │ │ ├── broadcast_to_topic_async.cs │ │ │ ├── broadcast_to_topic_rules.cs │ │ │ ├── compliance.cs │ │ │ ├── configure_consumers_and_publishers.cs │ │ │ ├── publish_and_receive_raw_json.cs │ │ │ └── when_publishing_and_receiving_by_partition_key.cs │ │ └── Wolverine.Kafka │ │ │ ├── IKafkaEnvelopeMapper.cs │ │ │ ├── Internals │ │ │ ├── InlineKafkaSender.cs │ │ │ ├── KafkaEnvelopeMapper.cs │ │ │ ├── KafkaListener.cs │ │ │ └── KafkaTransport.cs │ │ │ ├── KafkaListenerConfiguration.cs │ │ │ ├── KafkaSenderProtocol.cs │ │ │ ├── KafkaSubscriberConfiguration.cs │ │ │ ├── KafkaTopic.cs │ │ │ ├── KafkaTransportExpression.cs │ │ │ ├── KafkaTransportExtensions.cs │ │ │ ├── Usings.cs │ │ │ └── Wolverine.Kafka.csproj │ ├── MQTT │ │ ├── Wolverine.MQTT.Tests │ │ │ ├── MqttTransportTests.cs │ │ │ ├── NoParallelization.cs │ │ │ ├── Samples.cs │ │ │ ├── Usings.cs │ │ │ ├── Wolverine.MQTT.Tests.csproj │ │ │ ├── XUnitLogger.cs │ │ │ ├── ack_smoke_tests.cs │ │ │ ├── broadcast_to_topic_async.cs │ │ │ ├── broadcast_to_topic_by_user_logic.cs │ │ │ ├── broadcast_to_topic_rules.cs │ │ │ ├── buffered_compliance.cs │ │ │ ├── connectivity.cs │ │ │ ├── inline_compliance.cs │ │ │ └── listen_with_topic_wildcards.cs │ │ └── Wolverine.MQTT │ │ │ ├── AckMqttTopic.cs │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── IMqttEnvelopeMapper.cs │ │ │ ├── Internals │ │ │ ├── MqttEnvelopeMapper.cs │ │ │ ├── MqttListener.cs │ │ │ ├── MqttNetLogger.cs │ │ │ └── MqttTransport.cs │ │ │ ├── LocalMqttBroker.cs │ │ │ ├── MqttConnectionException.cs │ │ │ ├── MqttEnvelope.cs │ │ │ ├── MqttListenerConfiguration.cs │ │ │ ├── MqttSubscriberConfiguration.cs │ │ │ ├── MqttTopic.cs │ │ │ ├── MqttTransportExpression.cs │ │ │ ├── MqttTransportExtensions.cs │ │ │ ├── Usings.cs │ │ │ └── Wolverine.MQTT.csproj │ ├── Pulsar │ │ ├── Wolverine.Pulsar.Tests │ │ │ ├── DefaultPulsarProtocolTests.cs │ │ │ ├── DocumentationSamples.cs │ │ │ ├── InlinePulsarTransportComplianceTests.cs │ │ │ ├── PulsarEndpointTests.cs │ │ │ ├── PulsarListenerTests.cs │ │ │ ├── PulsarTransportComplianceTests.cs │ │ │ ├── README.md │ │ │ ├── Wolverine.Pulsar.Tests.csproj │ │ │ ├── endpoint_configuration.cs │ │ │ └── listener_configuration.cs │ │ └── Wolverine.Pulsar │ │ │ ├── AssemblyAttributes.cs │ │ │ ├── InvalidPulsarUriException.cs │ │ │ ├── PulsarEnableRequeuePolicy.cs │ │ │ ├── PulsarEndpoint.cs │ │ │ ├── PulsarEnvelope.cs │ │ │ ├── PulsarEnvelopeMapper.cs │ │ │ ├── PulsarListener.cs │ │ │ ├── PulsarSender.cs │ │ │ ├── PulsarTransport.cs │ │ │ ├── PulsarTransportExtensions.cs │ │ │ ├── PulsarUnsubscribeOnClosePolicy.cs │ │ │ └── Wolverine.Pulsar.csproj │ └── RabbitMQ │ │ ├── ChaosTesting │ │ ├── ChaosDriver.cs │ │ ├── ChaosSpecifications.cs │ │ ├── ChaosTesting.csproj │ │ ├── IMessageRecordRepository.cs │ │ ├── MartenStorage.cs │ │ ├── MessageHandlers.cs │ │ ├── MessageRecord.cs │ │ ├── MultiTenantedChaosSpecifications.cs │ │ ├── NoParallelization.cs │ │ ├── Scripts │ │ │ ├── ReceiverGoesUpAndDown.cs │ │ │ ├── ReceiverStartsLater.cs │ │ │ └── Simplistic.cs │ │ ├── SendMessageHandler.cs │ │ └── Usings.cs │ │ ├── CircuitBreakingTests │ │ ├── CircuitBreakerIntegrationContext.cs │ │ ├── CircuitBreakingTests.csproj │ │ ├── NoParallelization.cs │ │ ├── RabbitMq │ │ │ ├── back_pressure_tripping_off.cs │ │ │ ├── buffered_and_parallel.cs │ │ │ ├── buffered_not_parallelized.cs │ │ │ ├── durable_and_not_parallel.cs │ │ │ ├── durable_and_parallel.cs │ │ │ ├── inline_and_parallel.cs │ │ │ └── inline_not_parallelized.cs │ │ ├── Recorder.cs │ │ ├── Samples.cs │ │ ├── SometimesFailsHandler.cs │ │ ├── Usings.cs │ │ ├── local_durable_queue.cs │ │ └── stopping_and_starting_listeners.cs │ │ ├── InteropTests │ │ ├── InteropTests.csproj │ │ ├── MassTransit │ │ │ ├── MassTransitSpecs.cs │ │ │ └── ResponseHandler.cs │ │ ├── NServiceBus │ │ │ ├── NServiceBusFixture.cs │ │ │ ├── NServiceBusSpecs.cs │ │ │ └── ResponseHandler.cs │ │ └── Usings.cs │ │ ├── MassTransitRabbitMqService │ │ ├── InitialMessageResponder.cs │ │ ├── MassTransitRabbitMqService.csproj │ │ ├── Messages.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── Startup.cs │ │ ├── ToMassTransitConsumer.cs │ │ ├── TriggerController.cs │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ │ ├── NServiceBusRabbitMqService │ │ ├── InitialMessageResponder.cs │ │ ├── Messages.cs │ │ ├── NServiceBusRabbitMqService.csproj │ │ ├── Program.cs │ │ ├── Startup.cs │ │ ├── ToExternalMessageConsumer.cs │ │ └── TriggerController.cs │ │ ├── RabbitMqBootstrapping │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── RabbitMqBootstrapping.csproj │ │ ├── appsettings.Development.json │ │ └── appsettings.json │ │ ├── Wolverine.RabbitMQ.Tests │ │ ├── Bugs │ │ │ ├── Bug_189_fails_if_there_are_many_messages_in_queue_on_startup.cs │ │ │ ├── Bug_475_durable_outbox_sending_out_of_order.cs │ │ │ └── Bug_710_rabbit_exchange_errorneously_used_for_system_queues.cs │ │ ├── ConventionalRouting │ │ │ ├── ConventionalRoutingContext.cs │ │ │ ├── ConventionallyRoutedMessage.cs │ │ │ ├── HeadersMessage.cs │ │ │ ├── HeadersMessageHandler.cs │ │ │ ├── PublishedMessage.cs │ │ │ ├── RoutedMessageHandler.cs │ │ │ ├── conventional_listener_discovery.cs │ │ │ ├── discover_with_naming_prefix.cs │ │ │ ├── end_to_end_with_conventional_routing.cs │ │ │ ├── end_to_end_with_conventional_routing_custom_exchange.cs │ │ │ ├── end_to_end_with_conventional_routing_with_prefix.cs │ │ │ ├── when_discovering_a_listening_endpoint_with_all_defaults.cs │ │ │ ├── when_discovering_a_listening_endpoint_with_overridden_queue_naming.cs │ │ │ └── when_discovering_a_sender_with_all_defaults.cs │ │ ├── InlineRabbitMqTransportComplianceTests.cs │ │ ├── Internals │ │ │ ├── ConnectionStringParserTests.cs │ │ │ ├── RabbitMqEndpointTests.cs │ │ │ ├── RabbitMqExchangeTests.cs │ │ │ ├── RabbitMqQueueTests.cs │ │ │ ├── RabbitMqTopicEndpointTests.cs │ │ │ └── multi_tenancy_internals.cs │ │ ├── NoParallelization.cs │ │ ├── RabbitMqListenerConfigurationTests.cs │ │ ├── RabbitMqTransportTests.cs │ │ ├── RouteKeyConvention.cs │ │ ├── Samples.cs │ │ ├── SpecialMapper.cs │ │ ├── StatefulResourceSmokeTests.cs │ │ ├── Wolverine.RabbitMQ.Tests.csproj │ │ ├── application_does_not_fail_without_rabbit_mq_transport_initialized.cs │ │ ├── auto_declaration_of_rabbit_resources.cs │ │ ├── disabling_external_transports_does_not_try_to_connect_to_rabbit.cs │ │ ├── durable_compliance.cs │ │ ├── dynamic_object_creation_smoke_tests.cs │ │ ├── end_to_end.cs │ │ ├── end_to_end_with_named_broker.cs │ │ ├── exchange_queue_binding_model_setup_and_teardown_smoke_tests.cs │ │ ├── exclusive_listeners.cs │ │ ├── interop_friendly_dead_letter_queue_mechanics.cs │ │ ├── interoperability_specs.cs │ │ ├── leader_election.cs │ │ ├── multi_tenancy_through_virtual_hosts.cs │ │ ├── native_dead_letter_queue_mechanics.cs │ │ ├── quorum_queue_compliance.cs │ │ ├── response_queue_disabling.cs │ │ ├── response_queue_mechanics.cs │ │ ├── send_by_topics.cs │ │ ├── sending_compliance_with_prefixes.cs │ │ ├── set_up_virtual_hosts.cs │ │ ├── stream_queue_compliance.cs │ │ └── when_adding_bindings.cs │ │ └── Wolverine.RabbitMQ │ │ ├── AssemblyAttributes.cs │ │ ├── DeadLetterQueue.cs │ │ ├── DynamicObjectCreationExtensions.cs │ │ ├── ExchangeType.cs │ │ ├── IRabbitMqBindableExchange.cs │ │ ├── IRabbitMqExchange.cs │ │ ├── IRabbitMqQueue.cs │ │ ├── Internal │ │ ├── AgentState.cs │ │ ├── ConnectionMonitor.cs │ │ ├── ConnectionStringParser.cs │ │ ├── RabbitMqChannelAgent.cs │ │ ├── RabbitMqChannelCallback.cs │ │ ├── RabbitMqEndpoint.MassTransit.cs │ │ ├── RabbitMqEndpoint.NServiceBus.cs │ │ ├── RabbitMqEndpoint.cs │ │ ├── RabbitMqEnvelope.cs │ │ ├── RabbitMqEnvelopeMapper.cs │ │ ├── RabbitMqExchange.cs │ │ ├── RabbitMqListener.cs │ │ ├── RabbitMqQueue.Bindings.cs │ │ ├── RabbitMqQueue.cs │ │ ├── RabbitMqRouting.cs │ │ ├── RabbitMqSender.cs │ │ ├── RabbitMqTenant.cs │ │ ├── RabbitMqTransport.Resource.cs │ │ ├── RabbitMqTransport.cs │ │ ├── RabbitMqTransportExpression.cs │ │ └── WorkerQueueMessageConsumer.cs │ │ ├── RabbitMqBinding.cs │ │ ├── RabbitMqExchangeConfigurationExpression.cs │ │ ├── RabbitMqListenerConfiguration.cs │ │ ├── RabbitMqMessageRoutingConvention.cs │ │ ├── RabbitMqSubscriberConfiguration.cs │ │ ├── RabbitMqTopicEndpoint.cs │ │ ├── RabbitMqTransportExtensions.cs │ │ ├── TopicBindingExchange.cs │ │ └── Wolverine.RabbitMQ.csproj └── Wolverine │ ├── AssemblyAttributes.cs │ ├── Attributes │ ├── AlwaysPublishResponseAttribute.cs │ ├── AuditAttribute.cs │ ├── DeliverWithinAttribute.cs │ ├── HandlerMethodAttributes.cs │ ├── InteropMessageAttribute.cs │ ├── LocalQueueAttribute.cs │ ├── MaximumAttemptsAttribute.cs │ ├── MessageIdentityAttribute.cs │ ├── MessageTimeoutAttribute.cs │ ├── MiddlewareAttribute.cs │ ├── ModifyChainAttribute.cs │ ├── ModifyEnvelopeAttribute.cs │ ├── ModifyHandlerChainAttribute.cs │ ├── MoveToErrorQueueOnAttribute.cs │ ├── RequeueOnAttribute.cs │ ├── RetryNowAttribute.cs │ ├── ScheduleRetryAttribute.cs │ ├── StickyHandlerAttribute.cs │ ├── TopicAttribute.cs │ ├── TransactionalAttribute.cs │ ├── WolverineFeatureAttribute.cs │ ├── WolverineHandlerAttribute.cs │ ├── WolverineIgnoreAttribute.cs │ ├── WolverineLoggingAttribute.cs │ ├── WolverineMessageAttribute.cs │ ├── WolverineModuleAttribute.cs │ ├── WolverineModuleAttributeT.cs │ └── WolverineParameterAttribute.cs │ ├── BrokerName.cs │ ├── Codegen │ ├── ArrayPlan.cs │ ├── ConstructorPlan.cs │ ├── GetServiceFromScopedContainerFrame.cs │ ├── InjectedSingleton.cs │ ├── InvalidPlan.cs │ ├── MessageMemberVariable.cs │ ├── ScopedContainerCreation.cs │ ├── ServiceCollectionServerVariableSource.cs │ ├── ServiceFamily.cs │ ├── ServiceLocationPlan.cs │ ├── ServicePlan.cs │ ├── ServiceProviderPlan.cs │ ├── ServiceVariables.cs │ ├── SingletonPlan.cs │ └── StandInVariable.cs │ ├── Configuration │ ├── Chain.cs │ ├── Endpoint.cs │ ├── EndpointCollection.cs │ ├── HandlerDiscovery.Diagnostics.cs │ ├── HandlerDiscovery.cs │ ├── IChain.cs │ ├── ICircuitParameters.cs │ ├── IConfigureLocalQueue.cs │ ├── IDelayedEndpointConfiguration.cs │ ├── IEndpointPolicy.cs │ ├── IHandlerPolicy.cs │ ├── IListenerConfiguration.cs │ ├── IPublishToExpression.cs │ ├── IReturnVariableActionSource.cs │ ├── ISubscriberConfiguration.cs │ ├── IWolverinePolicy.cs │ ├── IWolverineReturnType.cs │ ├── ListenerConfiguration.cs │ ├── MessageRoutingContext.cs │ ├── PublishingExpression.cs │ ├── RoutingMode.cs │ ├── SagaPersistenceChainPolicy.cs │ ├── SubscriberConfiguration.cs │ └── WolverineSupplementalCodeFiles.cs │ ├── DeliveryOptions.cs │ ├── DurabilitySettings.cs │ ├── Envelope.Internals.cs │ ├── Envelope.cs │ ├── EnvelopeConstants.cs │ ├── ErrorHandling │ ├── CircuitBreaker.cs │ ├── CircuitBreakerOptions.cs │ ├── CompositeContinuation.cs │ ├── DiscardEnvelope.cs │ ├── ErrorHandlingPolicyExtensions.cs │ ├── ExceptionMatchExtensions.cs │ ├── FailureRule.cs │ ├── FailureRuleCollection.cs │ ├── FailureSlot.cs │ ├── IContinuationSource.cs │ ├── IWithFailurePolicies.cs │ ├── InvalidCircuitBreakerException.cs │ ├── Matches │ │ ├── AlwaysMatches.cs │ │ ├── AndMatch.cs │ │ ├── ComplexMatch.cs │ │ ├── ExcludeType.cs │ │ ├── IExceptionMatch.cs │ │ ├── InnerMatch.cs │ │ ├── MessageContains.cs │ │ ├── OrMatch.cs │ │ ├── TypeMatch.cs │ │ └── UserSupplied.cs │ ├── MoveToErrorQueue.cs │ ├── NoHandlerContinuation.cs │ ├── PauseListenerContinuation.cs │ ├── PolicyExpression.cs │ ├── RequeueContinuation.cs │ ├── RetryInlineContinuation.cs │ └── ScheduledRetryContinuation.cs │ ├── ErrorReport.cs │ ├── ExtensionLoader.cs │ ├── HandlerContinuation.cs │ ├── HostBuilderExtensions.cs │ ├── IDestinationEndpoint.cs │ ├── IEnvelopeLifecycle.cs │ ├── IEnvelopeRule.cs │ ├── IForwardsTo.cs │ ├── IMessage.cs │ ├── IMessageBus.cs │ ├── IMessageContext.cs │ ├── IMissingHandler.cs │ ├── IPolicies.cs │ ├── IResponse.cs │ ├── ISendMyself.cs │ ├── ISerializable.cs │ ├── ISideEffect.cs │ ├── IWolverineExtension.cs │ ├── IWolverineHandler.cs │ ├── IgnoreInScanning.cs │ ├── InvalidHandlerException.cs │ ├── Logging │ ├── AuditMembersPolicy.cs │ ├── AuditToActivityFrame.cs │ ├── AuditedMember.cs │ ├── IMessageLogger.cs │ ├── LogStartingActivity.cs │ ├── LogStartingActivityPolicy.cs │ ├── PersistedCounts.cs │ ├── TagHandlerFrame.cs │ ├── TransportLoggerExtensions.cs │ └── WolverineTracker.cs │ ├── MessageTypePolicies.cs │ ├── MetricsConstants.cs │ ├── Middleware │ ├── ContinuationHandling.cs │ ├── HandlerContinuationFrame.cs │ ├── InvalidWolverineMiddlewareException.cs │ ├── MethodCallAgainstMessage.cs │ └── MiddlewarePolicy.cs │ ├── OutgoingMessages.cs │ ├── Persistence │ ├── AutoApplyTransactions.cs │ ├── Delete.cs │ ├── Durability │ │ ├── DeadLetterManagement │ │ │ ├── DeadLetterEnvelopeQuery.cs │ │ │ ├── DeadLetterEnvelopeQueryParameters.cs │ │ │ ├── DeadLetterEnvelopeResults.cs │ │ │ ├── DeadLetterQueueCount.cs │ │ │ ├── IDeadLetterAdminService.cs │ │ │ ├── MessageBatchRequest.cs │ │ │ ├── MultiStoreDeadLetterAdminService.cs │ │ │ └── TimeRange.cs │ │ ├── DuplicateIncomingEnvelopeException.cs │ │ ├── DurabilityAgentFamily.cs │ │ ├── DurableSendingAgent.cs │ │ ├── IDeadLetters.cs │ │ ├── IEnvelopeTransaction.cs │ │ ├── IMessageStore.cs │ │ ├── IMessageStoreAdmin.cs │ │ ├── MessageStoreResource.cs │ │ ├── MultiTenantedMessageDatabase.Agents.cs │ │ ├── MultiTenantedMessageStore.cs │ │ ├── NullMessageStore.cs │ │ ├── RecoverIncomingMessagesCommand.cs │ │ └── RecoverOutgoingMessagesCommand.cs │ ├── EntityAttribute.cs │ ├── EntityVariable.cs │ ├── EnvelopeGenerator.cs │ ├── FlushOutgoingMessages.cs │ ├── IPersistenceFrameProvider.cs │ ├── IStorageAction.cs │ ├── Insert.cs │ ├── InvalidEntityLoadUsageException.cs │ ├── MultiTenancy │ │ └── CodeGeneration.cs │ ├── NoMatchingPersistenceProviderException.cs │ ├── Nothing.cs │ ├── PersistenceConstants.cs │ ├── PersistenceExtensions.cs │ ├── PersistenceMetrics.cs │ ├── Sagas │ │ ├── AssertSagaStateExistsFrame.cs │ │ ├── ConditionalSagaInsertFrame.cs │ │ ├── CreateMissingSagaFrame.cs │ │ ├── CreateNewSagaFrame.cs │ │ ├── EnrollAndFetchSagaStorageFrame.cs │ │ ├── GenerationRulesExtensions.cs │ │ ├── ISagaOperation.cs │ │ ├── ISagaStorage.cs │ │ ├── ISagaStorageFrame.cs │ │ ├── ISagaSupport.cs │ │ ├── InMemoryPersistenceFrameProvider.cs │ │ ├── InMemorySagaPersistor.cs │ │ ├── InvalidSagaException.cs │ │ ├── LightweightSagaPersistenceFrameProvider.cs │ │ ├── LoadSagaOperation.cs │ │ ├── PullSagaIdFromEnvelopeFrame.cs │ │ ├── PullSagaIdFromMessageFrame.cs │ │ ├── ResolveSagaFrame.cs │ │ ├── SagaChain.cs │ │ ├── SagaIdentityAttribute.cs │ │ ├── SagaOperation.cs │ │ ├── SagaOperationType.cs │ │ ├── SagaStorageVariableSource.cs │ │ ├── SagaStoreOrDeleteFrame.cs │ │ ├── SagaSupport.cs │ │ └── UnknownSagaException.cs │ ├── Storage.cs │ ├── StorageAction.cs │ ├── StorageCommand.cs │ ├── Store.cs │ └── Update.cs │ ├── RespondToSender.cs │ ├── Runtime │ ├── Agents │ │ ├── AgentAssignmentsChanged.cs │ │ ├── AgentCommandException.cs │ │ ├── AgentCommandHandler.cs │ │ ├── AssignAgent.cs │ │ ├── AssignmentGrid.cs │ │ ├── ExclusiveListenerFamily.cs │ │ ├── IAgent.cs │ │ ├── IAgentCommand.cs │ │ ├── IAgentFamily.cs │ │ ├── INodeAgentPersistence.cs │ │ ├── IWolverineObserver.cs │ │ ├── NodeAgentController.EvaluateAssignments.cs │ │ ├── NodeAgentController.HeartBeat.cs │ │ ├── NodeAgentController.StartLocalProcessing.cs │ │ ├── NodeAgentController.StartLocally.cs │ │ ├── NodeAgentController.cs │ │ ├── NodeMessage.cs │ │ ├── NodeRecordType.cs │ │ ├── ReassignAgent.cs │ │ ├── StartAgent.cs │ │ ├── StartAgents.cs │ │ ├── StopAgent.cs │ │ ├── StopRemoteAgent.cs │ │ └── WolverineNode.cs │ ├── Batching │ │ ├── BatchingOptions.cs │ │ ├── BatchingProcessor.cs │ │ └── IMessageBatcher.cs │ ├── DestinationEndpoint.cs │ ├── HandlerPipeline.cs │ ├── Handlers │ │ ├── CaptureCascadingMessages.cs │ │ ├── CodeGenExtensions.cs │ │ ├── Executor.cs │ │ ├── ForwardingHandler.cs │ │ ├── HandlerCall.cs │ │ ├── HandlerChain.cs │ │ ├── HandlerGraph.GeneratesCode.cs │ │ ├── HandlerGraph.ISystemDescribedPart.cs │ │ ├── HandlerGraph.cs │ │ ├── LoggerVariableSource.cs │ │ ├── MessageContextFrame.cs │ │ ├── MessageFrame.cs │ │ ├── MessageHandler.cs │ │ ├── MessageVariable.cs │ │ ├── MethodInfoExtensions.cs │ │ ├── NoHandlerExecutor.cs │ │ └── NoHandlerForEndpointException.cs │ ├── IAgentRuntime.cs │ ├── IContinuation.cs │ ├── IHandlerPipeline.cs │ ├── IServiceContainer.cs │ ├── IWolverineActivator.cs │ ├── IWolverineRuntime.cs │ ├── Interop │ │ └── MassTransit │ │ │ ├── BusHostInfo.cs │ │ │ ├── IMassTransitInterop.cs │ │ │ ├── IMassTransitInteropEndpoint.cs │ │ │ ├── MassTransitEnvelope.cs │ │ │ ├── MassTransitHeaders.cs │ │ │ └── MassTransitJsonSerializer.cs │ ├── InvalidSubscriptionException.cs │ ├── InvocationCallback.cs │ ├── MessageBus.cs │ ├── MessageContext.cs │ ├── MessageSucceededContinuation.cs │ ├── NullContinuation.cs │ ├── RemoteInvocation │ │ ├── Acknowledgement.cs │ │ ├── AcknowledgementHandler.cs │ │ ├── FailureAcknowledgement.cs │ │ ├── FailureAcknowledgementHandler.cs │ │ ├── IReplyListener.cs │ │ ├── ReplyListener.cs │ │ ├── ResponseHandler.cs │ │ └── WolverineRequestReplyException.cs │ ├── Routing │ │ ├── EmptyMessageRouter.cs │ │ ├── ILocalMessageRoutingConvention.cs │ │ ├── IMessageInvoker.cs │ │ ├── IMessageRoute.cs │ │ ├── IMessageRouter.cs │ │ ├── IMessageRoutingConvention.cs │ │ ├── IndeterminateRoutesException.cs │ │ ├── MessageRoute.cs │ │ ├── MessageRouter.cs │ │ ├── MessageRouterBase.cs │ │ ├── NoNamedEndpointRoute.cs │ │ ├── RoutingScope.cs │ │ ├── Subscription.cs │ │ ├── TopicRouting.cs │ │ └── UnknownEndpointException.cs │ ├── Scheduled │ │ ├── EnvelopeReaderWriter.cs │ │ ├── EnvelopeScheduleExtensions.cs │ │ ├── IScheduledJobProcessor.cs │ │ ├── InMemoryScheduledJobProcessor.cs │ │ ├── ScheduledJob.cs │ │ └── ScheduledSendEnvelopeHandler.cs │ ├── Serialization │ │ ├── BinaryWriterExtensions.cs │ │ ├── EnvelopeSerializer.cs │ │ ├── Forwarders.cs │ │ ├── IMessageSerializer.cs │ │ ├── IntrinsicSerializer.cs │ │ ├── JsonArrayPool.cs │ │ ├── MimeTypeList.cs │ │ ├── NewtonsoftSerializer.cs │ │ └── SystemTextJsonSerializer.cs │ ├── ServiceContainer.cs │ ├── UnknownTransportException.cs │ ├── Wolverine.ExecutorFactory.cs │ ├── WolverineRuntime.Agents.cs │ ├── WolverineRuntime.Disposal.cs │ ├── WolverineRuntime.HostService.cs │ ├── WolverineRuntime.MessageTypes.cs │ ├── WolverineRuntime.ObjectPooling.cs │ ├── WolverineRuntime.Routing.cs │ ├── WolverineRuntime.Tracking.cs │ ├── WolverineRuntime.cs │ ├── WolverineTracing.cs │ └── WorkerQueues │ │ ├── BufferedReceiver.cs │ │ ├── DurableReceiver.cs │ │ ├── ILocalQueue.cs │ │ └── InlineReceiver.cs │ ├── Saga.cs │ ├── TestMessageContext.cs │ ├── TestingExtensions.cs │ ├── Tracking │ ├── Diagnostics.cs │ ├── EnvelopeHistory.cs │ ├── EnvelopeRecord.cs │ ├── ITrackedCondition.cs │ ├── ITrackedSession.cs │ ├── MessageEventType.cs │ ├── RecordCollection.cs │ ├── TrackedSession.cs │ ├── TrackedSessionConfiguration.cs │ ├── TrackingStatus.cs │ ├── WaitForMessage.cs │ └── WolverineHostMessageTrackingExtensions.cs │ ├── TransportCollection.cs │ ├── Transports │ ├── BackPressureAgent.cs │ ├── BrokerExpression.cs │ ├── BrokerResource.cs │ ├── BrokerTransport.cs │ ├── EnvelopeMapper.cs │ ├── IBrokerEndpoint.cs │ ├── IBrokerQueue.cs │ ├── IBrokerTransport.cs │ ├── IChannelCallback.cs │ ├── IDurableProcessor.cs │ ├── IListener.cs │ ├── IReceiver.cs │ ├── ITransport.cs │ ├── ListeningAgent.cs │ ├── ListeningStatus.cs │ ├── Local │ │ ├── BufferedLocalQueue.cs │ │ ├── DurableLocalQueue.cs │ │ ├── LocalQueue.cs │ │ ├── LocalQueueConfiguration.cs │ │ └── LocalTransport.cs │ ├── MessageRoutingConvention.cs │ ├── OutgoingMessageBatch.cs │ ├── ParallelListener.cs │ ├── PropertyColumn.cs │ ├── Sending │ │ ├── BatchedSender.cs │ │ ├── BufferedSendingAgent.cs │ │ ├── CircuitWatcher.cs │ │ ├── ISender.cs │ │ ├── ISenderCallback.cs │ │ ├── ISenderProtocol.cs │ │ ├── ISendingAgent.cs │ │ ├── InlineSendingAgent.cs │ │ ├── NullSender.cs │ │ ├── QueueDoesNotExistException.cs │ │ ├── SendingAgent.cs │ │ └── TenantedSender.cs │ ├── Stub │ │ ├── StubChannelCallback.cs │ │ ├── StubEndpoint.cs │ │ └── StubTransport.cs │ ├── Tcp │ │ ├── MessageFailureException.cs │ │ ├── SocketListener.cs │ │ ├── SocketSenderProtocol.cs │ │ ├── TcpEndpoint.cs │ │ ├── TcpTransport.cs │ │ ├── TcpTransportConfigurationExtensions.cs │ │ └── WireProtocol.cs │ ├── TransportBase.cs │ ├── TransportConstants.cs │ └── TransportEndpointException.cs │ ├── Util │ ├── CompositeFilter.cs │ ├── Dataflow │ │ ├── BatchingBlock.cs │ │ ├── ConditionalWaiter.cs │ │ ├── RetryBlock.cs │ │ └── WatchedObservable.cs │ ├── PortFinder.cs │ └── WolverineMessageNaming.cs │ ├── Wolverine.csproj │ ├── WolverineHasNotStartedException.cs │ ├── WolverineOptions.Assemblies.cs │ ├── WolverineOptions.Batching.cs │ ├── WolverineOptions.Description.cs │ ├── WolverineOptions.Endpoints.cs │ ├── WolverineOptions.Extensions.cs │ ├── WolverineOptions.MessageTransformations.cs │ ├── WolverineOptions.Policies.cs │ ├── WolverineOptions.Serialization.cs │ ├── WolverineOptions.cs │ ├── WolverineSerializationException.cs │ └── WolverineSystemPart.cs ├── wolverine.sln └── xunit.runner.json /.github/ISSUE_TEMPLATE/please-use-discord-for-questions-at-https---discord-com-channels-1074998995086225460-1074999099855753317.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Please use Discord for questions at https://discord.com/channels/1074998995086225460/1074999099855753317 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.nuke/parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "build.schema.json", 3 | "Solution": "wolverine.sln", 4 | "Framework": "net9.0" 5 | } 6 | -------------------------------------------------------------------------------- /WolverineWebApiFSharp/Library.fs: -------------------------------------------------------------------------------- 1 | module WolverineWebApiFSharp.DiscoverFSharp 2 | 3 | open Wolverine.Http 4 | 5 | 6 | [] 7 | let myHandler() = 8 | task { 9 | () 10 | } -------------------------------------------------------------------------------- /WolverineWebApiFSharp/WolverineWebApiFSharp.fsproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | true 6 | 8.0 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /build.cmd: -------------------------------------------------------------------------------- 1 | :; set -eo pipefail 2 | :; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd) 3 | :; ${SCRIPT_DIR}/build.sh "$@" 4 | :; exit $? 5 | 6 | @ECHO OFF 7 | powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %* 8 | -------------------------------------------------------------------------------- /build/Configuration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Linq; 4 | using Nuke.Common.Tooling; 5 | 6 | [TypeConverter(typeof(TypeConverter))] 7 | public class Configuration : Enumeration 8 | { 9 | public static Configuration Debug = new Configuration { Value = nameof(Debug) }; 10 | public static Configuration Release = new Configuration { Value = nameof(Release) }; 11 | 12 | public static implicit operator string(Configuration configuration) 13 | { 14 | return configuration.Value; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /build/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /build/Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.js: -------------------------------------------------------------------------------- 1 | import DefaultTheme from 'vitepress/theme' 2 | import './custom.css' 3 | import CustomLayout from './CustomLayout.vue' 4 | 5 | export default { 6 | extends: DefaultTheme, 7 | Layout: CustomLayout 8 | } -------------------------------------------------------------------------------- /docs/guide/index.md: -------------------------------------------------------------------------------- 1 | # Wolverine Guides 2 | 3 | Welcome to the Wolverine documentation website! See the content in the left hand pane. 4 | -------------------------------------------------------------------------------- /docs/guide/messaging/policies.md: -------------------------------------------------------------------------------- 1 | # Endpoint Policies 2 | -------------------------------------------------------------------------------- /docs/guide/messaging/transports/azureservicebus/deadletterqueues.md: -------------------------------------------------------------------------------- 1 | # Dead Letter Queues 2 | 3 | Wolverine.AzureServiceBus happily uses native [Azure Service Bus dead letter queueing](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues) and there's absolutely 4 | nothing you need to do to enable that. 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/guide/messaging/transports/postgresql.md: -------------------------------------------------------------------------------- 1 | # PostgreSQL Transport 2 | 3 | See the [PostgreSQL Transport](/guide/durability/postgresql#postgresql-messaging-transport) documentation in the [PostgreSQL Integration](/guide/durability/postgresql) topic. 4 | -------------------------------------------------------------------------------- /docs/guide/messaging/transports/sqlserver.md: -------------------------------------------------------------------------------- 1 | # Sql Server Transport 2 | 3 | See the [Sql Server Transport](/guide/durability/sqlserver.html#sql-server-messaging-transport) section in the documentation 4 | on `WolverineFx.SqlServer`. 5 | -------------------------------------------------------------------------------- /docs/guide/messaging/transports/sqs/queues.md: -------------------------------------------------------------------------------- 1 | # Configuring Queues 2 | ~~~~ 3 | -------------------------------------------------------------------------------- /docs/public/WolverineMessaging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/WolverineMessaging.png -------------------------------------------------------------------------------- /docs/public/a-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/a-frame.png -------------------------------------------------------------------------------- /docs/public/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/android-icon-144x144.png -------------------------------------------------------------------------------- /docs/public/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/android-icon-192x192.png -------------------------------------------------------------------------------- /docs/public/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/apple-icon-180x180.png -------------------------------------------------------------------------------- /docs/public/buffered-endpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/buffered-endpoint.png -------------------------------------------------------------------------------- /docs/public/configuration-model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/configuration-model.png -------------------------------------------------------------------------------- /docs/public/durable-endpoints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/durable-endpoints.png -------------------------------------------------------------------------------- /docs/public/event-storming.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/event-storming.png -------------------------------------------------------------------------------- /docs/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/favicon-16x16.png -------------------------------------------------------------------------------- /docs/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/favicon-32x32.png -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/favicon.ico -------------------------------------------------------------------------------- /docs/public/inline-endpoint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/inline-endpoint.png -------------------------------------------------------------------------------- /docs/public/invoke-handler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/invoke-handler.png -------------------------------------------------------------------------------- /docs/public/invoke-message-sequence-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/invoke-message-sequence-diagram.png -------------------------------------------------------------------------------- /docs/public/jasper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/jasper.png -------------------------------------------------------------------------------- /docs/public/listen-for-message-sequence-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/listen-for-message-sequence-diagram.png -------------------------------------------------------------------------------- /docs/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/logo.png -------------------------------------------------------------------------------- /docs/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Wolverine", 3 | "icons": [ 4 | { 5 | "src": "/android-icon-192x192.png", 6 | "sizes": "192x192", 7 | "type": "image/png" 8 | }, 9 | { 10 | "src": "/android-icon-144x144.png", 11 | "sizes": "512x512", 12 | "type": "image/png" 13 | } 14 | ], 15 | "theme_color": "#ffffff", 16 | "background_color": "#ffffff", 17 | "display": "standalone" 18 | } -------------------------------------------------------------------------------- /docs/public/messages.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/messages.jpeg -------------------------------------------------------------------------------- /docs/public/modular-monolith-communication-external-broker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/modular-monolith-communication-external-broker.png -------------------------------------------------------------------------------- /docs/public/modular-monolith-local-queues.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/modular-monolith-local-queues.png -------------------------------------------------------------------------------- /docs/public/modular-monolith.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/modular-monolith.png -------------------------------------------------------------------------------- /docs/public/modules-hitting-same-database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/modules-hitting-same-database.png -------------------------------------------------------------------------------- /docs/public/nodes-and-agents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/nodes-and-agents.png -------------------------------------------------------------------------------- /docs/public/ping-pong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/ping-pong.png -------------------------------------------------------------------------------- /docs/public/publish-event-to-multiple-handlers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/publish-event-to-multiple-handlers.png -------------------------------------------------------------------------------- /docs/public/publish-message-sequence-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/publish-message-sequence-diagram.png -------------------------------------------------------------------------------- /docs/public/real_wolverine.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/real_wolverine.jpeg -------------------------------------------------------------------------------- /docs/public/receive-message-twice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/receive-message-twice.png -------------------------------------------------------------------------------- /docs/public/sending-message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/sending-message.png -------------------------------------------------------------------------------- /docs/public/wolverine-subscriptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/docs/public/wolverine-subscriptions.png -------------------------------------------------------------------------------- /docs/vite.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | server: { 3 | fsServe: { 4 | root: '../' 5 | } 6 | }, 7 | build: { 8 | chunkSizeWarningLimit: 3000 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "7.0.101", 4 | "rollForward": "latestMajor", 5 | "allowPrerelease": false 6 | } 7 | } -------------------------------------------------------------------------------- /kill-dotnet.bat: -------------------------------------------------------------------------------- 1 | taskkill /F /IM dotnet.exe /T -------------------------------------------------------------------------------- /mdsnippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "Convention": "InPlaceOverwrite", 3 | "LinkFormat": "GitHub", 4 | "UrlPrefix": "https://github.com/JasperFx/wolverine/blob/main", 5 | "ExcludeMarkdownDirectories": [ 6 | "documentation" 7 | ], 8 | "ExcludeSnippetDirectories": [], 9 | "TreatMissingAsWarning": false 10 | } 11 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "docs/.vitepress/dist/" 3 | 4 | [[redirects]] 5 | from = "/discord" 6 | to = "https://discord.gg/WMxrvegf8H" 7 | status = 301 8 | force = false -------------------------------------------------------------------------------- /src/Extensions/Wolverine.FluentValidation.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; 2 | global using Shouldly; -------------------------------------------------------------------------------- /src/Extensions/Wolverine.FluentValidation/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.FluentValidation.Tests")] 4 | [assembly: InternalsVisibleTo("Wolverine.Http.FluentValidation")] -------------------------------------------------------------------------------- /src/Extensions/Wolverine.FluentValidation/IFailureAction.cs: -------------------------------------------------------------------------------- 1 | using FluentValidation.Results; 2 | 3 | namespace Wolverine.FluentValidation; 4 | 5 | /// 6 | /// What do you do with a validation failure? Generally assumed to throw an 7 | /// exception. Should be registered as a singleton when possible 8 | /// 9 | /// 10 | // ReSharper disable once TypeParameterCanBeVariant 11 | public interface IFailureAction 12 | { 13 | void Throw(T message, IReadOnlyList failures); 14 | } -------------------------------------------------------------------------------- /src/Extensions/Wolverine.FluentValidation/Internals/WolverineFluentValidationMarker.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.FluentValidation.Internals; 2 | 3 | internal class WolverineFluentValidationMarker; -------------------------------------------------------------------------------- /src/Extensions/Wolverine.MemoryPack.Tests/Messages.cs: -------------------------------------------------------------------------------- 1 | using MemoryPack; 2 | 3 | namespace Wolverine.MemoryPack.Tests; 4 | 5 | [MemoryPackable] 6 | public partial class MemoryPackMessage 7 | { 8 | public string Name; 9 | } 10 | 11 | // fake handler 12 | public class MemoryPackMessageHandler 13 | { 14 | public void Handle(MemoryPackMessage message) 15 | { 16 | } 17 | } -------------------------------------------------------------------------------- /src/Extensions/Wolverine.MemoryPack/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.MemoryPack.Tests")] -------------------------------------------------------------------------------- /src/Extensions/Wolverine.MemoryPack/Wolverine.MemoryPack.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MemoryPack serialization for Wolverine Applications 5 | WolverineFx.MemoryPack 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Extensions/Wolverine.MessagePack/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.MessagePack.Tests")] 4 | -------------------------------------------------------------------------------- /src/Extensions/Wolverine.MessagePack/Wolverine.MessagePack.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MessagePack serialization for Wolverine Applications 5 | WolverineFx.MessagePack 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Http/NSwagDemonstrator/HelloEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace NSwagDemonstrator; 4 | 5 | public class HelloEndpoint 6 | { 7 | [WolverineGet("/")] 8 | public string Get() => "Hello."; 9 | } 10 | -------------------------------------------------------------------------------- /src/Http/NSwagDemonstrator/NSwagDemonstrator.http: -------------------------------------------------------------------------------- 1 | @NSwagDemonstrator_HostAddress = http://localhost:5283 2 | 3 | GET {{NSwagDemonstrator_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Http/NSwagDemonstrator/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Http/NSwagDemonstrator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Http/OpenApiDemonstrator/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Http/OpenApiDemonstrator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Http/SqlServerOutboxWebService/SqlServerOutboxWebService.http: -------------------------------------------------------------------------------- 1 | @SqlServerOutboxWebService_HostAddress = http://localhost:5138 2 | 3 | GET {{SqlServerOutboxWebService_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Http/SqlServerOutboxWebService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Http/SqlServerOutboxWebService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Http/StaticCodeGenDemonstrator/StaticCodeGenDemonstrator.http: -------------------------------------------------------------------------------- 1 | @StaticCodeGenDemonstrator_HostAddress = http://localhost:5161 2 | 3 | GET {{StaticCodeGenDemonstrator_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Http/StaticCodeGenDemonstrator/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Http/StaticCodeGenDemonstrator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Http/Wolverine.AdminApi/Wolverine.AdminApi.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Http/Wolverine.Http.Tests.DifferentAssembly/Wolverine.Http.Tests.DifferentAssembly.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/Http/Wolverine.Http.Tests/Parallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Http/Wolverine.Http.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Http/Wolverine.Http.Tests/route_wildcard.cs: -------------------------------------------------------------------------------- 1 | using Shouldly; 2 | 3 | namespace Wolverine.Http.Tests; 4 | 5 | public class route_wildcard : IntegrationContext 6 | { 7 | public route_wildcard(AppFixture fixture) : base(fixture) 8 | { 9 | } 10 | 11 | [Fact] 12 | public async Task wildcard() 13 | { 14 | var body = await Scenario(x => 15 | { 16 | x.Get.Url("/wildcard/one/two/three"); 17 | }); 18 | 19 | body.ReadAsText().ShouldBe("one/two/three"); 20 | } 21 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http.Tests/using_keyed_services.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Http.Tests; 2 | 3 | public class using_keyed_services : IntegrationContext 4 | { 5 | public using_keyed_services(AppFixture fixture) : base(fixture) 6 | { 7 | } 8 | 9 | [Fact] 10 | public async Task using_singleton_service() 11 | { 12 | await Scenario(x => x.Get.Url("/thing/red")); 13 | } 14 | 15 | [Fact] 16 | public async Task using_scoped_service() 17 | { 18 | await Scenario(x => x.Get.Url("/thing/blue")); 19 | } 20 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.Http.Tests")] -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/EmptyResponseAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | 3 | namespace Wolverine.Http; 4 | 5 | /// 6 | /// Marks a Wolverine Http handler as returning no response body. This will make 7 | /// Wolverine ignore the first "return value" as the response 8 | /// 9 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 10 | public class EmptyResponseAttribute : ProducesResponseTypeAttribute 11 | { 12 | public EmptyResponseAttribute() : base(204) 13 | { 14 | } 15 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/Metadata/FromRouteMetadata.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http.Metadata; 2 | 3 | namespace Wolverine.Http.Metadata; 4 | 5 | internal class FromRouteMetadata : IFromRouteMetadata 6 | { 7 | public FromRouteMetadata(string? name) 8 | { 9 | Name = name; 10 | } 11 | 12 | public string? Name { get; } 13 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/NotBodyAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http.Metadata; 2 | 3 | namespace Wolverine.Http; 4 | 5 | /// 6 | /// When used on an HTTP endpoint method, this attribute tells 7 | /// Wolverine that this parameter is *not* sourced from the 8 | /// HTTP request body 9 | /// 10 | [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.ReturnValue)] 11 | public class NotBodyAttribute : Attribute, IFromServiceMetadata; 12 | 13 | -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/Resources/WolverineProducesResponseTypeMetadata.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http.Metadata; 2 | 3 | namespace Wolverine.Http.Resources; 4 | 5 | public class WolverineProducesResponseTypeMetadata : IProducesResponseTypeMetadata 6 | { 7 | public Type? Type { get; init; } 8 | public int StatusCode { get; init; } 9 | public IEnumerable ContentTypes => new[] { "application/json" }; 10 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/Runtime/SendingEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http; 2 | 3 | namespace Wolverine.Http.Runtime; 4 | 5 | public class SendingEndpoint 6 | { 7 | public async ValueTask SendAsync(T message, IMessageContext bus, HttpResponse response) 8 | { 9 | await bus.SendAsync(message); 10 | response.StatusCode = 202; 11 | return "Success."; 12 | } 13 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/ServiceCollectionExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Http; 2 | 3 | public static class ServiceCollectionExtensions; -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/StubDisposable.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Http; 2 | 3 | internal class StubDisposable : IDisposable 4 | { 5 | public void Dispose() 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/TenancyMode.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Http; 2 | 3 | public enum TenancyMode 4 | { 5 | /// 6 | /// This endpoint functions with or without a detected tenant id 7 | /// 8 | Maybe, 9 | 10 | /// 11 | /// This endpoint does not use multi-tenancy at all 12 | /// 13 | None, 14 | 15 | /// 16 | /// This endpoint requires a non null tenant id 17 | /// 18 | Required 19 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/Transport/HttpTransportSubscriberConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Configuration; 2 | 3 | namespace Wolverine.Http.Transport; 4 | 5 | public class HttpTransportSubscriberConfiguration : SubscriberConfiguration 6 | { 7 | internal HttpTransportSubscriberConfiguration(HttpEndpoint endpoint) : base(endpoint) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Http/Wolverine.Http/WolverineMarker.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Http; 2 | 3 | /// 4 | /// Merely marks an endpoint as being sourced from Wolverine 5 | /// 6 | public class WolverineMarker; -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.Http.Tests")] -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/Bugs/MyAppLandingEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi.Bugs; 4 | 5 | public static class MyAppLandingEndpoint 6 | { 7 | [WolverineGet("/api/myapp/registration-price")] 8 | public static decimal GetRegistrationPrice(int numberOfMembers) 9 | { 10 | decimal pricePerMember = numberOfMembers >= 500 ? 450 : 280; 11 | return pricePerMember * numberOfMembers; 12 | } 13 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/CustomMetadata.cs: -------------------------------------------------------------------------------- 1 | namespace WolverineWebApi; 2 | 3 | public class CustomMetadata; -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/CustomParameterEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class CustomParameterEndpoint 6 | { 7 | #region sample_http_endpoint_receiving_now 8 | 9 | [WolverineGet("/now")] 10 | public static string GetNow(DateTimeOffset now) // using the custom parameter strategy for "now" 11 | { 12 | return now.ToString(); 13 | } 14 | 15 | #endregion 16 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/CustomResourceWriterPolicy.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | using Wolverine.Http.Resources; 3 | 4 | public class CustomResourceWriterPolicy : IResourceWriterPolicy 5 | { 6 | public bool TryApply(HttpChain chain) 7 | { 8 | return false; 9 | } 10 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/DiscoverMe.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class DiscoverMe 6 | { 7 | [WolverineGet("/discovered")] 8 | public static string Get() 9 | { 10 | return "You found me!"; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/HomeEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class HomeEndpoint 6 | { 7 | [WolverineGet("/")] 8 | public IResult Index() 9 | { 10 | return Microsoft.AspNetCore.Http.Results.Redirect("/swagger"); 11 | } 12 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/IgnoredEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class IgnoredEndpoint 6 | { 7 | [WolverineGet(("/ignore")), ExcludeFromDescription] 8 | public string Ignore() 9 | { 10 | return "nothing"; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/Internal/Generated/WolverineHandlers/POST_things.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/src/Http/WolverineWebApi/Internal/Generated/WolverineHandlers/POST_things.cs -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/NamedRouteEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class NamedRouteEndpoint 6 | { 7 | #region sample_using_route_name 8 | 9 | [WolverinePost("/named/route", RouteName = "NamedRoute")] 10 | public string Post() 11 | { 12 | return "Hello"; 13 | } 14 | 15 | #endregion 16 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/SpecialModifyHttpChainAttribute.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration; 2 | using JasperFx.CodeGeneration.Frames; 3 | using Wolverine.Http; 4 | 5 | namespace WolverineWebApi; 6 | 7 | public class SpecialModifyHttpChainAttribute : ModifyHttpChainAttribute 8 | { 9 | public override void Modify(HttpChain chain, GenerationRules rules) 10 | { 11 | chain.Middleware.Add(new CommentFrame( 12 | "Just saying hello in the code! Also testing the usage of attributes to customize endpoints")); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/StatusCodeEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class StatusCodeEndpoint 6 | { 7 | [WolverinePost("/status")] 8 | public static int PostStatusCode(StatusCodeRequest request, ILogger logger) 9 | { 10 | logger.LogDebug("Here."); 11 | return request.StatusCode; 12 | } 13 | } 14 | 15 | public record StatusCodeRequest(int StatusCode); -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TestAsyncExtension.cs: -------------------------------------------------------------------------------- 1 | using Wolverine; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class TestAsyncExtension : IAsyncWolverineExtension 6 | { 7 | private readonly IConfiguration _configuration; 8 | 9 | public TestAsyncExtension(IConfiguration configuration) 10 | { 11 | _configuration = configuration; 12 | } 13 | 14 | public ValueTask Configure(WolverineOptions options) 15 | { 16 | options.ServiceName = _configuration["ServiceName"]!; 17 | return new ValueTask(); 18 | } 19 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TestSupport/IOpenApiSource.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.OpenApi.Models; 2 | 3 | namespace WolverineWebApi.TestSupport; 4 | 5 | public interface IOpenApiSource 6 | { 7 | (OpenApiPathItem, OpenApiOperation) FindOpenApiDocument(OperationType httpMethod, string path); 8 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TestSupport/OpenApiExpectationAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.OpenApi.Models; 2 | 3 | namespace WolverineWebApi.TestSupport; 4 | 5 | [AttributeUsage(AttributeTargets.Method)] 6 | public abstract class OpenApiExpectationAttribute : Attribute 7 | { 8 | public abstract void Validate(OpenApiPathItem item, OpenApiOperation op, IOpenApiSource openApi); 9 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TinyOrder.cs: -------------------------------------------------------------------------------- 1 | namespace WolverineWebApi; 2 | 3 | public class TinyOrder 4 | { 5 | public TinyOrder(int orderId) 6 | { 7 | OrderId = orderId; 8 | } 9 | 10 | public TinyOrder() 11 | { 12 | } 13 | 14 | public int OrderId { get; set; } 15 | } 16 | 17 | public record CreateOrder(int OrderId); -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TraceEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class TraceEndpoint 6 | { 7 | [WolverineGet("/trace")] 8 | public string Hey() 9 | { 10 | return "hey"; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/TracingEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine; 2 | using Wolverine.Http; 3 | 4 | namespace WolverineWebApi; 5 | 6 | public class TracingEndpoint 7 | { 8 | [WolverineGet("/correlation")] 9 | public static string GetCorrelation(IMessageContext context) 10 | { 11 | return context.CorrelationId ?? "NONE"; 12 | } 13 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/WildcardEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace WolverineWebApi; 4 | 5 | public class WildcardEndpoint 6 | { 7 | [WolverineGet("/wildcard/{*name}")] 8 | public string Wildcard(string name) 9 | { 10 | return name; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/WriteToEndpoints.cs: -------------------------------------------------------------------------------- 1 | using Marten; 2 | using Marten.AspNetCore; 3 | using Wolverine.Http; 4 | 5 | namespace WolverineWebApi; 6 | 7 | public static class WriteToEndpoints 8 | { 9 | [WolverineGet("/write-to/{id}")] 10 | public static Task GetAssetCodeView(Guid id, IQuerySession session, HttpContext context) 11 | { 12 | return session.Json.WriteById(id, context); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Http/WolverineWebApi/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ServiceName": "HttpTestService" 10 | } 11 | -------------------------------------------------------------------------------- /src/LICENSE.txt: -------------------------------------------------------------------------------- 1 | TODO -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/Sagas/WorkflowStateTable.cs: -------------------------------------------------------------------------------- 1 | using Weasel.SqlServer.Tables; 2 | 3 | namespace EfCoreTests.Sagas; 4 | 5 | internal class WorkflowStateTable : Table 6 | { 7 | public WorkflowStateTable(string tableName) : base(tableName) 8 | { 9 | AddColumn("Id").AsPrimaryKey(); 10 | AddColumn("one"); 11 | AddColumn("two"); 12 | AddColumn("three"); 13 | AddColumn("four"); 14 | AddColumn("Name"); 15 | AddColumn("version"); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/Sagas/basic_mechanics_with_guid.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace EfCoreTests.Sagas; 4 | 5 | public class basic_mechanics_with_guid : GuidIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/Sagas/basic_mechanics_with_int.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace EfCoreTests.Sagas; 4 | 5 | public class basic_mechanics_with_int : IntIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/Sagas/basic_mechanics_with_long.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace EfCoreTests.Sagas; 4 | 5 | public class basic_mechanics_with_long : LongIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/EfCoreTests/Sagas/basic_mechanics_with_string.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace EfCoreTests.Sagas; 4 | 5 | public class basic_mechanics_with_string : StringIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/AncillaryStores/notes.md: -------------------------------------------------------------------------------- 1 | # Notes 2 | 3 | * Go watch any hard coded reference to WolverineRuntime.Storage 4 | * Don't even try to support Postgresql queues with the separate store 5 | * No way today to choose a different session factory for separate store in Marten 6 | -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Bugs/ConsumerFeature2/MyEventConsumer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Logging; 2 | 3 | namespace MartenTests.Bugs.ConsumerFeature2; 4 | 5 | public class MyEventConsumer 6 | { 7 | // once a second consumer like this is present the issue appears 8 | public static void Consume(MyEvent @event, 9 | ILogger logger) 10 | { 11 | logger.LogInformation("consumer 2 processing: {Id}", @event.Id); 12 | } 13 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/Arrival.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class Arrival 4 | { 5 | public int Day { get; set; } 6 | public string State { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/Departure.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class Departure 4 | { 5 | public int Day { get; set; } 6 | public string State { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/Direction.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public enum Direction 4 | { 5 | North, 6 | South, 7 | East, 8 | West 9 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/Distance.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class Distance 4 | { 5 | public Guid Id { get; set; } 6 | public double Total { get; set; } 7 | public int Day { get; set; } 8 | 9 | public override string ToString() 10 | { 11 | return $"{nameof(Id)}: {Id}, {nameof(Total)}: {Total}, {nameof(Day)}: {Day}"; 12 | } 13 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/FailingEvent.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class FailingEvent 4 | { 5 | public static bool SerializationFails = false; 6 | 7 | public FailingEvent() 8 | { 9 | if (SerializationFails) 10 | { 11 | throw new DivideByZeroException("Boom!"); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/IDayEvent.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public interface IDayEvent 4 | { 5 | int Day { get; } 6 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/Stop.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class Stop 4 | { 5 | public TimeOnly Time { get; set; } 6 | public string State { get; set; } 7 | public int Duration { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/TripAborted.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class TripAborted 4 | { 5 | } 6 | 7 | public class Breakdown 8 | { 9 | public bool IsCritical { get; set; } 10 | } 11 | 12 | public class VacationOver 13 | { 14 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/TripEnded.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class TripEnded : IDayEvent 4 | { 5 | public string State { get; set; } 6 | public int Day { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/TripDomain/TripStarted.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Distribution.TripDomain; 2 | 3 | public class TripStarted : IDayEvent 4 | { 5 | public int Day { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Distribution/parsing_uris.cs: -------------------------------------------------------------------------------- 1 | using Shouldly; 2 | using Wolverine.Marten.Distribution; 3 | 4 | namespace MartenTests.Distribution; 5 | 6 | public class parsing_uris 7 | { 8 | [Fact] 9 | public void round_trip_uri() 10 | { 11 | var uri = ProjectionAgents.UriFor("db1", "Proj1:V2:All"); 12 | var (databaseName, identity) = ProjectionAgents.Parse(uri); 13 | 14 | databaseName.ShouldBe("db1"); 15 | identity.ShouldBe("Proj1:V2:All"); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/ItemCreated.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests.Persistence; 2 | 3 | public class ItemCreated 4 | { 5 | public Guid Id { get; set; } 6 | public string Name { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/ItemCreatedHandler.cs: -------------------------------------------------------------------------------- 1 | using Marten; 2 | using Wolverine; 3 | using Wolverine.Attributes; 4 | 5 | namespace MartenTests.Persistence; 6 | 7 | public class ItemCreatedHandler 8 | { 9 | [Transactional] 10 | public static void Handle(ItemCreated created, IDocumentSession session, 11 | Envelope envelope) 12 | { 13 | session.Store(created); 14 | } 15 | } -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/Sagas/basic_mechanics_with_guid.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace MartenTests.Persistence.Sagas; 4 | 5 | public class basic_mechanics_with_guid : GuidIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/Sagas/basic_mechanics_with_int.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace MartenTests.Persistence.Sagas; 4 | 5 | public class basic_mechanics_with_int : IntIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/Sagas/basic_mechanics_with_long.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace MartenTests.Persistence.Sagas; 4 | 5 | public class basic_mechanics_with_long : LongIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/Persistence/Sagas/basic_mechanics_with_string.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Sagas; 2 | 3 | namespace MartenTests.Persistence.Sagas; 4 | 5 | public class basic_mechanics_with_string : StringIdentifiedSagaComplianceSpecs; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/PostgresqlContext.cs: -------------------------------------------------------------------------------- 1 | namespace MartenTests; 2 | 3 | public abstract class PostgresqlContext; -------------------------------------------------------------------------------- /src/Persistence/MartenTests/ScheduledJobs/marten_scheduled_jobs.cs: -------------------------------------------------------------------------------- 1 | using IntegrationTests; 2 | using Marten; 3 | using Wolverine; 4 | using Wolverine.ComplianceTests.Scheduling; 5 | using Wolverine.Marten; 6 | 7 | namespace MartenTests.ScheduledJobs; 8 | 9 | public class marten_scheduled_jobs : ScheduledJobCompliance 10 | { 11 | public override void ConfigurePersistence(WolverineOptions opts) 12 | { 13 | opts.Services.AddMarten(Servers.PostgresConnectionString) 14 | .IntegrateWithWolverine(); 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithPostgreSQL/MultiTenantedEfCoreWithPostgreSQL.http: -------------------------------------------------------------------------------- 1 | @MultiTenantedEfCoreWithPostgreSQL_HostAddress = http://localhost:5143 2 | 3 | GET {{MultiTenantedEfCoreWithPostgreSQL_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithPostgreSQL/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithPostgreSQL/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithSqlServer/MultiTenantedEfCoreWithSqlServer.http: -------------------------------------------------------------------------------- 1 | @MultiTenantedEfCoreWithSqlServer_HostAddress = http://localhost:5240 2 | 3 | GET {{MultiTenantedEfCoreWithSqlServer_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithSqlServer/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Persistence/MultiTenantedEfCoreWithSqlServer/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Persistence/OrderEventSourcingSample/OrderEventSourcingSample.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Persistence/OrderEventSourcingSample/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "OrderEventSourcingSample": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "launchBrowser": true, 7 | "applicationUrl": "http://localhost:5135", 8 | "environmentVariables": { 9 | "ASPNETCORE_ENVIRONMENT": "Development" 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Persistence/OrderEventSourcingSample/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Persistence/OrderEventSourcingSample/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "Marten": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Persistence/PausingAndRestartingListener/WolverineReproDbContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | public class WolverineReproDbContext : DbContext 4 | { 5 | public WolverineReproDbContext(DbContextOptions options) : base(options) { } 6 | } -------------------------------------------------------------------------------- /src/Persistence/PersistenceTests/PostgresqlContext.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | namespace PersistenceTests; 4 | 5 | [Collection("marten")] 6 | public abstract class PostgresqlContext; -------------------------------------------------------------------------------- /src/Persistence/PostgresqlTests/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Persistence/PostgresqlTests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Persistence/PostgresqlTests/PostgresqlContext.cs: -------------------------------------------------------------------------------- 1 | namespace PostgresqlTests; 2 | 3 | [Collection("marten")] 4 | public abstract class PostgresqlContext; -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using JasperFx; 2 | using Wolverine.Attributes; 3 | 4 | [assembly: WolverineModule] 5 | 6 | -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Items/Item.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Items; 2 | 3 | public class Item 4 | { 5 | public Guid Id { get; set; } 6 | public string Name { get; set; } 7 | 8 | public bool Approved { get; set; } 9 | } -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/ApproveOrder.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record ApproveOrder(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/CreditLimitExceeded.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record CreditLimitExceeded(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/CreditReserved.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record CreditReserved(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/OrderApproved.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record OrderApproved(string OrderId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/OrderCompleted.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record OrderCompleted(string OrderId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/OrderCreated.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record OrderCreated(string OrderId, string CustomerId, string CustomerName); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/OrderPlaced.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record OrderPlaced(string OrderId, string CustomerId, decimal Amount); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/OrderRejected.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record OrderRejected(string OrderId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/PlaceOrder.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record PlaceOrder( 4 | string OrderId, 5 | string CustomerId, 6 | decimal Amount 7 | ); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/RejectOrder.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record RejectOrder(string OrderId); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/Orders/ReservceCredit.cs: -------------------------------------------------------------------------------- 1 | namespace SharedPersistenceModels.Orders; 2 | 3 | public record ReserveCredit(string OrderId, string CustomerId, decimal Amount); -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/SharedPersistenceModels.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Persistence/SharedPersistenceModels/TestingOverrides.cs: -------------------------------------------------------------------------------- 1 | using Wolverine; 2 | 3 | namespace SharedPersistenceModels; 4 | 5 | public static class TestingOverrides 6 | { 7 | public static IWolverineExtension? Extension { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/GlobalUsings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/Persistence/ItemCreated.cs: -------------------------------------------------------------------------------- 1 | namespace SqlServerTests.Persistence; 2 | 3 | public class ItemCreated 4 | { 5 | public Guid Id; 6 | public string Name; 7 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/Persistence/ItemSender.cs: -------------------------------------------------------------------------------- 1 | using Wolverine; 2 | using Wolverine.Attributes; 3 | 4 | namespace SqlServerTests.Persistence; 5 | 6 | public class SendItemEndpoint 7 | { 8 | [Transactional] 9 | public ValueTask post_send_item(ItemCreated created, IMessageContext context) 10 | { 11 | return context.SendAsync(created); 12 | } 13 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/Persistence/QuestionAndAnswer.cs: -------------------------------------------------------------------------------- 1 | namespace SqlServerTests.Persistence; 2 | 3 | public class QuestionHandler 4 | { 5 | public Answer Handle(Question question) 6 | { 7 | return new Answer 8 | { 9 | Sum = question.X + question.Y, 10 | Product = question.X * question.Y 11 | }; 12 | } 13 | } 14 | 15 | public class Question 16 | { 17 | public int X; 18 | public int Y; 19 | } 20 | 21 | public class Answer 22 | { 23 | public int Product; 24 | public int Sum; 25 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/ScheduledJobs/sql_server_scheduled_jobs.cs: -------------------------------------------------------------------------------- 1 | using IntegrationTests; 2 | using Wolverine; 3 | using Wolverine.ComplianceTests.Scheduling; 4 | using Wolverine.SqlServer; 5 | 6 | namespace SqlServerTests.ScheduledJobs; 7 | 8 | public class sql_server_scheduled_jobs : ScheduledJobCompliance 9 | { 10 | public override void ConfigurePersistence(WolverineOptions opts) 11 | { 12 | opts.PersistMessagesWithSqlServer(Servers.SqlServerConnectionString); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/SqlServerEnvelopeStorageAdminTests.cs: -------------------------------------------------------------------------------- 1 | namespace SqlServerTests; 2 | 3 | public class SqlServerEnvelopeStorageAdminTests : SqlServerContext 4 | { 5 | [Fact] 6 | public async Task smoke_test_clear_all() 7 | { 8 | await thePersistence.ClearAllAsync(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/Persistence/SqlServerTests/WeaselTests.cs: -------------------------------------------------------------------------------- 1 | namespace SqlServerTests; 2 | 3 | public class WeaselTests; -------------------------------------------------------------------------------- /src/Persistence/Wolverine.EntityFrameworkCore/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("PersistenceTests")] 4 | [assembly: InternalsVisibleTo("EfCoreTests")] -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Marten/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("PersistenceTests")] 4 | [assembly: InternalsVisibleTo("MartenTests")] 5 | [assembly: InternalsVisibleTo("Wolverine.Http.Marten")] -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Marten/ConcurrencyStyle.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Marten; 2 | 3 | public enum ConcurrencyStyle 4 | { 5 | /// 6 | /// Check for concurrency violations optimistically at the point of committing the updated data 7 | /// 8 | Optimistic, 9 | 10 | /// 11 | /// Try to attain an exclusive lock on the data behind the current aggregate 12 | /// 13 | Exclusive 14 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Marten/MartenBackedPersistenceMarker.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | using Wolverine.Postgresql; 3 | 4 | namespace Wolverine.Marten; 5 | 6 | internal class MartenBackedPersistenceMarker : IVariableSource 7 | { 8 | public bool Matches(Type type) 9 | { 10 | return type == GetType(); 11 | } 12 | 13 | public Variable Create(Type type) 14 | { 15 | return Variable.For(); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Marten/UnknownAggregateException.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core.Reflection; 2 | 3 | namespace Wolverine.Marten; 4 | 5 | public class UnknownAggregateException : Exception 6 | { 7 | public UnknownAggregateException(Type aggregateType, object id) : base( 8 | $"Could not find an aggregate of type {aggregateType.FullNameInCode()} with id {id}") 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Postgresql/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.Marten")] 4 | [assembly: InternalsVisibleTo("PersistenceTests")] 5 | [assembly: InternalsVisibleTo("MartenTests")] 6 | [assembly: InternalsVisibleTo("PostgresqlTests")] -------------------------------------------------------------------------------- /src/Persistence/Wolverine.Postgresql/Transport/PostgresqlSubscriberConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Configuration; 2 | 3 | namespace Wolverine.Postgresql.Transport; 4 | 5 | public class PostgresqlSubscriberConfiguration : SubscriberConfiguration 6 | { 7 | public PostgresqlSubscriberConfiguration(PostgresqlQueue endpoint) : base(endpoint) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.RDBMS/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("PersistenceTests")] 4 | [assembly: InternalsVisibleTo("SqlServerTests")] 5 | [assembly: InternalsVisibleTo("PostgresqlTests")] 6 | [assembly: InternalsVisibleTo("MartenTests")] 7 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // Castle Core proxies for NSubstitute -------------------------------------------------------------------------------- /src/Persistence/Wolverine.RDBMS/DatabaseBackedPersistenceMarker.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | 3 | namespace Wolverine.RDBMS; 4 | 5 | public class DatabaseBackedPersistenceMarker : IVariableSource 6 | { 7 | public bool Matches(Type type) 8 | { 9 | return type == GetType(); 10 | } 11 | 12 | public Variable Create(Type type) 13 | { 14 | return Variable.For(); 15 | } 16 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.RDBMS/Polling/IDoNotReturnData.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.RDBMS.Polling; 2 | 3 | /// 4 | /// Marker interface telling the DatabasePoller not 5 | /// to advance the results for callbacks 6 | /// 7 | public interface IDoNotReturnData; -------------------------------------------------------------------------------- /src/Persistence/Wolverine.RDBMS/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Wolverine; -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("PersistenceTests")] 4 | [assembly: InternalsVisibleTo("SqlServerTests")] -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/EnvelopeIdTable.cs: -------------------------------------------------------------------------------- 1 | using Weasel.Core; 2 | using Weasel.SqlServer.Tables; 3 | using Wolverine.RDBMS; 4 | 5 | namespace Wolverine.SqlServer.Schema; 6 | 7 | internal class EnvelopeIdTable : TableType 8 | { 9 | public EnvelopeIdTable(string schemaName) : base(new DbObjectName(schemaName, "EnvelopeIdList")) 10 | { 11 | AddColumn(DatabaseConstants.Id, "UNIQUEIDENTIFIER"); 12 | } 13 | } -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/uspDeleteIncomingEnvelopes.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE %SCHEMA%.uspDeleteIncomingEnvelopes 2 | @IDLIST %SCHEMA%.EnvelopeIdList READONLY 3 | AS 4 | 5 | DELETE 6 | FROM %SCHEMA%.wolverine_incoming_envelopes 7 | WHERE id IN (SELECT ID FROM @IDLIST); 8 | -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/uspDeleteOutgoingEnvelopes.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE %SCHEMA%.uspDeleteOutgoingEnvelopes 2 | @IDLIST %SCHEMA%.EnvelopeIdList READONLY 3 | AS 4 | 5 | DELETE 6 | FROM %SCHEMA%.wolverine_outgoing_envelopes 7 | WHERE id IN (SELECT ID FROM @IDLIST); 8 | -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/uspDiscardAndReassignOutgoing.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE %SCHEMA%.uspDiscardAndReassignOutgoing 2 | @DISCARDS %SCHEMA%.EnvelopeIdList READONLY, 3 | @REASSIGNED %SCHEMA%.EnvelopeIdList READONLY, 4 | @OWNERID INT 5 | 6 | AS 7 | 8 | DELETE 9 | FROM %SCHEMA%.wolverine_outgoing_envelopes 10 | WHERE id IN (SELECT ID FROM @DISCARDS); 11 | 12 | UPDATE %SCHEMA%.wolverine_outgoing_envelopes 13 | SET owner_id = @OWNERID 14 | WHERE ID IN (SELECT ID FROM @REASSIGNED); 15 | -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/uspMarkIncomingOwnership.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE %SCHEMA%.uspMarkIncomingOwnership 2 | @IDLIST %SCHEMA%.EnvelopeIdList READONLY, 3 | @owner INT 4 | AS 5 | 6 | UPDATE %SCHEMA%.wolverine_incoming_envelopes 7 | SET owner_id = @owner, status = 'Incoming' 8 | WHERE id IN (SELECT ID FROM @IDLIST); 9 | -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Schema/uspMarkOutgoingOwnership.sql: -------------------------------------------------------------------------------- 1 | CREATE PROCEDURE %SCHEMA%.uspMarkOutgoingOwnership 2 | @IDLIST %SCHEMA%.EnvelopeIdList READONLY, 3 | @owner INT 4 | AS 5 | 6 | UPDATE %SCHEMA%.wolverine_outgoing_envelopes 7 | SET owner_id = @owner 8 | WHERE id IN (SELECT ID FROM @IDLIST); 9 | -------------------------------------------------------------------------------- /src/Persistence/Wolverine.SqlServer/Transport/SqlServerSubscriberConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Configuration; 2 | 3 | namespace Wolverine.SqlServer.Transport; 4 | 5 | public class SqlServerSubscriberConfiguration : SubscriberConfiguration 6 | { 7 | public SqlServerSubscriberConfiguration(SqlServerQueue endpoint) : base(endpoint) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.Backend/TeleHealth.Backend.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.Backend/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.Backend/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.Common/ConnectionSource.cs: -------------------------------------------------------------------------------- 1 | namespace TeleHealth.Common; 2 | 3 | public static class ConnectionSource 4 | { 5 | public static string ConnectionString = 6 | "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres"; 7 | } -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.Common/TeleHealth.Common.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.WebApi/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/CQRSWithMarten/TeleHealth.WebApi/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "marten": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Samples/ChaosSender/IMessageRecordRepository.cs: -------------------------------------------------------------------------------- 1 | namespace ChaosSender; 2 | 3 | public interface IMessageRecordRepository 4 | { 5 | Task FindOutstandingMessageCount(CancellationToken token); 6 | 7 | void MarkNew(MessageRecord record); 8 | ValueTask MarkDeleted(Guid id); 9 | 10 | Task ClearMessageRecords(); 11 | } -------------------------------------------------------------------------------- /src/Samples/ChaosSender/MessageRecord.cs: -------------------------------------------------------------------------------- 1 | namespace ChaosSender; 2 | 3 | public class MessageRecord 4 | { 5 | public static MessageRecord For(ITrackedMessage message) 6 | { 7 | return new MessageRecord 8 | { 9 | Id = message.Id, 10 | TypeName = message.GetType().Name 11 | }; 12 | } 13 | 14 | public Guid Id { get; set; } 15 | public string TypeName { get; set; } 16 | } -------------------------------------------------------------------------------- /src/Samples/ChaosSender/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "ChaosSender": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "https://localhost:52212;http://localhost:52213" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Samples/CommandBus/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("SampleTests")] -------------------------------------------------------------------------------- /src/Samples/CommandBus/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/launchsettings.json", 3 | "profiles": { 4 | "CommandBusSamples": { 5 | "commandName": "Project", 6 | "dotnetRunMessages": true, 7 | "launchBrowser": true, 8 | "launchUrl": "swagger", 9 | "applicationUrl": "http://localhost:5193", 10 | "environmentVariables": { 11 | "ASPNETCORE_ENVIRONMENT": "Development" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Samples/CommandBus/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/CommandBus/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/Diagnostics/DiagnosticsApp/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("DiagnosticsTests")] -------------------------------------------------------------------------------- /src/Samples/Diagnostics/DiagnosticsApp/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "DiagnosticsApp": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "https://localhost:55166;http://localhost:55167" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Samples/Diagnostics/DiagnosticsModule/DiagnosticsModule.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/Samples/Diagnostics/DiagnosticsTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/DocumentationSamples/DiagnosticSamples.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Hosting; 2 | using Wolverine; 3 | 4 | namespace DocumentationSamples; 5 | 6 | public class DiagnosticSamples 7 | { 8 | #region sample_using_AssertWolverineConfigurationIsValid 9 | 10 | public static void assert_configuration_is_valid(IHost host) 11 | { 12 | host.AssertWolverineConfigurationIsValid(); 13 | } 14 | 15 | #endregion 16 | } -------------------------------------------------------------------------------- /src/Samples/DocumentationSamples/DocumentationSamples.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/Samples/DocumentationSamples/MessageDiscovery.cs: -------------------------------------------------------------------------------- 1 | using Wolverine; 2 | using Wolverine.Attributes; 3 | 4 | namespace DocumentationSamples; 5 | 6 | #region sample_message_type_discovery 7 | 8 | public record CreateIssue(string Name) : IMessage; 9 | 10 | public record DeleteIssue(Guid Id) : IMessage; 11 | 12 | public record IssueCreated(Guid Id, string Name) : IMessage; 13 | 14 | #endregion 15 | 16 | #region sample_using_WolverineMessage_attribute 17 | 18 | [WolverineMessage] 19 | public record CloseIssue(Guid Id); 20 | 21 | #endregion -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("ItemService.Tests")] -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/CreateItemCommand.cs: -------------------------------------------------------------------------------- 1 | namespace ItemService; 2 | 3 | public class CreateItemCommand 4 | { 5 | public string Name { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/Item.cs: -------------------------------------------------------------------------------- 1 | namespace ItemService; 2 | 3 | public class Item 4 | { 5 | public string Name { get; set; } 6 | public Guid Id { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/ItemCreated.cs: -------------------------------------------------------------------------------- 1 | namespace ItemService; 2 | 3 | public class ItemCreated 4 | { 5 | public Guid Id { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/ItemCreatedHandler.cs: -------------------------------------------------------------------------------- 1 | namespace ItemService; 2 | 3 | public class ItemCreatedHandler 4 | { 5 | public void Handle(ItemCreated @event) 6 | { 7 | Console.WriteLine("You created a new item with id " + @event.Id); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/launchsettings.json", 3 | "profiles": { 4 | "ItemService": { 5 | "commandName": "Project", 6 | "dotnetRunMessages": true, 7 | "launchBrowser": true, 8 | "launchUrl": "swagger", 9 | "applicationUrl": "http://localhost:5299", 10 | "environmentVariables": { 11 | "ASPNETCORE_ENVIRONMENT": "Development" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Samples/EFCoreSample/ItemService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | }, 9 | "AllowedHosts": "*", 10 | "ConnectionStrings": { 11 | "sqlserver": "Server=localhost,1434;User Id=sa;Password=P@55w0rd;Timeout=5;MultipleActiveResultSets=True;Initial Catalog=master;Encrypt=False" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/CreateItemCommand.cs: -------------------------------------------------------------------------------- 1 | namespace InMemoryMediator; 2 | 3 | public class CreateItemCommand 4 | { 5 | public string Name { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/Item.cs: -------------------------------------------------------------------------------- 1 | namespace InMemoryMediator; 2 | 3 | public class Item 4 | { 5 | public string Name { get; set; } 6 | public Guid Id { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/ItemCreated.cs: -------------------------------------------------------------------------------- 1 | namespace InMemoryMediator; 2 | 3 | public class ItemCreated 4 | { 5 | public Guid Id { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/ItemCreatedHandler.cs: -------------------------------------------------------------------------------- 1 | namespace InMemoryMediator; 2 | 3 | public class ItemCreatedHandler 4 | { 5 | public void Handle(ItemCreated @event) 6 | { 7 | Console.WriteLine("You created a new item with id " + @event.Id); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/launchsettings.json", 3 | "profiles": { 4 | "InMemoryMediator": { 5 | "commandName": "Project", 6 | "dotnetRunMessages": true, 7 | "launchBrowser": true, 8 | "launchUrl": "swagger", 9 | "applicationUrl": "http://localhost:5139", 10 | "environmentVariables": { 11 | "ASPNETCORE_ENVIRONMENT": "Development" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/InMemoryMediator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "SqlServer": "Server=localhost,1434;User Id=sa;Password=P@55w0rd;Timeout=5;MultipleActiveResultSets=True;Initial Catalog=master;Encrypt=False" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Samples/IncidentService/IncidentService/IncidentService.http: -------------------------------------------------------------------------------- 1 | @IncidentService_HostAddress = http://localhost:5109 2 | 3 | GET {{IncidentService_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Samples/IncidentService/IncidentService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/IncidentService/IncidentService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "Marten": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitEmailService/Program.cs: -------------------------------------------------------------------------------- 1 | using MartenAndRabbitEmailService; 2 | 3 | var host = Host.CreateDefaultBuilder(args) 4 | .ConfigureServices(services => { services.AddHostedService(); }) 5 | .Build(); 6 | 7 | await host.RunAsync(); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitEmailService/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MartenAndRabbitEmailService": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitEmailService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitEmailService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitIssueService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitIssueService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "issue_database": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | }, 12 | "rabbit_uri": "amqp://localhost:5672" 13 | } 14 | -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/AssignIssue.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public record AssignIssue(Guid IssueId, Guid AssigneeId); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/CreateIssue.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public record CreateIssue(Guid OriginatorId, string Title, string Description); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/Issue.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public class Issue 4 | { 5 | public Guid Id { get; } = Guid.NewGuid(); 6 | 7 | public Guid? AssigneeId { get; set; } 8 | public Guid? OriginatorId { get; set; } 9 | public string Title { get; set; } 10 | public string Description { get; set; } 11 | public bool IsOpen { get; set; } 12 | 13 | public DateTimeOffset Opened { get; set; } 14 | 15 | public IList Tasks { get; set; } 16 | = new List(); 17 | } -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/IssueAssigned.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public record IssueAssigned(Guid Id); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/IssueCreated.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public record IssueCreated(Guid Id); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/IssueTask.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public class IssueTask 4 | { 5 | public IssueTask(string title, string description) 6 | { 7 | Title = title; 8 | Description = description; 9 | Id = Guid.NewGuid(); 10 | } 11 | 12 | public Guid Id { get; set; } 13 | 14 | public string Title { get; set; } 15 | public string Description { get; set; } 16 | public DateTimeOffset? Started { get; set; } 17 | public DateTimeOffset Finished { get; set; } 18 | } -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/IssueTimeout.cs: -------------------------------------------------------------------------------- 1 | namespace MartenAndRabbitMessages; 2 | 3 | public record IssueTimeout(Guid IssueId); -------------------------------------------------------------------------------- /src/Samples/KitchenSink/MartenAndRabbitMessages/MartenAndRabbitMessages.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Samples/Middleware/AppWithMiddleware.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/Middleware/AppWithMiddleware/AssemblyVisibility.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("AppWithMiddleware.Tests")] 4 | -------------------------------------------------------------------------------- /src/Samples/Middleware/AppWithMiddleware/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/Middleware/AppWithMiddleware/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/MultiTenantedTodoService/MultiTenantedTodoService/AssemblyAttribute.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("MultiTenantedTodoWebService.Tests")] -------------------------------------------------------------------------------- /src/Samples/MultiTenantedTodoService/MultiTenantedTodoService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Debug", 5 | "Microsoft.AspNetCore": "Debug" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/MultiTenantedTodoService/MultiTenantedTodoService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Debug", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/MultiTenantedTodoService/MultiTenantedTodoWebService.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/OptimizedArtifactWorkflowSample/OptimizedArtifactWorkflowSample.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Servers.cs 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Samples/OptimizedArtifactWorkflowSample/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "OrderSagaSample": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/ApproveOrder.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record ApproveOrder(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/CreditLimitExceeded.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record CreditLimitExceeded(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/CreditReserved.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record CreditReserved(string OrderId, string CustomerId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/Messages.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net8.0 5 | enable 6 | enable 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/OrderApproved.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record OrderApproved(string OrderId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/OrderCompleted.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record OrderCompleted(string OrderId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/OrderCreated.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record OrderCreated(string OrderId, string CustomerId, string CustomerName); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/OrderPlaced.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record OrderPlaced(string OrderId, string CustomerId, decimal Amount); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/OrderRejected.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record OrderRejected(string OrderId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/PlaceOrder.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record PlaceOrder( 4 | string OrderId, 5 | string CustomerId, 6 | decimal Amount 7 | ); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/RejectOrder.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record RejectOrder(string OrderId); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Messages/ReservceCredit.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | public record ReserveCredit(string OrderId, string CustomerId, decimal Amount); -------------------------------------------------------------------------------- /src/Samples/OrderManagement/Orders/RejectOrderHandler.cs: -------------------------------------------------------------------------------- 1 | using Marten; 2 | using Messages; 3 | using Microsoft.Extensions.Logging; 4 | 5 | namespace Orders; 6 | 7 | public class RejectOrderHandler 8 | { 9 | public async Task Handle( 10 | RejectOrder command, 11 | IDocumentSession session, 12 | ILogger logger 13 | ) 14 | { 15 | var rejected = new OrderRejected(command.OrderId); 16 | session.Events.Append(command.OrderId, rejected); 17 | 18 | await session.SaveChangesAsync(); 19 | } 20 | } -------------------------------------------------------------------------------- /src/Samples/OrderManagement/RetailClient/Customer.cs: -------------------------------------------------------------------------------- 1 | namespace RetailClient; 2 | 3 | public class Customer 4 | { 5 | public string Id { get; set; } 6 | public string Email { get; set; } 7 | public string Name { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Samples/OrderSagaSample/OrderSagaSample.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/Samples/OrderSagaSample/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "OrderSagaSample": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "launchBrowser": true, 7 | "applicationUrl": "http://localhost:5252", 8 | "environmentVariables": { 9 | "ASPNETCORE_ENVIRONMENT": "Development" 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Samples/OrderSagaSample/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/OrderSagaSample/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "Marten": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Messages/Messages.cs: -------------------------------------------------------------------------------- 1 | namespace Messages; 2 | 3 | #region sample_PingPongMessages 4 | 5 | public class Ping 6 | { 7 | public int Number { get; set; } 8 | } 9 | 10 | public class Pong 11 | { 12 | public int Number { get; set; } 13 | } 14 | 15 | #endregion -------------------------------------------------------------------------------- /src/Samples/PingPong/Messages/Messages.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Pinger/Pinger.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dotnet-Pinger-819CA4EE-78C2-4B8C-93A5-0F271BCB1705 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Pinger/PongHandler.cs: -------------------------------------------------------------------------------- 1 | #region sample_PongHandler 2 | 3 | using Messages; 4 | 5 | namespace Pinger; 6 | 7 | public class PongHandler 8 | { 9 | public void Handle(Pong pong, ILogger logger) 10 | { 11 | logger.LogInformation("Received Pong #{Number}", pong.Number); 12 | } 13 | } 14 | 15 | #endregion -------------------------------------------------------------------------------- /src/Samples/PingPong/Pinger/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Pinger": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Pinger/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Pinger/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Ponger/PingHandler.cs: -------------------------------------------------------------------------------- 1 | #region sample_PingHandler 2 | 3 | using Messages; 4 | using Microsoft.Extensions.Logging; 5 | using Wolverine; 6 | 7 | namespace Ponger; 8 | 9 | public class PingHandler 10 | { 11 | public ValueTask Handle(Ping ping, ILogger logger, IMessageContext context) 12 | { 13 | logger.LogInformation("Got Ping #{Number}", ping.Number); 14 | return context.RespondToSenderAsync(new Pong { Number = ping.Number }); 15 | } 16 | } 17 | 18 | #endregion -------------------------------------------------------------------------------- /src/Samples/PingPong/Ponger/Ponger.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Samples/PingPong/Ponger/Program.cs: -------------------------------------------------------------------------------- 1 | #region sample_PongerBootstrapping 2 | 3 | using Microsoft.Extensions.Hosting; 4 | using JasperFx; 5 | using Wolverine; 6 | using Wolverine.Transports.Tcp; 7 | 8 | return await Host.CreateDefaultBuilder(args) 9 | .UseWolverine(opts => 10 | { 11 | opts.ApplicationAssembly = typeof(Program).Assembly; 12 | 13 | // Using Wolverine's built in TCP transport 14 | opts.ListenAtPort(5581); 15 | }) 16 | .RunJasperFxCommands(args); 17 | 18 | #endregion -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Pinger/Messages.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Pinger; 4 | 5 | // The [MessageIdentity] attribute is only necessary 6 | // because the projects aren't sharing types 7 | // You would not do this if you were distributing 8 | // message types through shared assemblies 9 | [MessageIdentity("Ping")] 10 | public class PingMessage 11 | { 12 | public int Number { get; set; } 13 | } 14 | 15 | [MessageIdentity("Pong")] 16 | public class PongMessage 17 | { 18 | public int Number { get; set; } 19 | } -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Pinger/Pinger.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net8.0;net9.0 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Pinger/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "PingerWithRabbitMQ": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Pinger/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Pinger/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "rabbit": "host=localhost" 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Ponger/Messages.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Ponger; 4 | 5 | // The [MessageIdentity] attribute is only necessary 6 | // because the projects aren't sharing types 7 | // You would not do this if you were distributing 8 | // message types through shared assemblies 9 | [MessageIdentity("Ping")] 10 | public class PingMessage 11 | { 12 | public int Number { get; set; } 13 | } 14 | 15 | [MessageIdentity("Pong")] 16 | public class PongMessage 17 | { 18 | public int Number { get; set; } 19 | } -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Ponger/Ponger.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0;net9.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Ponger/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "PongerWithRabbitMQ": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Ponger/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/Ponger/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | }, 8 | "ConnectionStrings": { 9 | "rabbit": "host=localhost" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Samples/PingPongWithRabbitMq/tye.yaml: -------------------------------------------------------------------------------- 1 | name: rabbitpingpong 2 | services: 3 | - name: Ponger 4 | project: Ponger\Ponger.csproj 5 | - name: Pinger 6 | project: Pinger\Pinger.csproj -------------------------------------------------------------------------------- /src/Samples/Quickstart/AssignIssue.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | #region sample_Quickstart_commands_AssignIssue 4 | 5 | public record AssignIssue(Guid IssueId, Guid AssigneeId); 6 | 7 | #endregion 8 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/CreateIssue.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | #region sample_Quickstart_commands_CreateIssue 4 | 5 | public record CreateIssue(Guid OriginatorId, string Title, string Description); 6 | 7 | #endregion 8 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/Issue.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public class Issue 4 | { 5 | public Guid Id { get; } = Guid.NewGuid(); 6 | 7 | public Guid? AssigneeId { get; set; } 8 | public Guid? OriginatorId { get; set; } 9 | public string Title { get; set; } 10 | public string Description { get; set; } 11 | public bool IsOpen { get; set; } 12 | 13 | public DateTimeOffset Opened { get; set; } 14 | 15 | public IList Tasks { get; set; } 16 | = new List(); 17 | } -------------------------------------------------------------------------------- /src/Samples/Quickstart/IssueAssigned.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public record IssueAssigned(Guid Id); -------------------------------------------------------------------------------- /src/Samples/Quickstart/IssueCreated.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public record IssueCreated(Guid Id); -------------------------------------------------------------------------------- /src/Samples/Quickstart/IssueTask.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public class IssueTask 4 | { 5 | public IssueTask(string title, string description) 6 | { 7 | Title = title; 8 | Description = description; 9 | Id = Guid.NewGuid(); 10 | } 11 | 12 | public Guid Id { get; set; } 13 | 14 | public string Title { get; set; } 15 | public string Description { get; set; } 16 | public DateTimeOffset? Started { get; set; } 17 | public DateTimeOffset Finished { get; set; } 18 | } -------------------------------------------------------------------------------- /src/Samples/Quickstart/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/launchsettings.json", 3 | "profiles": { 4 | "Quickstart": { 5 | "commandName": "Project", 6 | "dotnetRunMessages": true, 7 | "launchBrowser": true, 8 | "launchUrl": "swagger", 9 | "applicationUrl": "http://localhost:5048", 10 | "environmentVariables": { 11 | "ASPNETCORE_ENVIRONMENT": "Development" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/Quickstart.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/README.md: -------------------------------------------------------------------------------- 1 | # Quickstart 2 | 3 | This is a very simple project just showing the usage of Wolverine in an ASP.Net Core project. To run the project, 4 | just run the project from Rider/Visual Studio.Net/VS Code or even the command line, and it should pop a browser up 5 | to the Swashbuckle page at [http://localhost:5048/swagger/index.html](http://localhost:5215/swagger/index.html) where 6 | you can execute the endpoints. 7 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/User.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public class User 4 | { 5 | public Guid Id { get; set; } 6 | public string Email { get; set; } 7 | public string Name { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Samples/Quickstart/UserRepository.cs: -------------------------------------------------------------------------------- 1 | namespace Quickstart; 2 | 3 | public class UserRepository 4 | { 5 | private readonly Dictionary _Users = new(); 6 | 7 | public void Store(User User) 8 | { 9 | _Users[User.Id] = User; 10 | } 11 | 12 | public User Get(Guid id) 13 | { 14 | if (_Users.TryGetValue(id, out var User)) 15 | { 16 | return User; 17 | } 18 | 19 | throw new ArgumentOutOfRangeException(nameof(id), "User does not exist"); 20 | } 21 | } -------------------------------------------------------------------------------- /src/Samples/Quickstart/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/Quickstart/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("BankingService.Tests")] -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService/BankingService.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService/Program.cs: -------------------------------------------------------------------------------- 1 | using BankingService; 2 | using JasperFx; 3 | using Wolverine; 4 | using Wolverine.Http; 5 | 6 | var builder = WebApplication.CreateBuilder(args); 7 | 8 | builder.Host.UseWolverine(); 9 | builder.Services.AddSingleton(); 10 | 11 | // Add services to the container. 12 | 13 | var app = builder.Build(); 14 | 15 | app.MapWolverineEndpoints(); 16 | 17 | return await app.RunJasperFxCommands(args); -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/TestHarness/BankingService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Samples/TodoWebService/TodoWebService/AssemblyAttribute.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("TodoWebServiceTests")] -------------------------------------------------------------------------------- /src/Samples/TodoWebService/TodoWebService/HelloEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Http; 2 | 3 | namespace TodoWebService; 4 | 5 | #region sample_hello_world_with_wolverine_http 6 | 7 | public class HelloEndpoint 8 | { 9 | [WolverineGet("/")] 10 | public string Get() => "Hello."; 11 | } 12 | 13 | #endregion -------------------------------------------------------------------------------- /src/Samples/TodoWebService/TodoWebService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/TodoWebService/TodoWebService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "Marten": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Samples/TodoWebService/TodoWebServiceTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Samples/WebApiWithMarten/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "WebApiWithMarten": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "launchBrowser": true, 7 | "applicationUrl": "http://localhost:5215", 8 | "environmentVariables": { 9 | "ASPNETCORE_ENVIRONMENT": "Development" 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Samples/WebApiWithMarten/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Samples/WebApiWithMarten/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*", 9 | "ConnectionStrings": { 10 | "postgres": "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Servers.cs: -------------------------------------------------------------------------------- 1 | namespace IntegrationTests; 2 | 3 | public class Servers 4 | { 5 | public static readonly string PostgresConnectionString = 6 | "Host=localhost;Port=5433;Database=postgres;Username=postgres;password=postgres"; 7 | 8 | public static readonly string SqlServerConnectionString = 9 | "Server=localhost,1434;User Id=sa;Password=P@55w0rd;Timeout=5;MultipleActiveResultSets=True;Initial Catalog=master;Encrypt=False"; 10 | } -------------------------------------------------------------------------------- /src/Testing/Benchmarks/RabbitTesting.cs: -------------------------------------------------------------------------------- 1 | namespace Benchmarks; 2 | 3 | public static class RabbitTesting 4 | { 5 | public static int Number; 6 | 7 | public static string NextQueueName() 8 | { 9 | return $"perf{++Number}"; 10 | } 11 | 12 | public static string NextExchangeName() 13 | { 14 | return $"perf{++Number}"; 15 | } 16 | } -------------------------------------------------------------------------------- /src/Testing/ConsoleApp/ConsoleApp.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | Exe 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/Testing/ConsoleApp/Handlers.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Compliance; 2 | using Wolverine; 3 | 4 | namespace ConsoleApp; 5 | 6 | public class PingHandler 7 | { 8 | public void Ping(Envelope envelope, PingMessage message) 9 | { 10 | } 11 | } 12 | 13 | public class PongHandler 14 | { 15 | public Task Handle(PongMessage message) 16 | { 17 | return Task.CompletedTask; 18 | } 19 | } -------------------------------------------------------------------------------- /src/Testing/ConsoleApp/MyAppOptions.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Compliance; 2 | 3 | namespace ConsoleApp; 4 | 5 | public class MessageHandler 6 | { 7 | public void Handle(Message1 msg) 8 | { 9 | } 10 | 11 | public void Handle(Message2 msg) 12 | { 13 | } 14 | 15 | public void Handle(Message3 msg) 16 | { 17 | } 18 | 19 | public void Handle(Message4 msg) 20 | { 21 | } 22 | 23 | public void Handle(Message5 msg) 24 | { 25 | } 26 | } -------------------------------------------------------------------------------- /src/Testing/ConsoleApp/TestCommand.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | using JasperFx; 3 | using JasperFx.CommandLine; 4 | using Wolverine.ComplianceTests.Compliance; 5 | using Wolverine; 6 | 7 | namespace ConsoleApp; 8 | 9 | public class TestCommand : JasperFxAsyncCommand 10 | { 11 | public override async Task Execute(NetCoreInput input) 12 | { 13 | using var host = input.BuildHost(); 14 | await host.MessageBus().InvokeAsync(new PongMessage()); 15 | 16 | return true; 17 | } 18 | } -------------------------------------------------------------------------------- /src/Testing/CoreTests/Parallelization.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Testing/CoreTests/Runtime/Green/Messages.cs: -------------------------------------------------------------------------------- 1 | namespace CoreTests.Runtime.Green; 2 | 3 | public class GreenMessage1; 4 | 5 | public class GreenMessage2; 6 | 7 | public class GreenMessage3; -------------------------------------------------------------------------------- /src/Testing/CoreTests/Runtime/Red/Messages.cs: -------------------------------------------------------------------------------- 1 | namespace CoreTests.Runtime.Red; 2 | 3 | public class RedMessage1; 4 | 5 | public class RedMessage2; 6 | 7 | public class RedMessage3; -------------------------------------------------------------------------------- /src/Testing/CoreTests/Runtime/Samples/channels.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Compliance; 2 | 3 | namespace CoreTests.Runtime.Samples; 4 | 5 | #region sample_sending_messages_for_static_routing 6 | 7 | public class SendingExample 8 | { 9 | public async Task SendPingsAndPongs(IMessageContext bus) 10 | { 11 | // Publish a message 12 | await bus.SendAsync(new PingMessage()); 13 | } 14 | } 15 | 16 | #endregion -------------------------------------------------------------------------------- /src/Testing/CoreTests/Serialization/reading_model_synchronously_by_content_type.cs: -------------------------------------------------------------------------------- 1 | namespace CoreTests.Serialization; 2 | 3 | public class ConnegMessage 4 | { 5 | public string ContentType { get; set; } 6 | public string Name { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Testing/CoreTests/Transports/RecordingHandler.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.ComplianceTests.Compliance; 2 | 3 | namespace CoreTests.Transports; 4 | 5 | public class RecordingHandler 6 | { 7 | public void Handle(Message1 message) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Testing/CoreTests/Transports/Sending/NulloSenderTester.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | using Wolverine.ComplianceTests; 3 | using Wolverine.Transports.Sending; 4 | using Xunit; 5 | 6 | namespace CoreTests.Transports.Sending; 7 | 8 | public class NulloSenderTester 9 | { 10 | [Fact] 11 | public async Task enqueue_automatically_marks_envelope_as_successful() 12 | { 13 | var sender = new NullSender("tcp://localhost:3333".ToUri()); 14 | 15 | var env = ObjectMother.Envelope(); 16 | 17 | await sender.SendAsync(env); 18 | } 19 | } -------------------------------------------------------------------------------- /src/Testing/CoreTests/Transports/Tcp/Protocol/super_duper_happy_path.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | namespace CoreTests.Transports.Tcp.Protocol; 4 | 5 | public class super_duper_happy_path : ProtocolContext 6 | { 7 | [Fact] 8 | public async Task messages_are_received() 9 | { 10 | await afterSending(); 11 | 12 | allTheMessagesWereReceived(); 13 | } 14 | 15 | [Fact] 16 | public async Task should_call_through_succeeded() 17 | { 18 | await afterSending(); 19 | 20 | theSender.Succeeded.ShouldBeTrue(); 21 | } 22 | } -------------------------------------------------------------------------------- /src/Testing/CoreTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Wolverine; 2 | global using Shouldly; -------------------------------------------------------------------------------- /src/Testing/CoreTests/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Testing/MetricsDemonstrator/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MetricsDemonstrator": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Testing/MetricsDemonstrator/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/MetricsDemonstrator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/Module1/IInterfaceMessage.cs: -------------------------------------------------------------------------------- 1 | namespace Module1; 2 | 3 | public interface IInterfaceMessage 4 | { 5 | string Name { get; set; } 6 | } -------------------------------------------------------------------------------- /src/Testing/Module1/IMessageAbstraction.cs: -------------------------------------------------------------------------------- 1 | namespace Module1; 2 | 3 | public interface IMessageAbstraction 4 | { 5 | Guid Id { get; set; } 6 | string Name { get; set; } 7 | } -------------------------------------------------------------------------------- /src/Testing/Module1/Module1Extension.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.DependencyInjection; 2 | using Wolverine; 3 | 4 | namespace Module1; 5 | 6 | public class Module1Extension : IWolverineExtension 7 | { 8 | public static WolverineOptions Options { get; set; } 9 | 10 | public void Configure(WolverineOptions options) 11 | { 12 | Options = options; 13 | 14 | options.Services.AddScoped(); 15 | } 16 | } 17 | 18 | public interface IModuleService; 19 | 20 | public class ServiceFromModule : IModuleService; -------------------------------------------------------------------------------- /src/Testing/Module1/TalkCommand.cs: -------------------------------------------------------------------------------- 1 | using JasperFx; 2 | using JasperFx.CommandLine; 3 | using Spectre.Console; 4 | 5 | namespace Module1; 6 | 7 | public class TalkCommand : JasperFxCommand 8 | { 9 | public override bool Execute(NetCoreInput input) 10 | { 11 | AnsiConsole.Write("[magenta]Hello![/]"); 12 | return true; 13 | } 14 | } -------------------------------------------------------------------------------- /src/Testing/Module2/Handlers.cs: -------------------------------------------------------------------------------- 1 | namespace Module2; 2 | 3 | public record Module2Message1; 4 | public record Module2Message2; 5 | public record Module2Message3; 6 | public record Module2Message4; 7 | 8 | public class MessageHandler 9 | { 10 | public void Handle(Module2Message1 message){} 11 | public void Handle(Module2Message2 message){} 12 | public void Handle(Module2Message3 message){} 13 | public void Handle(Module2Message4 message){} 14 | } -------------------------------------------------------------------------------- /src/Testing/Module2/Module2.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/OtelMessages/OtelMessages.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/OtelWebApi/InternalsVisibleAttribute.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("TracingTests")] -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/OtelWebApi/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/OtelWebApi/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber1/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Subscriber1": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber1/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber1/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber2/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Subscriber2": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": true, 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber2/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/Subscriber2/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/TracingTests/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "TracingTests": { 4 | "commandName": "Project", 5 | "launchBrowser": true, 6 | "environmentVariables": { 7 | "ASPNETCORE_ENVIRONMENT": "Development" 8 | }, 9 | "applicationUrl": "https://localhost:55164;http://localhost:55165" 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/TracingTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.4' 2 | services: 3 | jaeger: 4 | image: jaegertracing/all-in-one:latest 5 | hostname: "jaeger" 6 | ports: 7 | - "6831:6831/udp" 8 | - "16686:16686" -------------------------------------------------------------------------------- /src/Testing/OpenTelemetry/tye.yaml: -------------------------------------------------------------------------------- 1 | name: JasperOtelTesting 2 | services: 3 | - name: Subscriber2 4 | project: Subscriber2\Subscriber2.csproj 5 | - name: Subscriber1 6 | project: Subscriber1\Subscriber1.csproj 7 | - name: OtelWebApi 8 | project: OtelWebApi\OtelWebApi.csproj -------------------------------------------------------------------------------- /src/Testing/OrderExtension/Handlers.cs: -------------------------------------------------------------------------------- 1 | #region sample_using_wolverine_module_attribute 2 | 3 | using Wolverine.Attributes; 4 | 5 | [assembly: WolverineModule] 6 | 7 | #endregion 8 | 9 | namespace OrderExtension; 10 | 11 | public class CreateOrder; 12 | 13 | public class ShipOrder; 14 | 15 | public class OrderHandler 16 | { 17 | public void HandleAsync(CreateOrder create) 18 | { 19 | } 20 | 21 | public void HandleAsync(ShipOrder command) 22 | { 23 | } 24 | } -------------------------------------------------------------------------------- /src/Testing/OrderExtension/OrderExtension.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/Testing/PolicyTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Testing/Wolverine.ComplianceTests/Compliance/BlueHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace Wolverine.ComplianceTests.Compliance; 4 | 5 | public class BlueHandler 6 | { 7 | public static void Consume(BlueMessage message) 8 | { 9 | Debug.WriteLine("Hey"); 10 | } 11 | } -------------------------------------------------------------------------------- /src/Testing/Wolverine.ComplianceTests/ErrorHandling/AttemptTracker.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ComplianceTests.ErrorHandling; 2 | 3 | public class AttemptTracker 4 | { 5 | public int LastAttempt; 6 | } -------------------------------------------------------------------------------- /src/Testing/Wolverine.ComplianceTests/ErrorHandling/ErrorCausingMessage.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ComplianceTests.ErrorHandling; 2 | 3 | public class ErrorCausingMessage 4 | { 5 | public Dictionary Errors { get; set; } = new(); 6 | public bool WasProcessed { get; set; } 7 | public int LastAttempt { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Testing/Wolverine.ComplianceTests/IgnoreInScanning.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | [assembly: WolverineIgnore] -------------------------------------------------------------------------------- /src/Testing/Wolverine.ComplianceTests/Sagas/ISagaHost.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Hosting; 2 | 3 | namespace Wolverine.ComplianceTests.Sagas; 4 | 5 | public interface ISagaHost 6 | { 7 | IHost BuildHost(); 8 | 9 | Task LoadState(Guid id) where T : Saga; 10 | Task LoadState(int id) where T : Saga; 11 | Task LoadState(long id) where T : Saga; 12 | Task LoadState(string id) where T : Saga; 13 | } -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] 2 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns/AmazonSnsListenerConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.AmazonSns.Internal; 2 | using Wolverine.Configuration; 3 | 4 | namespace Wolverine.AmazonSns; 5 | 6 | public class AmazonSnsListenerConfiguration : ListenerConfiguration 7 | { 8 | internal AmazonSnsListenerConfiguration(AmazonSnsTopic endpoint) : base(endpoint) 9 | { 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.AmazonSns.Tests")] 4 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns/Internal/AmazonSnsSubscriptionAttributes.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSns.Internal; 2 | 3 | public class AmazonSnsSubscriptionAttributes 4 | { 5 | public string? FilterPolicy { get; set; } 6 | 7 | public string? RedrivePolicy { get; set; } 8 | 9 | /// 10 | /// Enables raw message delivery to Amazon SQS or HTTP/S endpoints 11 | /// 12 | public bool RawMessageDelivery { get; set; } 13 | } 14 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSns/WolverineSnsTransportException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSns; 2 | 3 | public class WolverineSnsTransportException : Exception 4 | { 5 | public WolverineSnsTransportException(string? message, Exception? innerException) : base(message, innerException) 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/ConventionalRouting/PublishedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.AmazonSqs.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("published.message")] 6 | public class PublishedMessage; -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/ConventionalRouting/RoutedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.AmazonSqs.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("routed")] 6 | public class RoutedMessage; -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/ConventionalRouting/RoutedMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSqs.Tests.ConventionalRouting; 2 | 3 | public class RoutedMessageHandler 4 | { 5 | public void Handle(RoutedMessage message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/README.md: -------------------------------------------------------------------------------- 1 | ## Running the Tests 2 | 3 | You'll need to have an AWS account with full permissions to create, read, delete, and post to SQS and/or SNS queues. 4 | 5 | You'll also want a credentials file on your development 6 | box: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html 7 | 8 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/RawJson/MyNativeJsonMessage.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSqs.Tests.RawJson; 2 | 3 | public class MyNativeJsonMessage 4 | { 5 | public Guid Id { get; set; } = Guid.NewGuid(); 6 | } -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/RawJson/MyNativeJsonMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSqs.Tests.RawJson; 2 | 3 | public static class MyNativeJsonMessageHandler 4 | { 5 | public static void Handle(MyNativeJsonMessage message) 6 | { 7 | // nothing 8 | } 9 | } -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.AmazonSqs.Tests")] 4 | [assembly: InternalsVisibleTo("Wolverine.AmazonSns.Tests")] 5 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs/Internal/AmazonSqsEnvelope.cs: -------------------------------------------------------------------------------- 1 | using Amazon.SQS.Model; 2 | 3 | namespace Wolverine.AmazonSqs.Internal; 4 | 5 | internal class AmazonSqsEnvelope : Envelope 6 | { 7 | public AmazonSqsEnvelope(Message message) 8 | { 9 | SqsMessage = message; 10 | } 11 | 12 | public Message SqsMessage { get; } 13 | public bool WasDeleted { get; set; } 14 | } -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs/Wolverine.AmazonSqs.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WolverineFx.AmazonSqs 5 | Amazon SQS transport for Wolverine applications 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/Transports/AWS/Wolverine.AmazonSqs/WolverineSqsTransportException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AmazonSqs; 2 | 3 | public class WolverineSqsTransportException : Exception 4 | { 5 | public WolverineSqsTransportException(string? message, Exception? innerException) : base(message, innerException) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/ConventionalRouting/Broadcasting/BroadcastedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.AzureServiceBus.Tests.ConventionalRouting.Broadcasting; 4 | 5 | [MessageIdentity("broadcasted2")] 6 | public class BroadcastedMessage; -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/ConventionalRouting/Broadcasting/BroadcastedMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AzureServiceBus.Tests.ConventionalRouting.Broadcasting; 2 | 3 | public class BroadcastedMessageHandler 4 | { 5 | public void Handle(BroadcastedMessage message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/ConventionalRouting/PublishedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.AzureServiceBus.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("published.message")] 6 | public class PublishedMessage; -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/ConventionalRouting/RoutedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.AzureServiceBus.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("routed")] 6 | public class RoutedMessage; 7 | 8 | [MessageIdentity("routed2")] 9 | public class Routed2Message; -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/ConventionalRouting/RoutedMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.AzureServiceBus.Tests.ConventionalRouting; 2 | 3 | public class RoutedMessageHandler 4 | { 5 | public void Handle(RoutedMessage message) 6 | { 7 | } 8 | 9 | public void Handle(Routed2Message message) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.AzureServiceBus.Tests")] -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus/IAzureServiceBusEnvelopeMapper.cs: -------------------------------------------------------------------------------- 1 | using Azure.Messaging.ServiceBus; 2 | using Wolverine.Transports; 3 | 4 | namespace Wolverine.AzureServiceBus; 5 | 6 | public interface IAzureServiceBusEnvelopeMapper : IEnvelopeMapper; -------------------------------------------------------------------------------- /src/Transports/Azure/Wolverine.AzureServiceBus/Internal/AsyncPageableExtensions.cs: -------------------------------------------------------------------------------- 1 | using Azure; 2 | 3 | namespace Wolverine.AzureServiceBus.Internal; 4 | 5 | internal static class AsyncPageableExtensions 6 | { 7 | public static async ValueTask> ToListAsync(this AsyncPageable source) 8 | where T : notnull 9 | { 10 | var list = new List(); 11 | 12 | await foreach (var item in source) 13 | { 14 | list.Add(item); 15 | } 16 | 17 | return list; 18 | } 19 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub.Tests/ConventionalRouting/PublishedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.Pubsub.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("published-message")] 6 | public class PublishedMessage; -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub.Tests/ConventionalRouting/RoutedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.Pubsub.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("routed")] 6 | public class RoutedMessage; -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub.Tests/ConventionalRouting/RoutedMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pubsub.Tests.ConventionalRouting; 2 | 3 | public class RoutedMessageHandler 4 | { 5 | public void Handle(RoutedMessage message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.Pubsub.Tests")] -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/IPubsubEnvelopeMapper.cs: -------------------------------------------------------------------------------- 1 | using Google.Cloud.PubSub.V1; 2 | using Wolverine.Transports; 3 | 4 | namespace Wolverine.Pubsub; 5 | 6 | /// 7 | /// Pluggable strategy for reading and writing data to Google Cloud Platform Pub/Sub 8 | /// 9 | public interface IPubsubEnvelopeMapper : IEnvelopeMapper 10 | { 11 | void MapIncomingToEnvelope(PubsubEnvelope envelope, ReceivedMessage incoming); 12 | void MapOutgoingToMessage(OutgoingMessageBatch outgoing, PubsubMessage message); 13 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/PubsubEnvelope.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pubsub; 2 | 3 | public class PubsubEnvelope : Envelope 4 | { 5 | public string AckId = string.Empty; 6 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/WolverinePubsubInvalidEndpointNameException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pubsub; 2 | 3 | public class WolverinePubsubInvalidEndpointNameException : Exception 4 | { 5 | public WolverinePubsubInvalidEndpointNameException(string topicName, string? message = null, 6 | Exception? innerException = null) : base( 7 | message ?? $"Google Cloud Platform Pub/Sub endpoint name \"{topicName}\" is invalid.", innerException) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/WolverinePubsubTransportException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pubsub; 2 | 3 | public class WolverinePubsubTransportException : Exception 4 | { 5 | public WolverinePubsubTransportException(string? message, Exception? innerException) : base(message, innerException) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/GCP/Wolverine.Pubsub/WolverinePubsubTransportNotConnectedException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pubsub; 2 | 3 | public class WolverinePubsubTransportNotConnectedException : Exception 4 | { 5 | public WolverinePubsubTransportNotConnectedException( 6 | string message = "Google Cloud Platform Pub/Sub transport has not been connected", 7 | Exception? innerException = null) : base(message, innerException) 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Transports/Kafka/BatchMessaging/BatchMessaging.http: -------------------------------------------------------------------------------- 1 | @BatchMessaging_HostAddress = http://localhost:5089 2 | 3 | GET {{BatchMessaging_HostAddress}}/weatherforecast/ 4 | Accept: application/json 5 | 6 | ### 7 | -------------------------------------------------------------------------------- /src/Transports/Kafka/BatchMessaging/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Transports/Kafka/BatchMessaging/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Transports/Kafka/Wolverine.Kafka.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/Kafka/Wolverine.Kafka.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/Kafka/Wolverine.Kafka/Usings.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/src/Transports/Kafka/Wolverine.Kafka/Usings.cs -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT.Tests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.MQTT.Tests")] -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT/IMqttEnvelopeMapper.cs: -------------------------------------------------------------------------------- 1 | using MQTTnet; 2 | using Wolverine.Transports; 3 | 4 | namespace Wolverine.MQTT; 5 | 6 | public interface IMqttEnvelopeMapper : IEnvelopeMapper; -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT/MqttConnectionException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.MQTT; 2 | 3 | public class MqttConnectionException : Exception 4 | { 5 | public MqttConnectionException(string message) : base(message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/MQTT/Wolverine.MQTT/Usings.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasperFx/wolverine/46a0be6d177aa379e491f7325a62e9f01f7afc7c/src/Transports/MQTT/Wolverine.MQTT/Usings.cs -------------------------------------------------------------------------------- /src/Transports/Pulsar/Wolverine.Pulsar.Tests/README.md: -------------------------------------------------------------------------------- 1 | To start up a local, standalone Pulsar broker suitable for the tests, use one of these commands (required Docker): 2 | 3 | Windows: 4 | 5 | ```bash 6 | build pulsar 7 | ``` 8 | 9 | OSX/Linux: 10 | 11 | ```bash 12 | ./build.sh pulsar 13 | ``` 14 | 15 | -------------------------------------------------------------------------------- /src/Transports/Pulsar/Wolverine.Pulsar/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.Pulsar.Tests")] -------------------------------------------------------------------------------- /src/Transports/Pulsar/Wolverine.Pulsar/InvalidPulsarUriException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Pulsar; 2 | 3 | public class InvalidPulsarUriException : Exception 4 | { 5 | public InvalidPulsarUriException(Uri actualUri) : base( 6 | $"Invalid Wolverine Pulsar Uri '{actualUri}'. Should be of form 'pulsar://persistent/non-persistent/tenant/namespace/topic'") 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Transports/Pulsar/Wolverine.Pulsar/PulsarEnvelope.cs: -------------------------------------------------------------------------------- 1 | using System.Buffers; 2 | using DotPulsar.Abstractions; 3 | 4 | namespace Wolverine.Pulsar; 5 | 6 | public class PulsarEnvelope : Envelope 7 | { 8 | public PulsarEnvelope(IMessage> messageData) 9 | { 10 | MessageData = messageData; 11 | } 12 | 13 | public IMessage> MessageData { get; } 14 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/IMessageRecordRepository.cs: -------------------------------------------------------------------------------- 1 | namespace ChaosTesting; 2 | 3 | public interface IMessageRecordRepository 4 | { 5 | Task FindOutstandingMessageCount(CancellationToken token); 6 | 7 | void MarkNew(MessageRecord record); 8 | ValueTask MarkDeleted(Guid id); 9 | 10 | Task ClearMessageRecords(); 11 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/MessageRecord.cs: -------------------------------------------------------------------------------- 1 | namespace ChaosTesting; 2 | 3 | public class MessageRecord 4 | { 5 | public static MessageRecord For(ITrackedMessage message) 6 | { 7 | return new MessageRecord 8 | { 9 | Id = message.Id, 10 | TypeName = message.GetType().Name 11 | }; 12 | } 13 | 14 | public Guid Id { get; set; } 15 | public string TypeName { get; set; } 16 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/Scripts/ReceiverStartsLater.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | 3 | namespace ChaosTesting.Scripts; 4 | 5 | public class ReceiverStartsLater : ChaosScript 6 | { 7 | public override async Task Drive(ChaosDriver driver) 8 | { 9 | await driver.StartSender("one"); 10 | await driver.SendMessages("one", 1000); 11 | await Task.Delay(1.Seconds()); 12 | await driver.StartReceiver("one"); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/Scripts/Simplistic.cs: -------------------------------------------------------------------------------- 1 | namespace ChaosTesting.Scripts; 2 | 3 | public class Simplistic : ChaosScript 4 | { 5 | public override async Task Drive(ChaosDriver driver) 6 | { 7 | await driver.StartReceiver("one"); 8 | await driver.StartSender("one"); 9 | 10 | await driver.SendMessages("one", 100); 11 | } 12 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/ChaosTesting/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/CircuitBreakingTests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/CircuitBreakingTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/InteropTests/Usings.cs: -------------------------------------------------------------------------------- 1 | global using Xunit; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/MassTransitRabbitMqService/InitialMessageResponder.cs: -------------------------------------------------------------------------------- 1 | using MassTransit; 2 | 3 | namespace MassTransitService; 4 | 5 | public class InitialMessageResponder : IConsumer 6 | { 7 | public Task Consume(ConsumeContext context) 8 | { 9 | var message = context.Message; 10 | var response = new ResponseMessage 11 | { 12 | Id = message.Id 13 | }; 14 | 15 | return context.RespondAsync(response); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/MassTransitRabbitMqService/Messages.cs: -------------------------------------------------------------------------------- 1 | namespace MassTransitService; 2 | 3 | public class InitialMessage 4 | { 5 | public Guid Id { get; set; } 6 | } 7 | 8 | public class ResponseMessage 9 | { 10 | public Guid Id { get; set; } 11 | } 12 | 13 | public class ToWolverine 14 | { 15 | public Guid Id { get; set; } 16 | } 17 | 18 | public class ToExternal 19 | { 20 | public Guid Id { get; set; } 21 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/MassTransitRabbitMqService/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "MassTransitService": { 4 | "commandName": "Project", 5 | "dotnetRunMessages": "true", 6 | "environmentVariables": { 7 | "DOTNET_ENVIRONMENT": "Development" 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/MassTransitRabbitMqService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/MassTransitRabbitMqService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/NServiceBusRabbitMqService/InitialMessageResponder.cs: -------------------------------------------------------------------------------- 1 | using NServiceBus; 2 | 3 | namespace NServiceBusRabbitMqService; 4 | 5 | public class InitialMessageResponder : IHandleMessages 6 | { 7 | public Task Handle(InitialMessage message, IMessageHandlerContext context) 8 | { 9 | var response = new ResponseMessage 10 | { 11 | Id = message.Id 12 | }; 13 | 14 | return context.Reply(response); 15 | } 16 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/RabbitMqBootstrapping/RabbitMqBootstrapping.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/RabbitMqBootstrapping/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/RabbitMqBootstrapping/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.AspNetCore": "Warning" 6 | } 7 | }, 8 | "AllowedHosts": "*" 9 | } 10 | -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/ConventionalRouting/ConventionallyRoutedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.RabbitMQ.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("routed")] 6 | public class ConventionallyRoutedMessage; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/ConventionalRouting/HeadersMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.RabbitMQ.Tests.ConventionalRouting; 4 | 5 | [WolverineIgnore] 6 | public record HeadersMessage; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/ConventionalRouting/HeadersMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.RabbitMQ.Tests.ConventionalRouting; 2 | 3 | public class HeadersMessageHandler 4 | { 5 | public void Handle(HeadersMessage message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/ConventionalRouting/PublishedMessage.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | namespace Wolverine.RabbitMQ.Tests.ConventionalRouting; 4 | 5 | [MessageIdentity("published.message")] 6 | public class PublishedMessage; -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/ConventionalRouting/RoutedMessageHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.RabbitMQ.Tests.ConventionalRouting; 2 | 3 | public class RoutedMessageHandler 4 | { 5 | public void Handle(ConventionallyRoutedMessage message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/NoParallelization.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | [assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)] -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/application_does_not_fail_without_rabbit_mq_transport_initialized.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Hosting; 2 | using Xunit; 3 | 4 | namespace Wolverine.RabbitMQ.Tests; 5 | 6 | public class application_does_not_fail_without_rabbit_mq_transport_initialized 7 | { 8 | [Fact] 9 | public async Task do_not_fail() 10 | { 11 | using var host = await Host.CreateDefaultBuilder() 12 | .UseWolverine().StartAsync(); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ/AssemblyAttributes.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("Wolverine.RabbitMQ.Tests")] -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ/ExchangeType.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.RabbitMQ; 2 | 3 | public enum ExchangeType 4 | { 5 | Direct, 6 | Fanout, 7 | Topic, 8 | Headers 9 | } -------------------------------------------------------------------------------- /src/Transports/RabbitMQ/Wolverine.RabbitMQ/Internal/AgentState.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.RabbitMQ.Internal; 2 | 3 | internal enum AgentState 4 | { 5 | Connected, 6 | Disconnected 7 | } -------------------------------------------------------------------------------- /src/Wolverine/Attributes/ModifyEnvelopeAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Attributes; 2 | 3 | /// 4 | /// Base class for an attribute that will customize how 5 | /// a message type is sent by Wolverine by modifying the Envelope 6 | /// 7 | [AttributeUsage(AttributeTargets.Class)] 8 | public abstract class ModifyEnvelopeAttribute : Attribute, IEnvelopeRule 9 | { 10 | public abstract void Modify(Envelope envelope); 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Attributes/TopicAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Attributes; 2 | 3 | /// 4 | /// Used to specify outbound topic names per message type. Only used if the outbound 5 | /// endpoint is using topic-based routing 6 | /// 7 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface)] 8 | public class TopicAttribute : Attribute 9 | { 10 | public TopicAttribute(string topicName) 11 | { 12 | TopicName = topicName; 13 | } 14 | 15 | public string TopicName { get; } 16 | } -------------------------------------------------------------------------------- /src/Wolverine/Attributes/WolverineFeatureAttribute.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core.TypeScanning; 2 | 3 | namespace Wolverine.Attributes; 4 | 5 | /// 6 | /// Tells Wolverine to ignore this assembly in its determination of the application assembly 7 | /// 8 | [AttributeUsage(AttributeTargets.Assembly)] 9 | public class WolverineFeatureAttribute : IgnoreAssemblyAttribute; -------------------------------------------------------------------------------- /src/Wolverine/Attributes/WolverineHandlerAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Attributes; 2 | 3 | /// 4 | /// Marks a class as being a Wolverine handler class. Can also be used 5 | /// on a method within a Wolverine handler class if the user wants to 6 | /// vary from the built in naming conventions 7 | /// 8 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 9 | public class WolverineHandlerAttribute : Attribute; -------------------------------------------------------------------------------- /src/Wolverine/Attributes/WolverineIgnoreAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Attributes; 2 | 3 | /// 4 | /// Place on a concrete class or method to make Wolverine ignore the class or methods 5 | /// in message handler or http endpoint action discovery 6 | /// 7 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Assembly)] 8 | public class WolverineIgnoreAttribute : Attribute; -------------------------------------------------------------------------------- /src/Wolverine/Attributes/WolverineMessageAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Attributes; 2 | 3 | /// 4 | /// Marker interface to denote that a type is a Wolverine 5 | /// message. This is strictly for diagnostic purposes! 6 | /// 7 | [AttributeUsage(AttributeTargets.Class)] 8 | public class WolverineMessageAttribute : Attribute; -------------------------------------------------------------------------------- /src/Wolverine/BrokerName.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Just identifies a named broker for the case of needing to connect a single 5 | /// Wolverine application to multiple message brokers of the same type 6 | /// 7 | /// 8 | public record BrokerName(string Name); -------------------------------------------------------------------------------- /src/Wolverine/Configuration/IWolverinePolicy.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Configuration; 2 | 3 | /// 4 | /// Marker interface to tell Wolverine that yes, this 5 | /// is *some* sort of wolverine policy 6 | /// 7 | public interface IWolverinePolicy; -------------------------------------------------------------------------------- /src/Wolverine/Configuration/IWolverineReturnType.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Configuration; 2 | 3 | /// 4 | /// Just a marker type that designates that this type has some 5 | /// kind of specific return handling meaning and should not be used 6 | /// as a response 7 | /// 8 | public interface IWolverineReturnType; -------------------------------------------------------------------------------- /src/Wolverine/Configuration/MessageRoutingContext.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Runtime; 2 | 3 | namespace Wolverine.Configuration; 4 | 5 | public class MessageRoutingContext 6 | { 7 | public MessageRoutingContext(Type messageType, IWolverineRuntime runtime) 8 | { 9 | MessageType = messageType; 10 | Runtime = runtime; 11 | } 12 | 13 | public Type MessageType { get; } 14 | public IWolverineRuntime Runtime { get; } 15 | } -------------------------------------------------------------------------------- /src/Wolverine/Configuration/RoutingMode.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Configuration; 2 | 3 | public enum RoutingMode 4 | { 5 | /// 6 | /// The endpoint is a static address when sending messages 7 | /// 8 | Static, 9 | 10 | /// 11 | /// The endpoint uses topic-based routing when sending messages 12 | /// 13 | ByTopic 14 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/IWithFailurePolicies.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ErrorHandling; 2 | 3 | public interface IWithFailurePolicies 4 | { 5 | /// 6 | /// Collection of Error handling policies for exception handling during the execution of a message 7 | /// 8 | FailureRuleCollection Failures { get; } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/InvalidCircuitBreakerException.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | 3 | namespace Wolverine.ErrorHandling; 4 | 5 | /// 6 | /// Thrown when a specified circuit breaker configuration is invalid 7 | /// 8 | public class InvalidCircuitBreakerException : Exception 9 | { 10 | public InvalidCircuitBreakerException(IEnumerable messages) : base( 11 | $"Invalid Circuit Breaker configuration: {messages.Join(", ")}") 12 | { 13 | } 14 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/AlwaysMatches.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ErrorHandling.Matches; 2 | 3 | internal class AlwaysMatches : IExceptionMatch 4 | { 5 | public string Description => "All exceptions"; 6 | 7 | public bool Matches(Exception ex) 8 | { 9 | return true; 10 | } 11 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/ExcludeType.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core.Reflection; 2 | 3 | namespace Wolverine.ErrorHandling.Matches; 4 | 5 | internal class ExcludeType : IExceptionMatch where T : Exception 6 | { 7 | public string Description => "Exclude " + typeof(T).FullNameInCode(); 8 | 9 | public bool Matches(Exception ex) 10 | { 11 | return !(ex is T); 12 | } 13 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/IExceptionMatch.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ErrorHandling.Matches; 2 | 3 | public interface IExceptionMatch 4 | { 5 | string Description { get; } 6 | 7 | bool Matches(Exception ex); 8 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/InnerMatch.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ErrorHandling.Matches; 2 | 3 | internal class InnerMatch : IExceptionMatch 4 | { 5 | private readonly IExceptionMatch _inner; 6 | 7 | public InnerMatch(IExceptionMatch inner) 8 | { 9 | _inner = inner; 10 | } 11 | 12 | public string Description => "Inner: " + _inner.Description; 13 | 14 | public bool Matches(Exception ex) 15 | { 16 | return ex.InnerException != null && _inner.Matches(ex.InnerException); 17 | } 18 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/MessageContains.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.ErrorHandling.Matches; 2 | 3 | internal 4 | class MessageContains : IExceptionMatch 5 | { 6 | private readonly string _text; 7 | 8 | public MessageContains(string text) 9 | { 10 | _text = text; 11 | } 12 | 13 | public string Description => $"Exception message contains \"{_text}\""; 14 | 15 | public bool Matches(Exception ex) 16 | { 17 | return ex.Message.Contains(_text, StringComparison.OrdinalIgnoreCase); 18 | } 19 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/OrMatch.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | 3 | namespace Wolverine.ErrorHandling.Matches; 4 | 5 | internal class OrMatch : IExceptionMatch 6 | { 7 | public readonly List Inners = new(); 8 | 9 | public OrMatch(params IExceptionMatch[] matches) 10 | { 11 | Inners.AddRange(matches); 12 | } 13 | 14 | public string Description => Inners.Select(x => x.Formatted()).Join(" or "); 15 | 16 | public bool Matches(Exception ex) 17 | { 18 | return Inners.Any(x => x.Matches(ex)); 19 | } 20 | } -------------------------------------------------------------------------------- /src/Wolverine/ErrorHandling/Matches/TypeMatch.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core.Reflection; 2 | 3 | namespace Wolverine.ErrorHandling.Matches; 4 | 5 | internal class TypeMatch : IExceptionMatch where T : Exception 6 | { 7 | public string Description => "Exception is " + typeof(T).FullNameInCode(); 8 | 9 | public bool Matches(Exception ex) 10 | { 11 | return ex is T; 12 | } 13 | } -------------------------------------------------------------------------------- /src/Wolverine/HandlerContinuation.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | public enum HandlerContinuation 4 | { 5 | /// 6 | /// When used in middleware, directs Wolverine to continue processing an incoming command 7 | /// 8 | Continue, 9 | 10 | /// 11 | /// When used in middleware, directs Wolverine to stop processing an incoming command 12 | /// 13 | Stop 14 | } -------------------------------------------------------------------------------- /src/Wolverine/IForwardsTo.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Implement in a message class to "forward" the execution 5 | /// to another message type. This is useful for message versioning 6 | /// and backwards compatibility 7 | /// 8 | /// 9 | public interface IForwardsTo 10 | { 11 | T Transform(); 12 | } -------------------------------------------------------------------------------- /src/Wolverine/IMessage.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Marker interface to denote that a type is a Wolverine 5 | /// message. This is strictly for diagnostic purposes! 6 | /// 7 | public interface IMessage; 8 | -------------------------------------------------------------------------------- /src/Wolverine/ISerializable.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Marks a message type as being able to read and write itself 5 | /// to and from a byte array 6 | /// 7 | public interface ISerializable 8 | { 9 | byte[] Write(); 10 | #pragma warning disable CA2252 11 | static abstract object Read(byte[] bytes); 12 | #pragma warning restore CA2252 13 | } -------------------------------------------------------------------------------- /src/Wolverine/IWolverineHandler.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Marker interface to denote that this class should be considered 5 | /// as a Wolverine message handler regardless of naming convention 6 | /// 7 | public interface IWolverineHandler; -------------------------------------------------------------------------------- /src/Wolverine/IgnoreInScanning.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Attributes; 2 | 3 | [assembly: WolverineIgnore] -------------------------------------------------------------------------------- /src/Wolverine/InvalidHandlerException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Denotes a Handler method that is invalid for Wolverine 5 | /// 6 | public class InvalidHandlerException : Exception 7 | { 8 | public InvalidHandlerException(string? message) : base(message) 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Logging/AuditedMember.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | namespace Wolverine.Logging; 4 | 5 | /// 6 | /// Configuration item for a member on the message type that should be audited 7 | /// in instrumentation 8 | /// 9 | /// 10 | /// 11 | public record AuditedMember(MemberInfo Member, string MemberName, string OpenTelemetryName); -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Durability/DeadLetterManagement/DeadLetterEnvelopeQueryParameters.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Durability.DeadLetterManagement; 2 | 3 | public class DeadLetterEnvelopeQueryParameters 4 | { 5 | public uint Limit { get; set; } = 100; 6 | public Guid? StartId { get; set; } 7 | public string? MessageType { get; set; } 8 | public string? ExceptionType { get; set; } 9 | public string? ExceptionMessage { get; set; } 10 | public DateTimeOffset? From { get; set; } 11 | public DateTimeOffset? Until { get; set; } 12 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Durability/DeadLetterManagement/DeadLetterEnvelopeResults.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Durability.DeadLetterManagement; 2 | 3 | public class DeadLetterEnvelopeResults 4 | { 5 | public int TotalCount { get; set; } 6 | public List Envelopes { get; set; } = new(); 7 | public int PageNumber { get; set; } 8 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Durability/DeadLetterManagement/MessageBatchRequest.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Durability.DeadLetterManagement; 2 | 3 | public record MessageBatchRequest(Guid[] Ids, Uri? Database = null); -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Durability/DeadLetterManagement/TimeRange.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Durability.DeadLetterManagement; 2 | 3 | public record TimeRange(DateTimeOffset? From, DateTimeOffset? To) 4 | { 5 | public static TimeRange AllTime() => new TimeRange(null, null); 6 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Durability/DuplicateIncomingEnvelopeException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Durability; 2 | 3 | public class DuplicateIncomingEnvelopeException : Exception 4 | { 5 | public DuplicateIncomingEnvelopeException(Envelope envelope) : base( 6 | $"Duplicate incoming envelope with message id {envelope.Id} at {envelope.Destination}") 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/EntityVariable.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | 3 | namespace Wolverine.Persistence; 4 | 5 | internal class EntityVariable : Variable 6 | { 7 | public EntityVariable(Variable sideEffect) : base(sideEffect.VariableType.GetGenericArguments()[0], $"{sideEffect.Usage}.Entity") 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/FlushOutgoingMessages.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Frames; 2 | using Wolverine.Runtime; 3 | 4 | namespace Wolverine.Persistence; 5 | 6 | public class FlushOutgoingMessages : MethodCall 7 | { 8 | public FlushOutgoingMessages() : base(typeof(MessageContext), nameof(MessageContext.FlushOutgoingMessagesAsync)) 9 | { 10 | CommentText = "Have to flush outgoing messages just in case Marten did nothing because of https://github.com/JasperFx/wolverine/issues/536"; 11 | } 12 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/NoMatchingPersistenceProviderException.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core.Reflection; 2 | 3 | namespace Wolverine.Persistence; 4 | 5 | public class NoMatchingPersistenceProviderException : Exception 6 | { 7 | public NoMatchingPersistenceProviderException(Type entityType) : base($"Wolverine is unable to determine a persistence provider for entity type {entityType.FullNameInCode()}") 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/PersistenceConstants.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence; 2 | 3 | public class PersistenceConstants 4 | { 5 | public const string TenantIdVariableName = "tenantId"; 6 | public const string AgentScheme = "wolverinedb"; 7 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/ISagaOperation.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | 3 | namespace Wolverine.Persistence.Sagas; 4 | 5 | public interface ISagaOperation 6 | { 7 | Variable Saga { get; } 8 | SagaOperationType Operation { get; } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/ISagaStorageFrame.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | 3 | namespace Wolverine.Persistence.Sagas; 4 | 5 | internal interface ISagaStorageFrame 6 | { 7 | Variable SimpleVariable { get; } 8 | 9 | Variable Variable { get; } 10 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/ISagaSupport.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Runtime; 2 | 3 | namespace Wolverine.Persistence.Sagas; 4 | 5 | public interface ISagaSupport 6 | { 7 | ValueTask> EnrollAndFetchSagaStorage(MessageContext context) where TSaga : Saga; 8 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/InvalidSagaException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Sagas; 2 | 3 | public class InvalidSagaException : Exception 4 | { 5 | public InvalidSagaException(string? message) : base(message) 6 | { 7 | } 8 | 9 | public InvalidSagaException(string? message, Exception? innerException) : base(message, innerException) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/SagaIdentityAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Sagas; 2 | 3 | /// 4 | /// Marks a public property on a message type as the saga state identity 5 | /// 6 | [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] 7 | public class SagaIdentityAttribute : Attribute; -------------------------------------------------------------------------------- /src/Wolverine/Persistence/Sagas/SagaOperationType.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Persistence.Sagas; 2 | 3 | public enum SagaOperationType 4 | { 5 | InsertAsync, 6 | UpdateAsync, 7 | DeleteAsync 8 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Agents/AgentAssignmentsChanged.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Logging; 2 | 3 | namespace Wolverine.Runtime.Agents; 4 | 5 | /// 6 | /// Event used for test automation to "wait" for all assignments to be made 7 | /// 8 | /// 9 | public record AgentAssignmentsChanged 10 | (IReadOnlyList Commands, AssignmentGrid Assignments) : IWolverineEvent 11 | { 12 | public void ModifyState(WolverineTracker tracker) 13 | { 14 | // nothing 15 | } 16 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Agents/AgentCommandException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Agents; 2 | 3 | public class AgentCommandException : Exception 4 | { 5 | public AgentCommandException(IAgentCommand command, Exception? innerException) : base( 6 | $"Failure while executing agent command {command}", innerException) 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Handlers/MessageVariable.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.CodeGeneration.Model; 2 | 3 | namespace Wolverine.Runtime.Handlers; 4 | 5 | internal class MessageVariable : Variable 6 | { 7 | public MessageVariable(Variable envelope, Type messageType) : base(messageType, DefaultArgName(messageType)) 8 | { 9 | Creator = new MessageFrame(this, envelope); 10 | } 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/IHandlerPipeline.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using Wolverine.Transports; 3 | 4 | namespace Wolverine.Runtime; 5 | 6 | public interface IHandlerPipeline 7 | { 8 | Task InvokeAsync(Envelope envelope, IChannelCallback channel); 9 | Task InvokeAsync(Envelope envelope, IChannelCallback channel, Activity activity); 10 | bool TryDeserializeEnvelope(Envelope envelope, out IContinuation continuation); 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/IWolverineActivator.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime; 2 | 3 | /// 4 | /// Hook to enable taking some action against the IWolverineRuntime 5 | /// of an application very early on in bootstrapping an application. 6 | /// Originally built to register trackers 7 | /// 8 | public interface IWolverineActivator 9 | { 10 | void Apply(IWolverineRuntime runtime); 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Interop/MassTransit/IMassTransitInteropEndpoint.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Interop.MassTransit; 2 | 3 | public interface IMassTransitInteropEndpoint 4 | { 5 | Uri? MassTransitUri(); 6 | Uri? MassTransitReplyUri(); 7 | 8 | Uri? TranslateMassTransitToWolverineUri(Uri uri); 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/InvalidSubscriptionException.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | 3 | namespace Wolverine.Runtime; 4 | 5 | public class InvalidSubscriptionException : Exception 6 | { 7 | public InvalidSubscriptionException(string[] errors) : base( 8 | $"Subscription errors detected:{Environment.NewLine}{errors.Select(e => $"* {e}").Join(Environment.NewLine)}") 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/NullContinuation.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace Wolverine.Runtime; 4 | 5 | internal class NullContinuation : IContinuation 6 | { 7 | public static readonly NullContinuation Instance = new(); 8 | 9 | public ValueTask ExecuteAsync(IEnvelopeLifecycle lifecycle, IWolverineRuntime runtime, DateTimeOffset now, 10 | Activity? activity) 11 | { 12 | return ValueTask.CompletedTask; 13 | } 14 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/RemoteInvocation/IReplyListener.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.RemoteInvocation; 2 | 3 | internal interface IReplyListener : IDisposable 4 | { 5 | Guid RequestId { get; } 6 | void Complete(Envelope envelope); 7 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/RemoteInvocation/WolverineRequestReplyException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.RemoteInvocation; 2 | 3 | public class WolverineRequestReplyException : Exception 4 | { 5 | public WolverineRequestReplyException(string failureMessage) 6 | : base("Request failed: " + failureMessage) 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Routing/IMessageInvoker.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Routing; 2 | 3 | public interface IMessageInvoker 4 | { 5 | Task InvokeAsync(object message, MessageBus bus, 6 | CancellationToken cancellation = default, 7 | TimeSpan? timeout = null, string? tenantId = null); 8 | 9 | Task InvokeAsync(object message, MessageBus bus, 10 | CancellationToken cancellation = default, 11 | TimeSpan? timeout = null, string? tenantId = null); 12 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Routing/RoutingScope.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Routing; 2 | 3 | public enum RoutingScope 4 | { 5 | Assembly, 6 | Namespace, 7 | Type, 8 | TypeName, 9 | All, 10 | Implements 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Routing/UnknownEndpointException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Routing; 2 | 3 | public class UnknownEndpointException : Exception 4 | { 5 | public UnknownEndpointException(string? message) : base(message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Scheduled/IScheduledJobProcessor.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Scheduled; 2 | 3 | internal interface IScheduledJobProcessor : IDisposable 4 | { 5 | void Enqueue(DateTimeOffset executionTime, Envelope envelope); 6 | 7 | void PlayAll(); 8 | 9 | void Play(DateTime executionTime); 10 | 11 | Task EmptyAllAsync(); 12 | 13 | int Count(); 14 | 15 | ScheduledJob[] QueuedJobs(); 16 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Scheduled/ScheduledJob.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Scheduled; 2 | 3 | public class ScheduledJob 4 | { 5 | public ScheduledJob(Guid envelopeId) 6 | { 7 | EnvelopeId = envelopeId; 8 | } 9 | 10 | public Guid EnvelopeId { get; } 11 | 12 | public DateTimeOffset ReceivedAt { get; set; } 13 | public DateTimeOffset? ExecutionTime { get; set; } 14 | 15 | public string? MessageType { get; set; } 16 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/Serialization/IMessageSerializer.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime.Serialization; 2 | 3 | /// 4 | /// Wolverine's primary interface for message serialization 5 | /// 6 | public interface IMessageSerializer 7 | { 8 | string ContentType { get; } 9 | 10 | byte[] Write(Envelope envelope); 11 | 12 | object ReadFromData(Type messageType, Envelope envelope); 13 | 14 | object ReadFromData(byte[] data); 15 | 16 | byte[] WriteMessage(object message); 17 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/UnknownTransportException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime; 2 | 3 | public class UnknownTransportException : Exception 4 | { 5 | public UnknownTransportException(string message) : base(message) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/WolverineRuntime.MessageTypes.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Runtime; 2 | 3 | public partial class WolverineRuntime 4 | { 5 | public void RegisterMessageType(Type messageType) 6 | { 7 | Handlers.RegisterMessageType(messageType); 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/WolverineRuntime.ObjectPooling.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.ObjectPool; 2 | 3 | namespace Wolverine.Runtime; 4 | 5 | public partial class WolverineRuntime : PooledObjectPolicy 6 | { 7 | public override bool Return(MessageContext context) 8 | { 9 | context.ClearState(); 10 | return true; 11 | } 12 | 13 | public override MessageContext Create() 14 | { 15 | return new MessageContext(this); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Wolverine/Runtime/WorkerQueues/ILocalQueue.cs: -------------------------------------------------------------------------------- 1 | using Wolverine.Transports; 2 | 3 | namespace Wolverine.Runtime.WorkerQueues; 4 | 5 | public interface ILocalReceiver 6 | { 7 | void Enqueue(Envelope envelope); 8 | } 9 | 10 | public interface ILocalQueue : IReceiver, ILocalReceiver 11 | { 12 | int QueueCount { get; } 13 | Uri Uri { get; } 14 | } -------------------------------------------------------------------------------- /src/Wolverine/Tracking/ITrackedCondition.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Tracking; 2 | 3 | /// 4 | /// Interface for custom "wait" conditions for message tracking 5 | /// test sessions. This is probably an advanced usage. 6 | /// 7 | public interface ITrackedCondition 8 | { 9 | void Record(EnvelopeRecord record); 10 | bool IsCompleted(); 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Tracking/MessageEventType.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Tracking; 2 | 3 | #region sample_record_collections 4 | public enum MessageEventType 5 | { 6 | Received, 7 | Sent, 8 | ExecutionStarted, 9 | ExecutionFinished, 10 | MessageSucceeded, 11 | MessageFailed, 12 | NoHandlers, 13 | NoRoutes, 14 | MovedToErrorQueue, 15 | Requeued 16 | } 17 | #endregion -------------------------------------------------------------------------------- /src/Wolverine/Transports/IBrokerEndpoint.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Logging; 2 | 3 | namespace Wolverine.Transports; 4 | 5 | public interface IBrokerEndpoint 6 | { 7 | Uri Uri { get; } 8 | ValueTask CheckAsync(); 9 | ValueTask TeardownAsync(ILogger logger); 10 | ValueTask SetupAsync(ILogger logger); 11 | } -------------------------------------------------------------------------------- /src/Wolverine/Transports/IBrokerQueue.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Logging; 2 | 3 | namespace Wolverine.Transports; 4 | 5 | public interface IBrokerQueue : IBrokerEndpoint 6 | { 7 | ValueTask PurgeAsync(ILogger logger); 8 | ValueTask> GetAttributesAsync(); 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Transports/ListeningStatus.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Transports; 2 | 3 | public enum ListeningStatus 4 | { 5 | Accepting, 6 | TooBusy, 7 | Stopped, 8 | Unknown 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Transports/Sending/ISender.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Transports.Sending; 2 | 3 | public interface ISenderRequiresCallback : IDisposable 4 | { 5 | void RegisterCallback(ISenderCallback senderCallback); 6 | } 7 | 8 | public interface ISender 9 | { 10 | bool SupportsNativeScheduledSend { get; } 11 | Uri Destination { get; } 12 | Task PingAsync(); 13 | ValueTask SendAsync(Envelope envelope); 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/Wolverine/Transports/Sending/ISenderProtocol.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Transports.Sending; 2 | 3 | public interface ISenderProtocol 4 | { 5 | Task SendBatchAsync(ISenderCallback callback, OutgoingMessageBatch batch); 6 | } 7 | 8 | /// 9 | /// Marker interface that tells Wolverine that the current sender protocol for batching 10 | /// supports native scheduling 11 | /// 12 | public interface ISenderProtocolWithNativeScheduling : ISenderProtocol; -------------------------------------------------------------------------------- /src/Wolverine/Transports/Sending/QueueDoesNotExistException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Transports.Sending; 2 | 3 | public class QueueDoesNotExistException : Exception 4 | { 5 | public QueueDoesNotExistException(OutgoingMessageBatch outgoing) : base( 6 | $"Queue '{outgoing.Destination}' does not exist at {outgoing.Destination}") 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/Transports/Tcp/MessageFailureException.cs: -------------------------------------------------------------------------------- 1 | using JasperFx.Core; 2 | 3 | namespace Wolverine.Transports.Tcp; 4 | 5 | public class MessageFailureException : Exception 6 | { 7 | public MessageFailureException(Envelope[] messages, Exception innerException) : base( 8 | $"SEE THE INNER EXCEPTION -- Failed on messages {messages.Select(x => x.ToString()).Join(", ")}", 9 | innerException) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /src/Wolverine/Transports/TransportEndpointException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine.Transports; 2 | 3 | public class TransportEndpointException : Exception 4 | { 5 | public TransportEndpointException(Uri? uri, string message, Exception innerException) : base( 6 | $"Error with endpoint '{uri}': {message}", innerException) 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /src/Wolverine/WolverineHasNotStartedException.cs: -------------------------------------------------------------------------------- 1 | namespace Wolverine; 2 | 3 | /// 4 | /// Exception thrown when Wolverine is used before the host is started 5 | /// 6 | public class WolverineHasNotStartedException : Exception 7 | { 8 | public WolverineHasNotStartedException() : base("Wolverine cannot function until the underlying IHost has been started. This can happen if IHost.Build() is called but not IHost.Start()/StartAsync()?") 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /xunit.runner.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", 3 | "diagnosticMessages": true, 4 | "longRunningTestSeconds": 60 5 | } --------------------------------------------------------------------------------