Skip to content

Mapperly

Using Mapperly For Generating Mappings

Some sample Mapperly code:

using Riok.Mapperly.Abstractions;
using Shouldly;
namespace IssueTrackerApi.ContractTests;
public class MappingTests
{
[Fact]
public void DoIt()
{
var source = new RequestModel("Jeff", "jeff@hypertheory.com");
var mapped = source.MapFromRequestModel();
mapped.Name.ShouldBe("Jeff");
mapped.SubscriberEmail.ShouldBe("jeff@hypertheory.com");
Assert.Equal("jeff@hypertheory.com", mapped.SubscriberEmail);
mapped.CreatedAt.ShouldBe(DateTimeOffset.Now, TimeSpan.FromMilliseconds(100));
mapped.Id.ShouldNotBe(Guid.Empty);
}
}
public record RequestModel(string Name, string Email);
public record NewsletterSubscription
{
public Guid Id { get; set; }
public string Name { get; set; } = string.Empty;
public string SubscriberEmail { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; }
}
[Mapper]
public static partial class NewsletterSubscriptionMapper
{
[MapProperty(nameof(RequestModel.Email), nameof(NewsletterSubscription.SubscriberEmail))]
private static partial NewsletterSubscription MapFromModel(RequestModel model);
public static NewsletterSubscription MapFromRequestModel(this RequestModel model)
{
var m = MapFromModel(model);
m.CreatedAt = DateTimeOffset.Now;
m.Id = Guid.NewGuid();
return m;
}
}