@@ -588,19 +588,65 @@ public static ReadResult Parse(string input,
588
588
return OpenApiModelFactory . Parse ( input , format , settings ) ;
589
589
}
590
590
/// <summary>
591
- /// Adds a schema to the components object of the current document.
591
+ /// Adds a component to the components object of the current document and registers it to the underlying workspace .
592
592
/// </summary>
593
- /// <param name="openApiSchema ">The schema to add</param>
593
+ /// <param name="componentToRegister ">The component to add</param>
594
594
/// <param name="id">The id for the component</param>
595
- /// <returns>Whether the schema was added to the components.</returns>
596
- public bool AddComponentSchema ( string id , OpenApiSchema openApiSchema )
595
+ /// <typeparam name="T">The type of the component</typeparam>
596
+ /// <returns>Whether the component was added to the components.</returns>
597
+ /// <exception cref="ArgumentNullException">Thrown when the component is null.</exception>
598
+ /// <exception cref="ArgumentException">Thrown when the id is null or empty.</exception>
599
+ public bool AddComponent < T > ( string id , T componentToRegister )
597
600
{
598
- Utils . CheckArgumentNull ( openApiSchema ) ;
601
+ Utils . CheckArgumentNull ( componentToRegister ) ;
599
602
Utils . CheckArgumentNullOrEmpty ( id ) ;
600
603
Components ??= new ( ) ;
601
- Components . Schemas ??= new Dictionary < string , OpenApiSchema > ( ) ;
602
- Components . Schemas . Add ( id , openApiSchema ) ;
603
- return Workspace ? . RegisterSchemaForDocument ( this , openApiSchema , id ) ?? false ;
604
+ switch ( componentToRegister )
605
+ {
606
+ case OpenApiSchema openApiSchema :
607
+ Components . Schemas ??= new Dictionary < string , OpenApiSchema > ( ) ;
608
+ Components . Schemas . Add ( id , openApiSchema ) ;
609
+ break ;
610
+ case OpenApiParameter openApiParameter :
611
+ Components . Parameters ??= new Dictionary < string , OpenApiParameter > ( ) ;
612
+ Components . Parameters . Add ( id , openApiParameter ) ;
613
+ break ;
614
+ case OpenApiResponse openApiResponse :
615
+ Components . Responses ??= new Dictionary < string , OpenApiResponse > ( ) ;
616
+ Components . Responses . Add ( id , openApiResponse ) ;
617
+ break ;
618
+ case OpenApiRequestBody openApiRequestBody :
619
+ Components . RequestBodies ??= new Dictionary < string , OpenApiRequestBody > ( ) ;
620
+ Components . RequestBodies . Add ( id , openApiRequestBody ) ;
621
+ break ;
622
+ case OpenApiLink openApiLink :
623
+ Components . Links ??= new Dictionary < string , OpenApiLink > ( ) ;
624
+ Components . Links . Add ( id , openApiLink ) ;
625
+ break ;
626
+ case OpenApiCallback openApiCallback :
627
+ Components . Callbacks ??= new Dictionary < string , OpenApiCallback > ( ) ;
628
+ Components . Callbacks . Add ( id , openApiCallback ) ;
629
+ break ;
630
+ case OpenApiPathItem openApiPathItem :
631
+ Components . PathItems ??= new Dictionary < string , OpenApiPathItem > ( ) ;
632
+ Components . PathItems . Add ( id , openApiPathItem ) ;
633
+ break ;
634
+ case OpenApiExample openApiExample :
635
+ Components . Examples ??= new Dictionary < string , OpenApiExample > ( ) ;
636
+ Components . Examples . Add ( id , openApiExample ) ;
637
+ break ;
638
+ case OpenApiHeader openApiHeader :
639
+ Components . Headers ??= new Dictionary < string , OpenApiHeader > ( ) ;
640
+ Components . Headers . Add ( id , openApiHeader ) ;
641
+ break ;
642
+ case OpenApiSecurityScheme openApiSecurityScheme :
643
+ Components . SecuritySchemes ??= new Dictionary < string , OpenApiSecurityScheme > ( ) ;
644
+ Components . SecuritySchemes . Add ( id , openApiSecurityScheme ) ;
645
+ break ;
646
+ default :
647
+ throw new ArgumentException ( $ "Component type { componentToRegister ! . GetType ( ) . Name } is not supported.") ;
648
+ }
649
+ return Workspace ? . RegisterComponentForDocument ( this , componentToRegister , id ) ?? false ;
604
650
}
605
651
}
606
652
0 commit comments