1+ using System ;
2+
3+ using Paramore . Brighter ;
4+ using Paramore . Brighter . MessagingGateway . Redis ;
5+
6+ namespace Fluent . Brighter . Redis . Extensions ;
7+
8+ /// <summary>
9+ /// Provides extension methods for <see cref="ConsumerBuilder"/> to configure Redis-based message consumers.
10+ /// These extensions enable easy setup of Redis subscriptions and channel factories.
11+ /// </summary>
12+ public static class ConsumerBuilderExtensions
13+ {
14+ /// <summary>
15+ /// Adds a pre-configured Redis subscription to the consumer builder.
16+ /// </summary>
17+ /// <param name="builder">The <see cref="ConsumerBuilder"/> instance to configure.</param>
18+ /// <param name="subscription">The pre-configured <see cref="RedisSubscription"/> to add.</param>
19+ /// <returns>The <see cref="ConsumerBuilder"/> instance for method chaining.</returns>
20+ public static ConsumerBuilder AddRedisSubscription ( this ConsumerBuilder builder , RedisSubscription subscription )
21+ {
22+ return builder . AddSubscription ( subscription ) ;
23+ }
24+
25+ /// <summary>
26+ /// Adds a Redis subscription to the consumer builder using a configuration action.
27+ /// This method creates a new <see cref="RedisSubscriptionBuilder"/>, applies the configuration, and builds the subscription.
28+ /// </summary>
29+ /// <param name="builder">The <see cref="ConsumerBuilder"/> instance to configure.</param>
30+ /// <param name="configure">An action that configures the <see cref="RedisSubscriptionBuilder"/> with subscription settings.</param>
31+ /// <returns>The <see cref="ConsumerBuilder"/> instance for method chaining.</returns>
32+ public static ConsumerBuilder AddRedisSubscription ( this ConsumerBuilder builder ,
33+ Action < RedisSubscriptionBuilder > configure )
34+ {
35+ var sub = new RedisSubscriptionBuilder ( ) ;
36+ configure ( sub ) ;
37+ return builder . AddSubscription ( sub . Build ( ) ) ;
38+ }
39+
40+ /// <summary>
41+ /// Adds a Redis subscription for a specific request type to the consumer builder.
42+ /// This method automatically configures the subscription with the specified <typeparamref name="TRequest"/> type
43+ /// and then applies additional configuration provided by the action.
44+ /// </summary>
45+ /// <typeparam name="TRequest">The type of request/message that this subscription will handle. Must implement <see cref="IRequest"/>.</typeparam>
46+ /// <param name="builder">The <see cref="ConsumerBuilder"/> instance to configure.</param>
47+ /// <param name="configure">An action that configures the <see cref="RedisSubscriptionBuilder"/> with additional settings.</param>
48+ /// <returns>The <see cref="ConsumerBuilder"/> instance for method chaining.</returns>
49+ public static ConsumerBuilder AddRedisSubscription < TRequest > ( this ConsumerBuilder builder ,
50+ Action < RedisSubscriptionBuilder > configure )
51+ where TRequest : class , IRequest
52+ {
53+ var sub = new RedisSubscriptionBuilder ( ) ;
54+ sub . SetDataType ( typeof ( TRequest ) ) ;
55+ configure ( sub ) ;
56+ return builder . AddSubscription ( sub . Build ( ) ) ;
57+ }
58+
59+ /// <summary>
60+ /// Adds a Redis channel factory to the consumer builder using a configuration builder.
61+ /// Channel factories are responsible for creating message channels that consume messages from Redis.
62+ /// </summary>
63+ /// <param name="builder">The <see cref="ConsumerBuilder"/> instance to configure.</param>
64+ /// <param name="configure">An action that configures the <see cref="RedisMessagingGatewayConfigurationBuilder"/> with connection details.</param>
65+ /// <returns>The <see cref="ConsumerBuilder"/> instance for method chaining.</returns>
66+ public static ConsumerBuilder AdRedisChannelFactory ( this ConsumerBuilder builder ,
67+ Action < RedisMessagingGatewayConfigurationBuilder > configure )
68+ {
69+ var connection = new RedisMessagingGatewayConfigurationBuilder ( ) ;
70+ configure ( connection ) ;
71+ return builder . AddRedisChannelFactory ( connection . Build ( ) ) ;
72+ }
73+
74+ /// <summary>
75+ /// Adds a Redis channel factory to the consumer builder using a pre-configured Redis messaging gateway configuration.
76+ /// Channel factories are responsible for creating message channels that consume messages from Redis.
77+ /// </summary>
78+ /// <param name="builder">The <see cref="ConsumerBuilder"/> instance to configure.</param>
79+ /// <param name="connection">The pre-configured Redis messaging gateway configuration containing connection details.</param>
80+ /// <returns>The <see cref="ConsumerBuilder"/> instance for method chaining.</returns>
81+ public static ConsumerBuilder AddRedisChannelFactory ( this ConsumerBuilder builder , RedisMessagingGatewayConfiguration connection )
82+ {
83+ return builder
84+ . AddChannelFactory ( new ChannelFactory ( new RedisMessageConsumerFactory ( connection ) ) ) ;
85+ }
86+ }
0 commit comments