From 69dff282f9dd3d69c3eccb024ff3cf712ddef686 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Wed, 16 Sep 2026 21:00:02 +0300 Subject: [PATCH 1/5] MapItEasy --- README.md | 30 +- later.md | 2 +- v2/.tours/MapItEasy.tour | 42 ++ v2/Generator/all.csv | 1 + v2/RSCGExamplesData/GeneratorDataRec.json | 8 +- v2/rscg_examples/MapItEasy/description.json | 22 ++ v2/rscg_examples/MapItEasy/nuget.txt | 1 + v2/rscg_examples/MapItEasy/readme.txt | 150 +++++++ .../MapItEasy/src/mapperDemo.slnx | 3 + .../MapItEasy/src/mapperDemo/Person.cs | 8 + .../MapItEasy/src/mapperDemo/PersonDTO.cs | 22 ++ .../MapItEasy/src/mapperDemo/Program.cs | 6 + .../src/mapperDemo/mapperDemo.csproj | 23 ++ v2/rscg_examples/MapItEasy/video.json | 39 ++ .../docs/Authors/Phong_Nguyen.md | 4 +- .../docs/Categories/Audit.md | 6 +- .../docs/Categories/_PrimitiveAudit.mdx | 4 +- .../docs/RSCG-Examples/MapItEasy.md | 374 ++++++++++++++++++ .../docs/RSCG-Examples/index.md | 13 +- v2/rscg_examples_site/docs/about.md | 2 +- v2/rscg_examples_site/docs/indexRSCG.md | 5 +- .../src/components/HomepageFeatures/index.js | 2 +- .../static/exports/RSCG.json | 8 + .../static/exports/RSCG.xlsx | Bin 15222 -> 15246 bytes 24 files changed, 758 insertions(+), 17 deletions(-) create mode 100644 v2/.tours/MapItEasy.tour create mode 100644 v2/rscg_examples/MapItEasy/description.json create mode 100644 v2/rscg_examples/MapItEasy/nuget.txt create mode 100644 v2/rscg_examples/MapItEasy/readme.txt create mode 100644 v2/rscg_examples/MapItEasy/src/mapperDemo.slnx create mode 100644 v2/rscg_examples/MapItEasy/src/mapperDemo/Person.cs create mode 100644 v2/rscg_examples/MapItEasy/src/mapperDemo/PersonDTO.cs create mode 100644 v2/rscg_examples/MapItEasy/src/mapperDemo/Program.cs create mode 100644 v2/rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj create mode 100644 v2/rscg_examples/MapItEasy/video.json create mode 100644 v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md diff --git a/README.md b/README.md index b147e3d13..ba94e724d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# RSCG - 292 Examples of Roslyn Source Code Generators / 16 created by Microsoft / +# RSCG - 293 Examples of Roslyn Source Code Generators / 16 created by Microsoft / -The RSCG_Examples repository is a comprehensive documentation system that automatically processes and showcases 292 Roslyn Source Code Generator (RSCG) examples. The system transforms individual RSCG projects into structured documentation with code examples and cross-referenced content with a searchable website and code example exports. +The RSCG_Examples repository is a comprehensive documentation system that automatically processes and showcases 293 Roslyn Source Code Generator (RSCG) examples. The system transforms individual RSCG projects into structured documentation with code examples and cross-referenced content with a searchable website and code example exports. This system serves as both a learning resource for .NET developers interested in source generators and an automated pipeline for maintaining up-to-date documentation about the RSCG ecosystem -## Latest Update : 2026-09-06 => 06 September 2026 +## Latest Update : 2026-09-10 => 10 September 2026 If you want to see examples with code, please click ***[List V2](https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG)*** @@ -24,8 +24,30 @@ If you want to be notified each time I add a new RSCG example , please click htt ## Content -Those are the 292 Roslyn Source Code Generators that I have tested you can see and download source code example. +Those are the 293 Roslyn Source Code Generators that I have tested you can see and download source code example. ( including 16 from Microsoft ) +### 293. [MapItEasy](https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy) , in the [Audit](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#audit) category + +Generated on : 2026-09-10 => 10 September 2026 + +
+ Expand + + + +Author: Phong Nguyen + +Package Description + +Nuget: [https://www.nuget.org/packages/MapItEasy/](https://www.nuget.org/packages/MapItEasy/) + + +Link: [https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy](https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy) + +Source: [https://github.com/phongnguyend/MapItEasy/](https://github.com/phongnguyend/MapItEasy/) + +
+ ### 292. [LayeredCraft.OptimizedEnums](https://ignatandrei.github.io/RSCG_Examples/v2/docs/LayeredCraft.OptimizedEnums) , in the [Enum](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#enum) category Generated on : 2026-09-06 => 06 September 2026 diff --git a/later.md b/later.md index f151f7e3a..8fa0b1a6a 100644 --- a/later.md +++ b/later.md @@ -1,6 +1,6 @@ # Just later -## Latest Update : 2026-09-06 => 06 September 2026 +## Latest Update : 2026-09-10 => 10 September 2026 diff --git a/v2/.tours/MapItEasy.tour b/v2/.tours/MapItEasy.tour new file mode 100644 index 000000000..7cc849291 --- /dev/null +++ b/v2/.tours/MapItEasy.tour @@ -0,0 +1,42 @@ + +{ + "$schema": "https://aka.ms/codetour-schema", + "title": "MapItEasy", + "steps": + [ + { + "file": "rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj", + "description": "First, we add Nuget [MapItEasy](https://www.nuget.org/packages/MapItEasy/) in csproj ", + "pattern": "MapItEasy" + } + + ,{ + "file": "rscg_examples/MapItEasy/src/mapperDemo/PersonDTO.cs", + "description": "File PersonDTO.cs ", + "pattern": "this is the code" + } + + ,{ + "file": "rscg_examples/MapItEasy/src/mapperDemo/Person.cs", + "description": "File Person.cs ", + "pattern": "this is the code" + } + + ,{ + "file": "rscg_examples/MapItEasy/src/mapperDemo/Program.cs", + "description": "File Program.cs \r\n>> dotnet run --project rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj ", + "pattern": "this is the code" + } + + + ,{ + "file": "rscg_examples/MapItEasy/src/mapperDemo/obj/GX/MapItEasy.Generators/MapItEasy.Generators.MappingSourceGenerator/mapperDemo.UserMapper.g.cs", + "description": "Generated File 1 from 1 : mapperDemo.UserMapper.g.cs ", + "line": 1 + } + + ], + + "ref": "main" + +} \ No newline at end of file diff --git a/v2/Generator/all.csv b/v2/Generator/all.csv index 31222affa..78636bba1 100644 --- a/v2/Generator/all.csv +++ b/v2/Generator/all.csv @@ -291,3 +291,4 @@ Nr,Key,Source,Category 290,MagicConstants, https://github.com/LieselThuriot/MagicConstants,FilesToCode 291,Tenekon.MethodOverloads.SourceGenerator, https://github.com/tenekon/Tenekon.MethodOverloads.SourceGenerator,EnhancementClass 292,LayeredCraft.OptimizedEnums, https://github.com/layeredcraft/optimized-enums,Enum +293,MapItEasy, https://github.com/phongnguyend/MapItEasy/,Audit diff --git a/v2/RSCGExamplesData/GeneratorDataRec.json b/v2/RSCGExamplesData/GeneratorDataRec.json index 47ab23132..ba1224fc9 100644 --- a/v2/RSCGExamplesData/GeneratorDataRec.json +++ b/v2/RSCGExamplesData/GeneratorDataRec.json @@ -1769,5 +1769,11 @@ "Category": 19, "dtStart": "2026-09-06T00:00:00", "show": true - } + } , + { + "ID":"MapItEasy", + "Category": 47, + "dtStart": "2026-09-10T00:00:00", + "show": true + } ] \ No newline at end of file diff --git a/v2/rscg_examples/MapItEasy/description.json b/v2/rscg_examples/MapItEasy/description.json new file mode 100644 index 000000000..c9747e533 --- /dev/null +++ b/v2/rscg_examples/MapItEasy/description.json @@ -0,0 +1,22 @@ +{ + "generator":{ + "name":"MapItEasy", + "nuget":[ + "https://www.nuget.org/packages/MapItEasy/" + ], + "link":"https://github.com/phongnguyend/MapItEasy/", + "author":"Phong Nguyen", + "source":"https://github.com/phongnguyend/MapItEasy/" + }, + "data":{ + "goodFor":["Mapping from an object to another object"], + "csprojDemo":"mapperDemo.csproj", + "csFiles":["Program.cs","Person.cs","PersonDTO.cs"], + "excludeDirectoryGenerated":[""], + "includeAdditionalFiles":[""] + }, + "links":{ + "blog":"", + "video":"" + } +} \ No newline at end of file diff --git a/v2/rscg_examples/MapItEasy/nuget.txt b/v2/rscg_examples/MapItEasy/nuget.txt new file mode 100644 index 000000000..882e74f60 --- /dev/null +++ b/v2/rscg_examples/MapItEasy/nuget.txt @@ -0,0 +1 @@ +Package Description \ No newline at end of file diff --git a/v2/rscg_examples/MapItEasy/readme.txt b/v2/rscg_examples/MapItEasy/readme.txt new file mode 100644 index 000000000..f5636c618 --- /dev/null +++ b/v2/rscg_examples/MapItEasy/readme.txt @@ -0,0 +1,150 @@ +# MapItEasy + +Simple and fast object mapper (using Expression Trees API and Source Generators) to map data between 2 objects which have identical (or nearly identical) shapes. + +## Use Cases +- Cloning. +- Data archiving (moving data from the active table to the archived table). + +## Installation + +Install the package from NuGet: + +```bash +dotnet add package MapItEasy +``` + +Or using the NuGet Package Manager in Visual Studio: +``` +Install-Package MapItEasy +``` + +## Getting Started + +### Using `IMapper` + +```csharp +IMapper mapper = new ExpressionMapper(); +// or +IMapper mapper = new ReflectionMapper(); +``` + +#### Map all properties (return new object) +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; + +var target = mapper.Map(source); +``` + +#### Map all properties (existing object) +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target); +``` + +#### Map only selected properties +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target, new MappingOptions { Include = x => new { x.Name } }); +// target.Id == 0, target.Name == "abc1", target.Description == null +``` + +#### Map all properties except selected ones +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target, new MappingOptions { Exclude = x => new { x.Name } }); +// target.Id == 1, target.Name == null, target.Description == "xyz1" +``` + +> **Note:** `Include` and `Exclude` cannot be used together. Doing so will throw an `InvalidOperationException`. + +### Using Extension Methods + +`MapperExtensions` provides convenient extension methods using `ExpressionMapper` under the hood: + +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; + +// Return new object +var target = source.Map(); + +// Map to existing object +var target2 = new B(); +source.Map(target2); + +// With options +source.Map(target2, new MappingOptions { Include = x => new { x.Name } }); +``` + +## Source Generator + +For **zero-reflection, compile-time mapping**, install the source generator package: + +```bash +dotnet add package MapItEasy.Generators +``` + +Or using the NuGet Package Manager in Visual Studio: +``` +Install-Package MapItEasy.Generators +``` + +Define `partial` methods decorated with the `[GeneratedMapping]` attribute, and the source generator will provide the implementation at compile time: + +```csharp +using MapItEasy; + +public static partial class MappingExtensions +{ + // Return a new mapped object + [GeneratedMapping] + public static partial B MapToB(A source); + + // Map to an existing object + [GeneratedMapping] + public static partial void MapToB(A source, B target); + + // Extension method - return a new mapped object + [GeneratedMapping] + public static partial B ToB(this A source); + + // Extension method - map to an existing object + [GeneratedMapping] + public static partial void ToB(this A source, B target); + + // With MappingOptions support + [GeneratedMapping] + public static partial B MapToB(A source, MappingOptions? options = null); + + [GeneratedMapping] + public static partial void MapToB(A source, B target, MappingOptions? options = null); +} +``` + +Usage: + +```csharp +var source = new A { Id = 1, Name = "abc1", Description = "xyz1" }; + +// Static call +var target = MappingExtensions.MapToB(source); + +// Extension method call +var target2 = source.ToB(); + +// Map to existing object via extension method +var target3 = new B(); +source.ToB(target3); + +// With MappingOptions +var target4 = MappingExtensions.MapToB(source, new MappingOptions { Include = x => new { x.Name } }); +``` + +## License +**MapItEasy** is licensed under the [MIT](/LICENSE) license. diff --git a/v2/rscg_examples/MapItEasy/src/mapperDemo.slnx b/v2/rscg_examples/MapItEasy/src/mapperDemo.slnx new file mode 100644 index 000000000..6712d745c --- /dev/null +++ b/v2/rscg_examples/MapItEasy/src/mapperDemo.slnx @@ -0,0 +1,3 @@ + + + diff --git a/v2/rscg_examples/MapItEasy/src/mapperDemo/Person.cs b/v2/rscg_examples/MapItEasy/src/mapperDemo/Person.cs new file mode 100644 index 000000000..c1c18c040 --- /dev/null +++ b/v2/rscg_examples/MapItEasy/src/mapperDemo/Person.cs @@ -0,0 +1,8 @@ + +public partial class Person +{ + public int ID { get; set; } + public string? FirstName { get; set; } + public string? LastName { get; set; } +} + diff --git a/v2/rscg_examples/MapItEasy/src/mapperDemo/PersonDTO.cs b/v2/rscg_examples/MapItEasy/src/mapperDemo/PersonDTO.cs new file mode 100644 index 000000000..6d67df753 --- /dev/null +++ b/v2/rscg_examples/MapItEasy/src/mapperDemo/PersonDTO.cs @@ -0,0 +1,22 @@ +using MapItEasy; + +namespace mapperDemo; +public partial struct PersonDTO +{ + public string? FirstName { get; set; } + public string? LastName { get; set; } + + public string FullName { + get + { + return FirstName + " " + LastName; + } + } +} + + +public static partial class UserMapper +{ + [GeneratedMapping] + public static partial PersonDTO MapUser(Person from); +} \ No newline at end of file diff --git a/v2/rscg_examples/MapItEasy/src/mapperDemo/Program.cs b/v2/rscg_examples/MapItEasy/src/mapperDemo/Program.cs new file mode 100644 index 000000000..aca17106c --- /dev/null +++ b/v2/rscg_examples/MapItEasy/src/mapperDemo/Program.cs @@ -0,0 +1,6 @@ +using mapperDemo; +var p=new Person(); +p.FirstName = "Andrei"; +p.LastName = "Ignat"; +PersonDTO personDTO= UserMapper.MapUser(p); +Console.WriteLine(personDTO.FullName); diff --git a/v2/rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj b/v2/rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj new file mode 100644 index 000000000..4320a8fde --- /dev/null +++ b/v2/rscg_examples/MapItEasy/src/mapperDemo/mapperDemo.csproj @@ -0,0 +1,23 @@ + + + + Exe + net10.0 + enable + enable + + + + true + $(BaseIntermediateOutputPath)\GX + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/v2/rscg_examples/MapItEasy/video.json b/v2/rscg_examples/MapItEasy/video.json new file mode 100644 index 000000000..9f224850a --- /dev/null +++ b/v2/rscg_examples/MapItEasy/video.json @@ -0,0 +1,39 @@ +{ + "scriptName": "MapItEasy", + "steps": +[ + {"typeStep":"exec","arg":"clipchamp.exe launch"}, + {"typeStep":"text","arg": "Welcome to Roslyn Examples"}, + {"typeStep":"text","arg":"If you want to see more examples , see List Of RSCG"}, + {"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG"}, + {"typeStep":"text","arg": "My name is Andrei Ignat and I am deeply fond of Roslyn Source Code Generator. "}, + +{"typeStep":"text","arg": "Today I will present MapItEasy . Mapping from an object to another object ."}, +{"typeStep":"browser","arg":"https://www.nuget.org/packages/MapItEasy/"}, +{"typeStep":"text","arg": "The whole example is here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy"}, +{"typeStep":"text","arg": "You can download the code from here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy#download-example-net--c-"}, +{"typeStep":"text","arg":"Here is the code downloaded "}, +{"typeStep":"exec","arg":"explorer.exe /select,D:\\gth\\RSCG_Examples\\v2\\Generator.sln"}, +{"typeStep":"text","arg": "So , let's start the project with Visual Studio Code "}, +{"typeStep":"stepvscode","arg": "-n D:\\gth\\RSCG_Examples\\v2"}, + +{"typeStep":"text","arg": "To use it ,you will put the Nuget MapItEasy into the csproj "}, + +{"typeStep":"stepvscode","arg": "-r -g D:\\gth\\RSCG_Examples\\v2\\rscg_examples\\MapItEasy\\src\\mapperDemo\\mapperDemo.csproj"}, + +{"typeStep":"text","arg": "And now I will show you an example of using MapItEasy"}, + +{"typeStep":"hide","arg": "now execute the tour in VSCode"}, +{"typeStep":"tour", "arg": "src/.tours/"}, +{"typeStep":"text","arg":" And I will execute the project"}, +{"typeStep":"showproj", "arg":"mapperDemo.csproj"}, +{"typeStep":"text","arg":" This concludes the project"}, +{"typeStep":"waitseconds","arg":"30"}, +{"typeStep":"text","arg": "Remember, you can download the code from here"}, +{"typeStep":"browser","arg":"https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy#download-example-net--c-", +SpeakTest=" "}, +{"typeStep":"waitseconds","arg":"30"}, +] +} diff --git a/v2/rscg_examples_site/docs/Authors/Phong_Nguyen.md b/v2/rscg_examples_site/docs/Authors/Phong_Nguyen.md index 421735cfe..735d246a2 100644 --- a/v2/rscg_examples_site/docs/Authors/Phong_Nguyen.md +++ b/v2/rscg_examples_site/docs/Authors/Phong_Nguyen.md @@ -1,7 +1,9 @@ # Author : Phong Nguyen -Number RSCG: 1 +Number RSCG: 2 1 [TrimItEasy](/docs/TrimItEasy) [![Nuget](https://img.shields.io/nuget/dt/TrimItEasy?label=TrimItEasy)](https://www.nuget.org/packages/TrimItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/TrimItEasy?style=social) 2026-08-28 + 2 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 + diff --git a/v2/rscg_examples_site/docs/Categories/Audit.md b/v2/rscg_examples_site/docs/Categories/Audit.md index 30a3e7277..4b2d6baff 100644 --- a/v2/rscg_examples_site/docs/Categories/Audit.md +++ b/v2/rscg_examples_site/docs/Categories/Audit.md @@ -1,6 +1,8 @@

Audit

-Number RSCG: 1 +Number RSCG: 2 - 1 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 + 1 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 + + 2 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 \ No newline at end of file diff --git a/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx b/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx index 217e5b0d2..a88f7669c 100644 --- a/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx +++ b/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx @@ -1,6 +1,8 @@ ### Category "Audit" has the following generators: - 1 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 + 1 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 + + 2 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 ### See category diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md new file mode 100644 index 000000000..246d188a0 --- /dev/null +++ b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md @@ -0,0 +1,374 @@ +--- +sidebar_position: 2930 +title: 293 - MapItEasy +description: Mapping from an object to another object +slug: /MapItEasy +--- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import TOCInline from '@theme/TOCInline'; +import SameCategory from '../Categories/_PrimitiveAudit.mdx'; + +# MapItEasy by Phong Nguyen + + + + +## NuGet / site data +[![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) +[![GitHub last commit](https://img.shields.io/github/last-commit/phongnguyend/MapItEasy?label=updated)](https://github.com/phongnguyend/MapItEasy/) +![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) + +## Details + +### Info +:::info + +Name: **MapItEasy** + +Package Description + +Author: Phong Nguyen + +NuGet: +*https://www.nuget.org/packages/MapItEasy/* + + +You can find more details at https://github.com/phongnguyend/MapItEasy/ + +Source: https://github.com/phongnguyend/MapItEasy/ + +::: + +### Author +:::note +Phong Nguyen +![Alt text](https://github.com/phongnguyend.png) +::: + +## Original Readme +:::note + +# MapItEasy + +Simple and fast object mapper (using Expression Trees API and Source Generators) to map data between 2 objects which have identical (or nearly identical) shapes. + +## Use Cases +- Cloning. +- Data archiving (moving data from the active table to the archived table). + +## Installation + +Install the package from NuGet: + +```bash +dotnet add package MapItEasy +``` + +Or using the NuGet Package Manager in Visual Studio: +``` +Install-Package MapItEasy +``` + +## Getting Started + +### Using `IMapper` + +```csharp +IMapper mapper = new ExpressionMapper(); +// or +IMapper mapper = new ReflectionMapper(); +``` + +#### Map all properties (return new object) +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; + +var target = mapper.Map(source); +``` + +#### Map all properties (existing object) +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target); +``` + +#### Map only selected properties +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target, new MappingOptions
\{ Include = x => new \{ x.Name \} }); +// target.Id == 0, target.Name == "abc1", target.Description == null +``` + +#### Map all properties except selected ones +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; +var target = new B(); + +mapper.Map(source, target, new MappingOptions \{ Exclude = x => new \{ x.Name \} }); +// target.Id == 1, target.Name == null, target.Description == "xyz1" +``` + +> **Note:** `Include` and `Exclude` cannot be used together. Doing so will throw an `InvalidOperationException`. + +### Using Extension Methods + +`MapperExtensions` provides convenient extension methods using `ExpressionMapper` under the hood: + +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; + +// Return new object +var target = source.Map(); + +// Map to existing object +var target2 = new B(); +source.Map(target2); + +// With options +source.Map(target2, new MappingOptions \{ Include = x => new \{ x.Name \} }); +``` + +## Source Generator + +For **zero-reflection, compile-time mapping**, install the source generator package: + +```bash +dotnet add package MapItEasy.Generators +``` + +Or using the NuGet Package Manager in Visual Studio: +``` +Install-Package MapItEasy.Generators +``` + +Define `partial` methods decorated with the `[GeneratedMapping]` attribute, and the source generator will provide the implementation at compile time: + +```csharp +using MapItEasy; + +public static partial class MappingExtensions +{ + // Return a new mapped object + [GeneratedMapping] + public static partial B MapToB(A source); + + // Map to an existing object + [GeneratedMapping] + public static partial void MapToB(A source, B target); + + // Extension method - return a new mapped object + [GeneratedMapping] + public static partial B ToB(this A source); + + // Extension method - map to an existing object + [GeneratedMapping] + public static partial void ToB(this A source, B target); + + // With MappingOptions support + [GeneratedMapping] + public static partial B MapToB(A source, MappingOptions? options = null); + + [GeneratedMapping] + public static partial void MapToB(A source, B target, MappingOptions? options = null); +} +``` + +Usage: + +```csharp +var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; + +// Static call +var target = MappingExtensions.MapToB(source); + +// Extension method call +var target2 = source.ToB(); + +// Map to existing object via extension method +var target3 = new B(); +source.ToB(target3); + +// With MappingOptions +var target4 = MappingExtensions.MapToB(source, new MappingOptions \{ Include = x => new \{ x.Name \} }); +``` + +## License +**MapItEasy** is licensed under the [MIT](/LICENSE) license. + + +::: + +### About +:::note + +Mapping from an object to another object + + +::: + +## How to use + +### Example (source csproj, source files) + + + + + +This is the CSharp Project that references **MapItEasy** +```xml showLineNumbers {16} + + + + Exe + net10.0 + enable + enable + + + + true + $(BaseIntermediateOutputPath)\GX + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + +``` + + + + + + This is the use of **MapItEasy** in *Program.cs* + +```csharp showLineNumbers +using mapperDemo; +var p=new Person(); +p.FirstName = "Andrei"; +p.LastName = "Ignat"; +PersonDTO personDTO= UserMapper.MapUser(p); +Console.WriteLine(personDTO.FullName); + +``` + + + + + This is the use of **MapItEasy** in *Person.cs* + +```csharp showLineNumbers + +public partial class Person +{ + public int ID \{ get; set; } + public string? FirstName \{ get; set; } + public string? LastName \{ get; set; } +} + + +``` + + + + + This is the use of **MapItEasy** in *PersonDTO.cs* + +```csharp showLineNumbers +using MapItEasy; + +namespace mapperDemo; +public partial struct PersonDTO +{ + public string? FirstName \{ get; set; } + public string? LastName \{ get; set; } + + public string FullName \{ + get + { + return FirstName + " " + LastName; + } + } +} + + +public static partial class UserMapper +{ + [GeneratedMapping] + public static partial PersonDTO MapUser(Person from); +} +``` + + + + +### Generated Files + +Those are taken from $(BaseIntermediateOutputPath)\GX + + + + +```csharp showLineNumbers +// +#nullable enable + +namespace mapperDemo; + +public static partial class UserMapper +{ + public static partial global::mapperDemo.PersonDTO MapUser(global::Person from) + { + if (from == null) + throw new global::System.ArgumentNullException(nameof(from)); + + var target = new global::mapperDemo.PersonDTO(); + + target.FirstName = from.FirstName; + target.LastName = from.LastName; + + return target; + } + +} + +``` + + + + +## Useful + +### Download Example (.NET C#) + +:::tip + +[Download Example project MapItEasy ](/sources/MapItEasy.zip) + +::: + + +### Share MapItEasy + + + +https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy + + + diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/index.md b/v2/rscg_examples_site/docs/RSCG-Examples/index.md index 2d44df081..126889b99 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/index.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/index.md @@ -1,7 +1,7 @@ --- sidebar_position: 30 -title: 292 RSCG list by category -description: 292 RSCG list by category +title: 293 RSCG list by category +description: 293 RSCG list by category slug: /rscg-examples --- @@ -133,12 +133,17 @@ import DocCardList from '@theme/DocCardList'; ## Audit
- Expand Audit =>examples:1 + Expand Audit =>examples:2 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) + + + +[MapItEasy](/docs/MapItEasy) +
@@ -1847,6 +1852,8 @@ flowchart LR; Audit--> Najlot.Audit.SourceGenerator((Najlot.Audit.SourceGenerator)) + Audit--> MapItEasy((MapItEasy)) + Bitwise--> BitsKit((BitsKit)) Bitwise--> Darp.BinaryObjects((Darp.BinaryObjects)) diff --git a/v2/rscg_examples_site/docs/about.md b/v2/rscg_examples_site/docs/about.md index b3af20d56..20224a13c 100644 --- a/v2/rscg_examples_site/docs/about.md +++ b/v2/rscg_examples_site/docs/about.md @@ -6,7 +6,7 @@ title: About ## Content You will find here code examples -of 292 Roslyn Source Code Generator (RSCG) +of 293 Roslyn Source Code Generator (RSCG) that can be useful for you. That means, you will write more elegant and concise code - even if the generators code is not always nice to look. ## Are those examples ready for production? diff --git a/v2/rscg_examples_site/docs/indexRSCG.md b/v2/rscg_examples_site/docs/indexRSCG.md index 1af071cfb..915d608a7 100644 --- a/v2/rscg_examples_site/docs/indexRSCG.md +++ b/v2/rscg_examples_site/docs/indexRSCG.md @@ -7,9 +7,9 @@ slug: /List-of-RSCG import useBaseUrl from '@docusaurus/useBaseUrl'; -## 292 RSCG with examples in descending chronological order +## 293 RSCG with examples in descending chronological order -This is the list of 292 ( 16 from Microsoft) RSCG with examples +This is the list of 293 ( 16 from Microsoft) RSCG with examples [See by category](/docs/rscg-examples) [See as json](/exports/RSCG.json) [See as Excel](/exports/RSCG.xlsx) @@ -20,6 +20,7 @@ This is the list of 292 ( 16 from Microsoft) RSCG with examples | No | Name | Date | Category | | --------- | ----- | ---- | -------- | +|293| [MapItEasy by Phong Nguyen ](/docs/MapItEasy)|2026-09-10 => 10 September 2026 | [Audit](/docs/Categories/Audit) | |292| [LayeredCraft.OptimizedEnums by LayeredCraft ](/docs/LayeredCraft.OptimizedEnums)|2026-09-06 => 06 September 2026 | [Enum](/docs/Categories/Enum) | |291| [Tenekon.MethodOverloads.SourceGenerator by Tenekon ](/docs/Tenekon.MethodOverloads.SourceGenerator)|2026-09-05 => 05 September 2026 | [EnhancementClass](/docs/Categories/EnhancementClass) | |290| [MagicConstants by Liesel Thuriot ](/docs/MagicConstants)|2026-09-04 => 04 September 2026 | [FilesToCode](/docs/Categories/FilesToCode) | diff --git a/v2/rscg_examples_site/src/components/HomepageFeatures/index.js b/v2/rscg_examples_site/src/components/HomepageFeatures/index.js index c04762fc8..f2559e7af 100644 --- a/v2/rscg_examples_site/src/components/HomepageFeatures/index.js +++ b/v2/rscg_examples_site/src/components/HomepageFeatures/index.js @@ -4,7 +4,7 @@ import styles from './styles.module.css'; const FeatureList = [ { -title: '292 Examples (16 from MSFT)', +title: '293 Examples (16 from MSFT)', Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( <> diff --git a/v2/rscg_examples_site/static/exports/RSCG.json b/v2/rscg_examples_site/static/exports/RSCG.json index 6d8285512..eb0e4b735 100644 --- a/v2/rscg_examples_site/static/exports/RSCG.json +++ b/v2/rscg_examples_site/static/exports/RSCG.json @@ -2337,6 +2337,14 @@ "Source": "https://github.com/layeredcraft/optimized-enums", "Category": "Enum", "AddedOn": "2026-09-06T00:00:00" + }, + { + "Name": "MapItEasy", + "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy", + "NuGet": "https://www.nuget.org/packages/MapItEasy/", + "Source": "https://github.com/phongnguyend/MapItEasy/", + "Category": "Audit", + "AddedOn": "2026-09-10T00:00:00" } ] } \ No newline at end of file diff --git a/v2/rscg_examples_site/static/exports/RSCG.xlsx b/v2/rscg_examples_site/static/exports/RSCG.xlsx index 85ad45e06f10d24da9f718cda57553c40095923e..3bce6cf95665cf682d5085061a0c9aa0260756e8 100644 GIT binary patch delta 870 zcmexX)>mF1;LXe;!oa}5!H~1uAeJ}f%jrEpo)RMi13!?i$k8v)FUn5J&(GGY$j#~P z_vSlfz~i!BsFI(vgK5>RO$?kHTZLP$Efn;PIm%d7bEy9GsmGG1tAf|CUGLOp+xEnJ zMvo}R7gN(~^SySs7)KpirPcPw?O~0IRd>mIOL?!1`s6ponmh9@X37Qk+oiTOT{c|% zP-Q3o3h6w-#jl@)tlU|0tE%Ep^{zjmhqBvM-|)ZI?O47!TZpe?!flmrX)BE`r({0J z*%lzV$MTT9OiIt%Lg%kX7xwE9rv4!85jy|H=kyTFpl0>c+|PtRP>$hlt=n%1u;7Y<^ zt{N6!c$jVXOy-rX$mRE^6dWaD^aOJ2PyP_Nar@`nkjp=(m;KyqwR!uWpY{LY0n7jn z;F8Q*?lqU=1i9p5!g9Bpled_w*B|sdY{1hN zuli}O)!iVC%bQ|%6wLj`q*!<>D_2NWGUxoZ!*ZSB3JNV@oy_8X)9P=}w>$ZM`s=Fd zS#ICF40-Q)uF&S|ne#2JU~WtDwsPGZ^VhPyTGM;4@GEXCdNirU?)e5MpIys6m!4uT zN=>Sr6QY;<#z3PsK=xtN=jxvAJTvNzZ~l{cq3@FacEQV&uOGYU{bxEh<-D?LLba&% zDWMN0b?KprjMZjBW&Qf5nTahAdxhQxF&?fLuKN6OLe(Oh@?V|ZpVC+6f5|y5ojoha zql5ik&C7>xIA`;t#>7p%`44{q(^>=*1A{P-j&{z^D@n~OiQjz3LVyt*B;aH@`KzS~ zGcbTA>sU!MzMSk~C8K~Eam)-7KEG}Bp&$rmj| OCns17u>G(EDFy)i;#R!? delta 840 zcmeAx|5jEX;LXe;!oa}5!SHyZYOLweOMZKSJS9d327Vx2k)vOpUzDAcpP#K)k(<-o zf10n!K)|(r>CC-iJdREb;>qvjaxXAGERub&qwDgTzRN0} zi%K`GGp?xKQE#*2bxE^zmLA*M`c4a(sr++yUKehj5UN-o#Asi;+8WiXr{Wtv&12m7 zcRwQ^$ma}44^^idGcfG2+I)&B!r1=oqplC8^2K~RKX<(>Po0p%DIc%U@ORQj#Si;F z-(FcKP?tH~e)VRR)ARp-|IZFHnE@P#4pI9eH`kg;GYTY{nC+UB_)~w!Q>U@ za-1OBUet>IyfgW{xq7{A-eChCxAjT|>ocvpR7CZ53kvC);jlJ z(GJn=Qev|zdFk>&`R50Qef#(2mR+w*Ixq6*#hRv78jTZ8-Y@^!T zPi``9@{x8M0}oD^RPWN0wjlEOp~_8_mv$Pwo^t!b;_J`WR3F-=Er9* z^2toU#vZbch$NM^jUqGBJ!a0*SW4UOy5d^3It+KRqf4d%`lCBDQfV? ze4)7bxk3dm@8$C?wCkt6@>{=7>Sh@4^F1OlTRwU7i~HZGV}OMUIB9LZWue6g_B%L@ zP3E;Skq3nYBpMhPELj*Bc!4Pn0bWf`u#!eL34{V5Yctd2b4*g&0p5&EA`GBp zjEDgZU=jvlZm=kf2$=lPN(yW-I0}Hmdx2`CVA5cE;bbXmO|Y7qdh;Lt0*Xa2F)#?D QsM$I>$y$x=fh9-~09)iihX4Qo From 95814cf7649568f22ef4c0199172a708f441c91d Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Wed, 16 Sep 2026 21:02:32 +0300 Subject: [PATCH 2/5] zip --- v2/book/examples/MapItEasy.html | 65 ++++++++++++++++++ v2/book/list.html | 6 +- v2/book/pandocHTML.yaml | 1 + v2/docFind.json | 6 ++ .../static/sources/MapItEasy.zip | Bin 0 -> 1484 bytes 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 v2/book/examples/MapItEasy.html create mode 100644 v2/rscg_examples_site/static/sources/MapItEasy.zip diff --git a/v2/book/examples/MapItEasy.html b/v2/book/examples/MapItEasy.html new file mode 100644 index 000000000..50c164346 --- /dev/null +++ b/v2/book/examples/MapItEasy.html @@ -0,0 +1,65 @@ + +

RSCG nr 293 : MapItEasy

+ +

Info

+Nuget : https://www.nuget.org/packages/MapItEasy/ + +

You can find more details at : https://github.com/phongnguyend/MapItEasy/

+ +

Author :Phong Nguyen

+ +

Source: https://github.com/phongnguyend/MapItEasy/

+ +

About

+ +Mapping from an object to another object + +

+ How to use +

+

+ Add reference to the MapItEasy in the csproj +

+ + +

This was for me the starting code

+ +
+ I have coded the file Program.cs +
+ +
+ +
+ I have coded the file Person.cs +
+ +
+ +
+ I have coded the file PersonDTO.cs +
+ +
+

And here are the generated files

+ +
+ The file generated is mapperDemo.UserMapper.g.cs +
+ + +

+ You can download the code and this page as pdf from + + https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy + +

+ + +

+ You can see the whole list at + + https://ignatandrei.github.io/RSCG_Examples/v2/docs/List-of-RSCG + +

+ diff --git a/v2/book/list.html b/v2/book/list.html index b17cfc29c..f8aaacecd 100644 --- a/v2/book/list.html +++ b/v2/book/list.html @@ -17,7 +17,7 @@

-This is the list of 292 RSCG with examples => +This is the list of 293 RSCG with examples =>

@@ -1194,6 +1194,10 @@

+ + + +
292 LayeredCraft.OptimizedEnums
293MapItEasy
diff --git a/v2/book/pandocHTML.yaml b/v2/book/pandocHTML.yaml index 8b1d12083..85eb831fa 100644 --- a/v2/book/pandocHTML.yaml +++ b/v2/book/pandocHTML.yaml @@ -306,6 +306,7 @@ input-files: - examples/MagicConstants.html - examples/Tenekon.MethodOverloads.SourceGenerator.html - examples/LayeredCraft.OptimizedEnums.html +- examples/MapItEasy.html # or you may use input-file: with a single value # defaults: diff --git a/v2/docFind.json b/v2/docFind.json index 523c2494f..f1179d507 100644 --- a/v2/docFind.json +++ b/v2/docFind.json @@ -1750,5 +1750,11 @@ "category": "Enum", "href": "/RSCG_Examples/v2/docs/LayeredCraft.OptimizedEnums/", "body": "High-performance alternative to SmartEnum using source generation. Provides zero-reflection, AOT-safe enum types with compile-time validation and O(1) lookup tables." + }, + { + "title": "MapItEasy", + "category": "Audit", + "href": "/RSCG_Examples/v2/docs/MapItEasy/", + "body": "Package Description" } ] \ No newline at end of file diff --git a/v2/rscg_examples_site/static/sources/MapItEasy.zip b/v2/rscg_examples_site/static/sources/MapItEasy.zip new file mode 100644 index 0000000000000000000000000000000000000000..b7d5fb8b2d5fcfa8ef50482e7fc0a133842f7652 GIT binary patch literal 1484 zcmWIWW@Zs#U|`^2@L1FyW7)hb$QsD=0b+h2&P^;RNG)S%cA7I~gMd)?jO>!fb(hE-EUzBESVe3|%# znIQmf&zWTgu`$6mR(XsJ4C2fT3^FM8=p$K~TwG9;pVb@e=y%vaz{Wi2UxKU5gGnOm ze3co!R?BFJiX3U|_S|;#%0}htSdI9{2PXeuDiiYZ)PAsI^W%@_*8KhWP0oL6O_R*Y z(v31~;yU3$r!Ctimxx7ac+{N#&QZ99OJv<~uUT4!6Ik_m!`RYab4~if`Y2;{o}}?A zu?A&V?}}+zGdT`CuDj8{IB)UO^wgt~=RUX@Z@j?C@$10a0`|ORO-M+_vl-tO{<)Ct;~E?8JLC4jpK-G5esgU5 z#e#^ZowJomsGgX$ssGSuue`t+*E%$lYqn3lxI^lDt2jvXfIhlEkawQxg$!1^{A@r%*vPF zxbkMY9#yUD+_}qI&#b|R%2?&Sute|BbS-v+v26)4?cbBjxeKhQb3f!2A4 z4S4SI{@`<2&Su%vuJ?0+!)M7^nkNoe*vW1S?$rL2B>g7R0cr9y}OxPlw%-gnm2 z{Ms9{IOHFTHqU!2_n(@dbk5scQ(^ROl5$p<7kF1f;L-HeUK}T)7BUC+Ej=_XLdyR4 zohOmA(-SU!slyVibKP@=(Ptr&NA&MVs+`X_}KUovD=`~G2l>vEI5 z?Jt#swq5_tTT>kD?{n=ZKO%0lfZ?$#BJ_G2FdQ}ju_#)26y>KECFVjRr#`bVEpC@n zUXr6@)oFvUWnEXkMFIzy^o&x|>(*IHGT89(pj$@uZ>tQVr8! zPMwF7I|RP_ocGpYn-fnL-qG) zY*x9dZmb{5yw3CdS`&5l6e|x|U_>%9iGULj_F@L;dL)2IWZ*&vSu?h>1EDhm$V6zy zEJ=_}!j`%bCJ8X1m;_Jj$R=P*lL!;$U^4-dLXi!@7Lf=;)&Pq~Bo76^qcy;rl?|kf O6$k@?`5~1B!~+0H0}`JA literal 0 HcmV?d00001 From d4e477470dc108510bff48dc66aa60f7b23f0794 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Wed, 16 Sep 2026 21:03:33 +0300 Subject: [PATCH 3/5] md --- v2/RSCGExamplesData/GeneratorDataRec.json | 2 +- .../docs/RSCG-Examples/MapItEasy.md | 24 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/v2/RSCGExamplesData/GeneratorDataRec.json b/v2/RSCGExamplesData/GeneratorDataRec.json index ba1224fc9..17a5283ed 100644 --- a/v2/RSCGExamplesData/GeneratorDataRec.json +++ b/v2/RSCGExamplesData/GeneratorDataRec.json @@ -1775,5 +1775,5 @@ "Category": 47, "dtStart": "2026-09-10T00:00:00", "show": true - } + } ] \ No newline at end of file diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md index 246d188a0..f390f526a 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md @@ -49,15 +49,15 @@ Phong Nguyen ## Original Readme :::note -# MapItEasy +### MapItEasy Simple and fast object mapper (using Expression Trees API and Source Generators) to map data between 2 objects which have identical (or nearly identical) shapes. -## Use Cases +###### Use Cases - Cloning. - Data archiving (moving data from the active table to the archived table). -## Installation +###### Installation Install the package from NuGet: @@ -70,9 +70,9 @@ Or using the NuGet Package Manager in Visual Studio: Install-Package MapItEasy ``` -## Getting Started +###### Getting Started -### Using `IMapper` +######### Using `IMapper` ```csharp IMapper mapper = new ExpressionMapper(); @@ -80,14 +80,14 @@ IMapper mapper = new ExpressionMapper(); IMapper mapper = new ReflectionMapper(); ``` -#### Map all properties (return new object) +########## Map all properties (return new object) ```csharp var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; var target = mapper.Map(source); ``` -#### Map all properties (existing object) +########## Map all properties (existing object) ```csharp var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; var target = new B(); @@ -95,7 +95,7 @@ var target = new B(); mapper.Map(source, target); ``` -#### Map only selected properties +########## Map only selected properties ```csharp var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; var target = new B(); @@ -104,7 +104,7 @@ mapper.Map(source, target, new MappingOptions \{ Include = x => new \{ x.Name // target.Id == 0, target.Name == "abc1", target.Description == null ``` -#### Map all properties except selected ones +########## Map all properties except selected ones ```csharp var source = new A \{ Id = 1, Name = "abc1", Description = "xyz1" }; var target = new B(); @@ -115,7 +115,7 @@ mapper.Map(source, target, new MappingOptions \{ Exclude = x => new \{ x.Name > **Note:** `Include` and `Exclude` cannot be used together. Doing so will throw an `InvalidOperationException`. -### Using Extension Methods +######### Using Extension Methods `MapperExtensions` provides convenient extension methods using `ExpressionMapper` under the hood: @@ -133,7 +133,7 @@ source.Map(target2); source.Map(target2, new MappingOptions \{ Include = x => new \{ x.Name \} }); ``` -## Source Generator +###### Source Generator For **zero-reflection, compile-time mapping**, install the source generator package: @@ -197,7 +197,7 @@ source.ToB(target3); var target4 = MappingExtensions.MapToB(source, new MappingOptions \{ Include = x => new \{ x.Name \} }); ``` -## License +###### License **MapItEasy** is licensed under the [MIT](/LICENSE) license. From 9ad8b0499ebab42d0e04aff44d3503694da971c4 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Wed, 16 Sep 2026 21:13:32 +0300 Subject: [PATCH 4/5] Fix LICENSE link rewriting for generator docs Adjust MultiGeneratorV2 to rewrite both `(LICENSE)` and `(/LICENSE)` links to the generator source URL without introducing a broken slash. Also update the MapItEasy docs to use the correct repository LICENSE URL and refresh the exported RSCG.xlsx data. --- v2/Generator/MultiGeneratorV2.cs | 4 +++- .../docs/RSCG-Examples/MapItEasy.md | 2 +- .../static/exports/RSCG.xlsx | Bin 15246 -> 15251 bytes 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/v2/Generator/MultiGeneratorV2.cs b/v2/Generator/MultiGeneratorV2.cs index 644724680..c10863109 100644 --- a/v2/Generator/MultiGeneratorV2.cs +++ b/v2/Generator/MultiGeneratorV2.cs @@ -219,7 +219,9 @@ public string[] SourceNoRSCG() text = text.Replace("(src/Ling.EntityFrameworkCore.Audit)", $"({d.Generator!.Source}src/Ling.EntityFrameworkCore.Audit)"); text = text.Replace("(src/Ling.Blazor)", $"({d.Generator!.Source}src/Ling.Blazor)"); text = text.Replace("(src/Ling.Blazor.Authentication)", $"({d.Generator!.Source}src/Ling.Blazor.Authentication)"); - text = text.Replace("(LICENSE)", $"({d.Generator!.Source}/LICENSE)"); + text = text.Replace("(LICENSE)", $"({d.Generator!.Source}LICENSE)"); + text = text.Replace("(/LICENSE)", $"({d.Generator!.Source}LICENSE)"); + text = text.Replace("(LICENSE.md)", $"({d.Generator!.Source}/LICENSE.md)"); text = text.Replace("(LICENSE.txt)", $"({d.Generator!.Source}/LICENSE.md)"); text = text.Replace("(CHANGELOG.md)", $"({d.Generator!.Source}/CHANGELOG.md)"); diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md index f390f526a..19e6a73d0 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md @@ -198,7 +198,7 @@ var target4 = MappingExtensions.MapToB(source, new MappingOptions \{ Include ``` ###### License -**MapItEasy** is licensed under the [MIT](/LICENSE) license. +**MapItEasy** is licensed under the [MIT](https://github.com/phongnguyend/MapItEasy/LICENSE) license. ::: diff --git a/v2/rscg_examples_site/static/exports/RSCG.xlsx b/v2/rscg_examples_site/static/exports/RSCG.xlsx index 3bce6cf95665cf682d5085061a0c9aa0260756e8..9eba4133ab60519c2738ebf6d3ee2aa4d28b2654 100644 GIT binary patch delta 746 zcmeAxpIlxa;LXe;!oa}5!7z2DLG0AkUeERec}k274E#X4B1gYGzbHE?KR;WqA~&bE z|6txB1D>{c)lafP0zCm+pE6w9qHW{oG1qKS=W2@$cK?jb9-MmnIsf#pe_7@~9q$-y zS{!gVDX!r_!iv&`s~^sK<8yG`%4MHsKYHp@BKXs;z_R}8h2kk9_S}QaGglv<@Xtkw&+6&9JG&=3o>(?Xe`QbqzO($Oo;?-c z@M+`kgN#g5S8m?NwB48k6asJWnBLo5YbL|UpPG_rl4O~jWNDmgVv%Aod4;(gCrAa$ z(HTXzC!aUhsE36`t*=JwvW^3((_;no6PEf#UsMYeGOIA-v$+(Pc+sKcn6^Q=Meygl^DaG1zo#Yx7%?Ig=|VZMdJyZ<2IMdZT1P(ay!rC8i`ieM zXNIxvT?hIkth~5>r2aYAb%yENB`u3JvqfK}ZeFudEc9l`fgk%h_wFp{vJISN{r5=Z z&&@h=UzQxKy6T}ErKuhJO5fJ5`p`RO~V17n9OTsA`c1%Q0UDACKF2* z1_oYWQbB+>lM}3DfPp%>4oGcfntYB)N;|-tkx7IBl+YN!2@Mp?8bIA3%#F|rWaUkM zXe9-<0UXdkk-b1QQYdQnPnNRQ1gp8JH~--;pj-qK1A{P%noERO$?kHTZLP$Efn;PIm%d7bEy9GsmGG1tAf|CUGLOp+xEnJ zMvo}R7gN(~^SySs7)KpirPcPw?O~0IRd>mIOL?!1`s6ponmh9@X37Qk+oiTOT{c|% zP-Q3o3h6w-#jl@)tlU|0tE%Ep^{zjmhqBvM-|)ZI?O47!TZpe?!flmrX)BE`r({0J z*%lzV$MTT9OiIt%Lg%kX7xwEEzYsazY>#7ZaAd z-2?{CUSJ?eF-%slmZ{%5@u1&f1D>{c)lYM+?gnXG-W0o|VD2|2#ll-zxk9RvIp?<> zmg@{xP-qG3WES_ER)2fG-O2aUUsqMna{K0G$a~Log*IQ$oNs9bb6b+PmFwo1zn1OQ zn%;YbUvXp6qe(4x&o?;v>{{-*^b~thYEtc-5WUivJaa+SNCjBV3tpal{n$nCKhv=(=ap3xszt3&34JiBOAk$CtTq!W>(@8UOl*1BEA%#q@o>Fx z)#r~BsutOl|LW}il)f_mOU`NO>{&q`9qjjNUOs%oIh!9j)HdI<&}QU>r<2J-Rwlrp zo9tmFWAhS{Sc*$3b5e^zNhQFWkx7IBk+N=EcHD0^W?(3=WoD27Dn@`!lNVU2!-IbE zc`GriY%>Oi_@dODVtqXjiEb8Z1RzXeVAwNR-dYpnCNFCl#

tt<~6mSb`J)064B7 AR{#J2 From 5999656335e0b3f2eec5d647619b39a2b513d392 Mon Sep 17 00:00:00 2001 From: Andrei Ignat Date: Wed, 16 Sep 2026 21:16:39 +0300 Subject: [PATCH 5/5] CATEGORY --- README.md | 2 +- v2/Generator/all.csv | 2 +- v2/RSCGExamplesData/GeneratorDataRec.json | 2 +- v2/rscg_examples_site/docs/Categories/Audit.md | 6 ++---- .../docs/Categories/Mapper.md | 12 +++++++----- .../docs/Categories/_PrimitiveAudit.mdx | 4 +--- .../docs/Categories/_PrimitiveMapper.mdx | 10 ++++++---- .../docs/RSCG-Examples/MapItEasy.md | 2 +- .../docs/RSCG-Examples/index.md | 18 +++++++++--------- v2/rscg_examples_site/docs/indexRSCG.md | 2 +- v2/rscg_examples_site/static/exports/RSCG.json | 2 +- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index ba94e724d..9d917547c 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ If you want to be notified each time I add a new RSCG example , please click htt Those are the 293 Roslyn Source Code Generators that I have tested you can see and download source code example. ( including 16 from Microsoft ) -### 293. [MapItEasy](https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy) , in the [Audit](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#audit) category +### 293. [MapItEasy](https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy) , in the [Mapper](https://ignatandrei.github.io/RSCG_Examples/v2/docs/rscg-examples#mapper) category Generated on : 2026-09-10 => 10 September 2026 diff --git a/v2/Generator/all.csv b/v2/Generator/all.csv index 78636bba1..f73458d14 100644 --- a/v2/Generator/all.csv +++ b/v2/Generator/all.csv @@ -291,4 +291,4 @@ Nr,Key,Source,Category 290,MagicConstants, https://github.com/LieselThuriot/MagicConstants,FilesToCode 291,Tenekon.MethodOverloads.SourceGenerator, https://github.com/tenekon/Tenekon.MethodOverloads.SourceGenerator,EnhancementClass 292,LayeredCraft.OptimizedEnums, https://github.com/layeredcraft/optimized-enums,Enum -293,MapItEasy, https://github.com/phongnguyend/MapItEasy/,Audit +293,MapItEasy, https://github.com/phongnguyend/MapItEasy/,Mapper diff --git a/v2/RSCGExamplesData/GeneratorDataRec.json b/v2/RSCGExamplesData/GeneratorDataRec.json index 17a5283ed..a6f62b31b 100644 --- a/v2/RSCGExamplesData/GeneratorDataRec.json +++ b/v2/RSCGExamplesData/GeneratorDataRec.json @@ -1772,7 +1772,7 @@ } , { "ID":"MapItEasy", - "Category": 47, + "Category": 6, "dtStart": "2026-09-10T00:00:00", "show": true } diff --git a/v2/rscg_examples_site/docs/Categories/Audit.md b/v2/rscg_examples_site/docs/Categories/Audit.md index 4b2d6baff..30a3e7277 100644 --- a/v2/rscg_examples_site/docs/Categories/Audit.md +++ b/v2/rscg_examples_site/docs/Categories/Audit.md @@ -1,8 +1,6 @@

Audit

-Number RSCG: 2 +Number RSCG: 1 - 1 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 - - 2 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 + 1 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 \ No newline at end of file diff --git a/v2/rscg_examples_site/docs/Categories/Mapper.md b/v2/rscg_examples_site/docs/Categories/Mapper.md index 0448fbc4e..b46e4cbe6 100644 --- a/v2/rscg_examples_site/docs/Categories/Mapper.md +++ b/v2/rscg_examples_site/docs/Categories/Mapper.md @@ -1,6 +1,6 @@

Mapper

-Number RSCG: 11 +Number RSCG: 12 1 [AutoDTO](/docs/AutoDTO) [![Nuget](https://img.shields.io/nuget/dt/AutoDTO?label=AutoDTO)](https://www.nuget.org/packages/AutoDTO/) ![GitHub Repo stars](https://img.shields.io/github/stars/Ohorodnikov/AutoDto?style=social) 2023-08-24 @@ -16,11 +16,13 @@ Number RSCG: 11 7 [MagicMap](/docs/MagicMap) [![Nuget](https://img.shields.io/nuget/dt/MagicMap?label=MagicMap)](https://www.nuget.org/packages/MagicMap/) ![GitHub Repo stars](https://img.shields.io/github/stars/bramerdaniel/MagicMap?style=social) 2023-10-08 - 8 [mapperly](/docs/mapperly) [![Nuget](https://img.shields.io/nuget/dt/Riok.Mapperly?label=Riok.Mapperly)](https://www.nuget.org/packages/Riok.Mapperly/) ![GitHub Repo stars](https://img.shields.io/github/stars/riok/mapperly?style=social) 2023-04-16 + 8 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 - 9 [MapTo](/docs/MapTo) [![Nuget](https://img.shields.io/nuget/dt/MapTo?label=MapTo)](https://www.nuget.org/packages/MapTo/) ![GitHub Repo stars](https://img.shields.io/github/stars/mrtaikandi/MapTo?style=social) 2023-10-05 + 9 [mapperly](/docs/mapperly) [![Nuget](https://img.shields.io/nuget/dt/Riok.Mapperly?label=Riok.Mapperly)](https://www.nuget.org/packages/Riok.Mapperly/) ![GitHub Repo stars](https://img.shields.io/github/stars/riok/mapperly?style=social) 2023-04-16 - 10 [Najlot.Map.SourceGenerator](/docs/Najlot.Map.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Map.SourceGenerator?label=Najlot.Map.SourceGenerator)](https://www.nuget.org/packages/Najlot.Map.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Map?style=social) 2026-08-29 + 10 [MapTo](/docs/MapTo) [![Nuget](https://img.shields.io/nuget/dt/MapTo?label=MapTo)](https://www.nuget.org/packages/MapTo/) ![GitHub Repo stars](https://img.shields.io/github/stars/mrtaikandi/MapTo?style=social) 2023-10-05 - 11 [NextGenMapper](/docs/NextGenMapper) [![Nuget](https://img.shields.io/nuget/dt/NextGenMapper?label=NextGenMapper)](https://www.nuget.org/packages/NextGenMapper/) ![GitHub Repo stars](https://img.shields.io/github/stars/DedAnton/NextGenMapper?style=social) 2023-08-16 + 11 [Najlot.Map.SourceGenerator](/docs/Najlot.Map.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Map.SourceGenerator?label=Najlot.Map.SourceGenerator)](https://www.nuget.org/packages/Najlot.Map.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Map?style=social) 2026-08-29 + + 12 [NextGenMapper](/docs/NextGenMapper) [![Nuget](https://img.shields.io/nuget/dt/NextGenMapper?label=NextGenMapper)](https://www.nuget.org/packages/NextGenMapper/) ![GitHub Repo stars](https://img.shields.io/github/stars/DedAnton/NextGenMapper?style=social) 2023-08-16 \ No newline at end of file diff --git a/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx b/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx index a88f7669c..217e5b0d2 100644 --- a/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx +++ b/v2/rscg_examples_site/docs/Categories/_PrimitiveAudit.mdx @@ -1,8 +1,6 @@ ### Category "Audit" has the following generators: - 1 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 - - 2 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 + 1 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Audit.SourceGenerator?label=Najlot.Audit.SourceGenerator)](https://www.nuget.org/packages/Najlot.Audit.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Audit?style=social) 2026-04-06 ### See category diff --git a/v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx b/v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx index bfa8ca880..fb7d23f4d 100644 --- a/v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx +++ b/v2/rscg_examples_site/docs/Categories/_PrimitiveMapper.mdx @@ -14,13 +14,15 @@ 7 [MagicMap](/docs/MagicMap) [![Nuget](https://img.shields.io/nuget/dt/MagicMap?label=MagicMap)](https://www.nuget.org/packages/MagicMap/) ![GitHub Repo stars](https://img.shields.io/github/stars/bramerdaniel/MagicMap?style=social) 2023-10-08 - 8 [mapperly](/docs/mapperly) [![Nuget](https://img.shields.io/nuget/dt/Riok.Mapperly?label=Riok.Mapperly)](https://www.nuget.org/packages/Riok.Mapperly/) ![GitHub Repo stars](https://img.shields.io/github/stars/riok/mapperly?style=social) 2023-04-16 + 8 [MapItEasy](/docs/MapItEasy) [![Nuget](https://img.shields.io/nuget/dt/MapItEasy?label=MapItEasy)](https://www.nuget.org/packages/MapItEasy/) ![GitHub Repo stars](https://img.shields.io/github/stars/phongnguyend/MapItEasy?style=social) 2026-09-10 - 9 [MapTo](/docs/MapTo) [![Nuget](https://img.shields.io/nuget/dt/MapTo?label=MapTo)](https://www.nuget.org/packages/MapTo/) ![GitHub Repo stars](https://img.shields.io/github/stars/mrtaikandi/MapTo?style=social) 2023-10-05 + 9 [mapperly](/docs/mapperly) [![Nuget](https://img.shields.io/nuget/dt/Riok.Mapperly?label=Riok.Mapperly)](https://www.nuget.org/packages/Riok.Mapperly/) ![GitHub Repo stars](https://img.shields.io/github/stars/riok/mapperly?style=social) 2023-04-16 - 10 [Najlot.Map.SourceGenerator](/docs/Najlot.Map.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Map.SourceGenerator?label=Najlot.Map.SourceGenerator)](https://www.nuget.org/packages/Najlot.Map.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Map?style=social) 2026-08-29 + 10 [MapTo](/docs/MapTo) [![Nuget](https://img.shields.io/nuget/dt/MapTo?label=MapTo)](https://www.nuget.org/packages/MapTo/) ![GitHub Repo stars](https://img.shields.io/github/stars/mrtaikandi/MapTo?style=social) 2023-10-05 - 11 [NextGenMapper](/docs/NextGenMapper) [![Nuget](https://img.shields.io/nuget/dt/NextGenMapper?label=NextGenMapper)](https://www.nuget.org/packages/NextGenMapper/) ![GitHub Repo stars](https://img.shields.io/github/stars/DedAnton/NextGenMapper?style=social) 2023-08-16 + 11 [Najlot.Map.SourceGenerator](/docs/Najlot.Map.SourceGenerator) [![Nuget](https://img.shields.io/nuget/dt/Najlot.Map.SourceGenerator?label=Najlot.Map.SourceGenerator)](https://www.nuget.org/packages/Najlot.Map.SourceGenerator/) ![GitHub Repo stars](https://img.shields.io/github/stars/najlot/Map?style=social) 2026-08-29 + + 12 [NextGenMapper](/docs/NextGenMapper) [![Nuget](https://img.shields.io/nuget/dt/NextGenMapper?label=NextGenMapper)](https://www.nuget.org/packages/NextGenMapper/) ![GitHub Repo stars](https://img.shields.io/github/stars/DedAnton/NextGenMapper?style=social) 2023-08-16 ### See category diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md index 19e6a73d0..b1ec88e27 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/MapItEasy.md @@ -7,7 +7,7 @@ slug: /MapItEasy import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import TOCInline from '@theme/TOCInline'; -import SameCategory from '../Categories/_PrimitiveAudit.mdx'; +import SameCategory from '../Categories/_PrimitiveMapper.mdx'; # MapItEasy by Phong Nguyen diff --git a/v2/rscg_examples_site/docs/RSCG-Examples/index.md b/v2/rscg_examples_site/docs/RSCG-Examples/index.md index 126889b99..7ff965605 100644 --- a/v2/rscg_examples_site/docs/RSCG-Examples/index.md +++ b/v2/rscg_examples_site/docs/RSCG-Examples/index.md @@ -133,17 +133,12 @@ import DocCardList from '@theme/DocCardList'; ## Audit
- Expand Audit =>examples:2 + Expand Audit =>examples:1 [Najlot.Audit.SourceGenerator](/docs/Najlot.Audit.SourceGenerator) - - - -[MapItEasy](/docs/MapItEasy) -
@@ -1335,7 +1330,7 @@ import DocCardList from '@theme/DocCardList'; ## Mapper
- Expand Mapper =>examples:11 + Expand Mapper =>examples:12 @@ -1391,6 +1386,11 @@ import DocCardList from '@theme/DocCardList'; [Najlot.Map.SourceGenerator](/docs/Najlot.Map.SourceGenerator) + + + +[MapItEasy](/docs/MapItEasy) +
@@ -1852,8 +1852,6 @@ flowchart LR; Audit--> Najlot.Audit.SourceGenerator((Najlot.Audit.SourceGenerator)) - Audit--> MapItEasy((MapItEasy)) - Bitwise--> BitsKit((BitsKit)) Bitwise--> Darp.BinaryObjects((Darp.BinaryObjects)) @@ -2280,6 +2278,8 @@ flowchart LR; Mapper--> Najlot.Map.SourceGenerator((Najlot.Map.SourceGenerator)) + Mapper--> MapItEasy((MapItEasy)) + MCP--> RSCG_MCP2OpenAPI((RSCG_MCP2OpenAPI)) MCP--> RSCG_MCP2File((RSCG_MCP2File)) diff --git a/v2/rscg_examples_site/docs/indexRSCG.md b/v2/rscg_examples_site/docs/indexRSCG.md index 915d608a7..c9210937c 100644 --- a/v2/rscg_examples_site/docs/indexRSCG.md +++ b/v2/rscg_examples_site/docs/indexRSCG.md @@ -20,7 +20,7 @@ This is the list of 293 ( 16 from Microsoft) RSCG with examples | No | Name | Date | Category | | --------- | ----- | ---- | -------- | -|293| [MapItEasy by Phong Nguyen ](/docs/MapItEasy)|2026-09-10 => 10 September 2026 | [Audit](/docs/Categories/Audit) | +|293| [MapItEasy by Phong Nguyen ](/docs/MapItEasy)|2026-09-10 => 10 September 2026 | [Mapper](/docs/Categories/Mapper) | |292| [LayeredCraft.OptimizedEnums by LayeredCraft ](/docs/LayeredCraft.OptimizedEnums)|2026-09-06 => 06 September 2026 | [Enum](/docs/Categories/Enum) | |291| [Tenekon.MethodOverloads.SourceGenerator by Tenekon ](/docs/Tenekon.MethodOverloads.SourceGenerator)|2026-09-05 => 05 September 2026 | [EnhancementClass](/docs/Categories/EnhancementClass) | |290| [MagicConstants by Liesel Thuriot ](/docs/MagicConstants)|2026-09-04 => 04 September 2026 | [FilesToCode](/docs/Categories/FilesToCode) | diff --git a/v2/rscg_examples_site/static/exports/RSCG.json b/v2/rscg_examples_site/static/exports/RSCG.json index eb0e4b735..41db447f8 100644 --- a/v2/rscg_examples_site/static/exports/RSCG.json +++ b/v2/rscg_examples_site/static/exports/RSCG.json @@ -2343,7 +2343,7 @@ "Link": "https://ignatandrei.github.io/RSCG_Examples/v2/docs/MapItEasy", "NuGet": "https://www.nuget.org/packages/MapItEasy/", "Source": "https://github.com/phongnguyend/MapItEasy/", - "Category": "Audit", + "Category": "Mapper", "AddedOn": "2026-09-10T00:00:00" } ]