Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
chaowlert committed Aug 1, 2020
2 parents 61dee42 + 6aa2bb9 commit e2ea78a
Show file tree
Hide file tree
Showing 20 changed files with 684 additions and 108 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ using (MyDbContext context = new MyDbContext())
```

### What's new
- [Automatically generate mapping code on build](https://github.com/MapsterMapper/Mapster/wiki/Mapster.Tool)
- [Define setting to nested mapping](https://github.com/MapsterMapper/Mapster/wiki/Config-for-nested-mapping)
- [`ISet`, `IDictionary`, `IReadOnlyDictionary` support](https://github.com/MapsterMapper/Mapster/wiki/Data-types#collections)
- [`EmptyCollectionIfNull`, `CreateNewIfNull` DestinationTransform](https://github.com/MapsterMapper/Mapster/wiki/Setting-values#transform-value)
Expand Down Expand Up @@ -78,12 +79,16 @@ And you could gain to 12x faster with
![image](https://cloud.githubusercontent.com/assets/5763993/26521773/180427b6-431b-11e7-9188-10c01fa5ba5c.png)

#### Code Generation
[Mapster CodeGen](https://github.com/MapsterMapper/Mapster/wiki/CodeGen) lets you do mapping with
Code generation lets you do mapping with
- Validate mapping at compile time
- Getting raw performance
- Seeing your mapping code & debugging
- Finding usage of your models' properties

There are 2 tools, you can choose based on your preference.
* [Mapster.Tool](https://github.com/MapsterMapper/Mapster/wiki/Mapster.Tool)
* [TextTemplate](https://github.com/MapsterMapper/Mapster/wiki/TextTemplate)

### Change logs
https://github.com/MapsterMapper/Mapster/releases

Expand Down
12 changes: 12 additions & 0 deletions src/Benchmark/.config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"mapster.tool": {
"version": "1.0.4",
"commands": [
"dotnet-mapster"
]
}
}
}
3 changes: 3 additions & 0 deletions src/Benchmark/Benchmark.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
<PackageReference Include="Expressmapper" Version="1.9.1" />
<PackageReference Include="FastExpressionCompiler" Version="2.0.0" />
</ItemGroup>
<Target Name="mapster" AfterTargets="AfterBuild">
<Exec WorkingDirectory="$(ProjectDir)" Command="dotnet mapster -a $(TargetDir)$(ProjectName).dll" />
</Target>
<ItemGroup>
<ProjectReference Include="..\Mapster\Mapster.csproj" />
</ItemGroup>
Expand Down
17 changes: 17 additions & 0 deletions src/Benchmark/ICustomerAdapter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System;
using System.Linq.Expressions;
using Benchmark.Classes;
using Mapster;

namespace Benchmark
{
[Mapper]
public interface ICustomerAdapter
{
Expression<Func<Customer, CustomerDTO>> Project { get; }

CustomerDTO Adapt(Customer customer);
Customer Adapt(CustomerDTO dto);
Customer Adapt(CustomerDTO dto, Customer customer);
}
}
11 changes: 11 additions & 0 deletions src/Benchmark/IFooAdapter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using Benchmark.Classes;
using Mapster;

namespace Benchmark
{
[Mapper]
public interface IFooAdapter
{
Foo Adapt(Foo foo);
}
}
295 changes: 295 additions & 0 deletions src/Benchmark/Mappers/CustomerAdapter.g.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using Benchmark;
using Benchmark.Classes;


namespace Benchmark
{
public partial class CustomerAdapter : ICustomerAdapter
{
public Expression<Func<Customer, CustomerDTO>> Project => p1 => new CustomerDTO()
{
Id = p1.Id,
Name = p1.Name,
Address = p1.Address,
HomeAddress = p1.HomeAddress == null ? null : new AddressDTO()
{
Id = p1.HomeAddress.Id,
City = p1.HomeAddress.City,
Country = p1.HomeAddress.Country
},
Addresses = p1.Addresses.Select<Address, AddressDTO>(p2 => new AddressDTO()
{
Id = p2.Id,
City = p2.City,
Country = p2.Country
}).ToArray<AddressDTO>(),
WorkAddresses = p1.WorkAddresses.Select<Address, AddressDTO>(p3 => new AddressDTO()
{
Id = p3.Id,
City = p3.City,
Country = p3.Country
}).ToList<AddressDTO>(),
AddressCity = p1.Address.City
};
public CustomerDTO Adapt(Customer p4)
{
return p4 == null ? null : new CustomerDTO()
{
Id = p4.Id,
Name = p4.Name,
Address = p4.Address == null ? null : new Address()
{
Id = p4.Address.Id,
Street = p4.Address.Street,
City = p4.Address.City,
Country = p4.Address.Country
},
HomeAddress = p4.HomeAddress == null ? null : new AddressDTO()
{
Id = p4.HomeAddress.Id,
City = p4.HomeAddress.City,
Country = p4.HomeAddress.Country
},
Addresses = funcMain1(p4.Addresses),
WorkAddresses = funcMain2(p4.WorkAddresses),
AddressCity = p4.Address == null ? null : p4.Address.City
};
}
public Customer Adapt(CustomerDTO p7)
{
return p7 == null ? null : new Customer()
{
Id = p7.Id,
Name = p7.Name,
Address = p7.Address == null ? null : new Address()
{
Id = p7.Address.Id,
Street = p7.Address.Street,
City = p7.Address.City,
Country = p7.Address.Country
},
HomeAddress = p7.HomeAddress == null ? null : new Address()
{
Id = p7.HomeAddress.Id,
City = p7.HomeAddress.City,
Country = p7.HomeAddress.Country
},
Addresses = funcMain3(p7.Addresses),
WorkAddresses = funcMain4(p7.WorkAddresses)
};
}
public Customer Adapt(CustomerDTO p10, Customer p11)
{
if (p10 == null)
{
return null;
}
Customer result = p11 ?? new Customer();

result.Id = p10.Id;
result.Name = p10.Name;
result.Address = funcMain5(p10.Address, result.Address);
result.HomeAddress = funcMain6(p10.HomeAddress, result.HomeAddress);
result.Addresses = funcMain7(p10.Addresses, result.Addresses);
result.WorkAddresses = funcMain8(p10.WorkAddresses, result.WorkAddresses);
return result;

}

private AddressDTO[] funcMain1(Address[] p5)
{
if (p5 == null)
{
return null;
}
AddressDTO[] result = new AddressDTO[p5.Length];

int v = 0;

int i = 0;
int len = p5.Length;

while (i < len)
{
Address item = p5[i];
result[v++] = item == null ? null : new AddressDTO()
{
Id = item.Id,
City = item.City,
Country = item.Country
};
i++;
}
return result;

}

private List<AddressDTO> funcMain2(ICollection<Address> p6)
{
if (p6 == null)
{
return null;
}
List<AddressDTO> result = new List<AddressDTO>(p6.Count);

IEnumerator<Address> enumerator = p6.GetEnumerator();

while (enumerator.MoveNext())
{
Address item = enumerator.Current;
result.Add(item == null ? null : new AddressDTO()
{
Id = item.Id,
City = item.City,
Country = item.Country
});
}
return result;

}

private Address[] funcMain3(AddressDTO[] p8)
{
if (p8 == null)
{
return null;
}
Address[] result = new Address[p8.Length];

int v = 0;

int i = 0;
int len = p8.Length;

while (i < len)
{
AddressDTO item = p8[i];
result[v++] = item == null ? null : new Address()
{
Id = item.Id,
City = item.City,
Country = item.Country
};
i++;
}
return result;

}

private ICollection<Address> funcMain4(List<AddressDTO> p9)
{
if (p9 == null)
{
return null;
}
ICollection<Address> result = new List<Address>(p9.Count);

int i = 0;
int len = p9.Count;

while (i < len)
{
AddressDTO item = p9[i];
result.Add(item == null ? null : new Address()
{
Id = item.Id,
City = item.City,
Country = item.Country
});
i++;
}
return result;

}

private Address funcMain5(Address p12, Address p13)
{
if (p12 == null)
{
return null;
}
Address result = p13 ?? new Address();

result.Id = p12.Id;
result.Street = p12.Street;
result.City = p12.City;
result.Country = p12.Country;
return result;

}

private Address funcMain6(AddressDTO p14, Address p15)
{
if (p14 == null)
{
return null;
}
Address result = p15 ?? new Address();

result.Id = p14.Id;
result.City = p14.City;
result.Country = p14.Country;
return result;

}

private Address[] funcMain7(AddressDTO[] p16, Address[] p17)
{
if (p16 == null)
{
return null;
}
Address[] result = new Address[p16.Length];

int v = 0;

int i = 0;
int len = p16.Length;

while (i < len)
{
AddressDTO item = p16[i];
result[v++] = item == null ? null : new Address()
{
Id = item.Id,
City = item.City,
Country = item.Country
};
i++;
}
return result;

}

private ICollection<Address> funcMain8(List<AddressDTO> p18, ICollection<Address> p19)
{
if (p18 == null)
{
return null;
}
ICollection<Address> result = new List<Address>(p18.Count);

int i = 0;
int len = p18.Count;

while (i < len)
{
AddressDTO item = p18[i];
result.Add(item == null ? null : new Address()
{
Id = item.Id,
City = item.City,
Country = item.Country
});
i++;
}
return result;

}
}
}
Loading

0 comments on commit e2ea78a

Please sign in to comment.