99using System . Collections . Generic ;
1010using System . Collections . Immutable ;
1111using System . IO ;
12+ using System . Linq ;
1213using System . Threading ;
1314using System . Threading . Tasks ;
1415
1516namespace publisher ;
1617
18+ internal delegate ValueTask ProcessPolicyFragmentsToPut ( CancellationToken cancellationToken ) ;
19+ internal delegate ValueTask ProcessDeletedPolicyFragments ( CancellationToken cancellationToken ) ;
20+
1721internal delegate Option < PublisherAction > FindPolicyFragmentAction ( FileInfo file ) ;
1822
1923file delegate Option < PolicyFragmentName > TryParsePolicyFragmentName ( FileInfo file ) ;
@@ -34,6 +38,30 @@ namespace publisher;
3438
3539internal delegate ValueTask OnDeletingPolicyFragment ( PolicyFragmentName name , CancellationToken cancellationToken ) ;
3640
41+ file sealed class ProcessPolicyFragmentsToPutHandler ( GetPublisherFiles getPublisherFiles ,
42+ TryParsePolicyFragmentName tryParsePolicyFragmentName ,
43+ IsPolicyFragmentNameInSourceControl isNameInSourceControl ,
44+ PutPolicyFragment putPolicyFragment )
45+ {
46+ public async ValueTask Handle ( CancellationToken cancellationToken ) =>
47+ await getPublisherFiles ( )
48+ . Choose ( tryParsePolicyFragmentName . Invoke )
49+ . Where ( isNameInSourceControl . Invoke )
50+ . IterParallel ( putPolicyFragment . Invoke , cancellationToken ) ;
51+ }
52+
53+ file sealed class ProcessDeletedPolicyFragmentsHandler ( GetPublisherFiles getPublisherFiles ,
54+ TryParsePolicyFragmentName tryParsePolicyFragmentName ,
55+ IsPolicyFragmentNameInSourceControl isNameInSourceControl ,
56+ DeletePolicyFragment deletePolicyFragment )
57+ {
58+ public async ValueTask Handle ( CancellationToken cancellationToken ) =>
59+ await getPublisherFiles ( )
60+ . Choose ( tryParsePolicyFragmentName . Invoke )
61+ . Where ( name => isNameInSourceControl . Invoke ( name ) is false )
62+ . IterParallel ( deletePolicyFragment . Invoke , cancellationToken ) ;
63+ }
64+
3765file sealed class FindPolicyFragmentActionHandler ( TryParsePolicyFragmentName tryParseName , ProcessPolicyFragment processPolicyFragment )
3866{
3967 public Option < PublisherAction > Handle ( FileInfo file ) =>
@@ -239,6 +267,26 @@ public async ValueTask Handle(PolicyFragmentName name, CancellationToken cancell
239267
240268internal static class PolicyFragmentServices
241269{
270+ public static void ConfigureProcessPolicyFragmentsToPut ( IServiceCollection services )
271+ {
272+ ConfigureTryParsePolicyFragmentName ( services ) ;
273+ ConfigureIsPolicyFragmentNameInSourceControl ( services ) ;
274+ ConfigurePutPolicyFragment ( services ) ;
275+
276+ services . TryAddSingleton < ProcessPolicyFragmentsToPutHandler > ( ) ;
277+ services . TryAddSingleton < ProcessPolicyFragmentsToPut > ( provider => provider . GetRequiredService < ProcessPolicyFragmentsToPutHandler > ( ) . Handle ) ;
278+ }
279+
280+ public static void ConfigureProcessDeletedPolicyFragments ( IServiceCollection services )
281+ {
282+ ConfigureTryParsePolicyFragmentName ( services ) ;
283+ ConfigureIsPolicyFragmentNameInSourceControl ( services ) ;
284+ ConfigureDeletePolicyFragment ( services ) ;
285+
286+ services . TryAddSingleton < ProcessDeletedPolicyFragmentsHandler > ( ) ;
287+ services . TryAddSingleton < ProcessDeletedPolicyFragments > ( provider => provider . GetRequiredService < ProcessDeletedPolicyFragmentsHandler > ( ) . Handle ) ;
288+ }
289+
242290 public static void ConfigureFindPolicyFragmentAction ( IServiceCollection services )
243291 {
244292 ConfigureTryParsePolicyFragmentName ( services ) ;
0 commit comments