Skip to content

Commit 30db02b

Browse files
committed
OrderedBuildersGenerator
1 parent 04086bc commit 30db02b

6 files changed

Lines changed: 89 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"generator":{
3+
"name":"OrderedBuildersGenerator",
4+
"nuget":[
5+
"https://www.nuget.org/packages/OrderedBuildersGenerator/"
6+
],
7+
"link":"https://github.com/Georgiy-Petrov/OrderedBuildersGenerator",
8+
"author":"Georgiy Petrov",
9+
"source":"https://github.com/Georgiy-Petrov/OrderedBuildersGenerator"
10+
},
11+
"data":{
12+
"goodFor":["Generating builder classes with enforced property setting order"],
13+
"csprojDemo":"Builder.csproj",
14+
"csFiles":["Program.cs","Person.cs"],
15+
"excludeDirectoryGenerated":[""],
16+
"includeAdditionalFiles":[""]
17+
},
18+
"links":{
19+
"blog":"",
20+
"video":""
21+
}
22+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<Solution>
2+
<Project Path="Builder/Builder.csproj" />
3+
</Solution>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net10.0</TargetFramework>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
<PropertyGroup>
10+
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
11+
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
12+
</PropertyGroup>
13+
14+
<ItemGroup>
15+
<PackageReference Include="OrderedBuildersGenerator" Version="1.0.0" PrivateAssets="all" OutputItemType="Analyzer" />
16+
</ItemGroup>
17+
18+
19+
20+
21+
</Project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using OrderedBuildersGenerator;
2+
using System;
3+
using System.Xml.Linq;
4+
5+
namespace Builder;
6+
7+
[StepBuilder("PersonBuilder")]
8+
public partial class PersonConfig
9+
{
10+
private string? firstName;
11+
12+
private string lastName = string.Empty;
13+
14+
[OrderedStep(StepOrder.One)]
15+
public void WithLastName(string name)
16+
{
17+
this.lastName = name;
18+
19+
}
20+
[OrderedStep(StepOrder.Two)]
21+
public void WithFirstName(string name)
22+
{
23+
this.firstName = name;
24+
}
25+
[BuildStep]
26+
public Person Build() => new(firstName??"",lastName);
27+
28+
}
29+
30+
public record Person(string firstName, string lastName)
31+
{
32+
public string FullName() => $"{firstName} {lastName}";
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using Builder;
2+
3+
var p = new PersonBuilder()
4+
.WithLastName("Ignat")
5+
.WithFirstName("Andrei")
6+
.Build();
7+
;
8+
9+
Console.WriteLine(p.FullName());
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
global using System;

0 commit comments

Comments
 (0)