Skip to content

Commit e565b83

Browse files
committed
feat(builder): 2-step building a facet
1 parent c299d0f commit e565b83

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/Facet.Extensions/FacetExtensions.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@ public static TTarget ToFacet<TSource, TTarget>(this TSource source)
2727
return FacetCache<TSource, TTarget>.Mapper(source);
2828
}
2929

30+
public class Builder<TSource>(TSource source)
31+
{
32+
public TTarget To<TTarget>() where TTarget : class => source.ToFacet<TSource, TTarget>();
33+
}
34+
35+
public static Builder<TSource> Facet<TSource>(this TSource source)
36+
{
37+
if (source is null) throw new ArgumentNullException(nameof(source));
38+
return new Builder<TSource>(source);
39+
}
40+
3041
/// <summary>
3142
/// Maps an <see cref="IEnumerable{TSource}"/> to an <see cref="IEnumerable{TTarget}"/>
3243
/// via the generated constructor of the facet type.

test/Facet.TestConsole/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ static void TestBasicDtoMapping(List<User> users)
409409

410410
foreach (var user in users)
411411
{
412-
var userDto = user.ToFacet<User, UserDto>();
412+
var userDto = user.Facet().To<UserDto>();
413413
Console.WriteLine($"User: {userDto.FirstName} {userDto.LastName} ({userDto.Email})");
414414
Console.WriteLine($" Active: {userDto.IsActive}, DOB: {userDto.DateOfBirth:yyyy-MM-dd}");
415415
Console.WriteLine($" Last Login: {userDto.LastLoginAt?.ToString("yyyy-MM-dd HH:mm") ?? "Never"}");

0 commit comments

Comments
 (0)