dotnet-geo-management/Svrnty.GeoManagement.Abstractions/ServiceCollectionExtensions.cs

68 lines
2.3 KiB
C#

using Svrnty.GeoManagement.Abstractions.Abstractions;
using Svrnty.GeoManagement.Abstractions.Models;
namespace Svrnty.GeoManagement.Abstractions;
public static class ServiceCollectionExtensions
{
public static void To(this IAddress address, IAddress toAddress)
{
toAddress.Line1 = address.Line1;
toAddress.Line2 = address.Line2;
toAddress.City = address.City;
toAddress.PostalCode = address.PostalCode;
toAddress.Country = address.Country;
toAddress.Subdivision = address.Subdivision;
}
public static void From(this IAddress address, IAddress fromAddress)
{
address.Line1 = fromAddress.Line1;
address.Line2 = fromAddress.Line2;
address.City = fromAddress.City;
address.PostalCode = fromAddress.PostalCode;
address.Country = fromAddress.Country;
address.Subdivision = fromAddress.Subdivision;
}
public static string GetFormattedAddress(this IAddress address, FormattedAddressType formatType = FormattedAddressType.Full)
{
return formatType switch
{
FormattedAddressType.Full => FormatFullOneLine(address),
FormattedAddressType.Compact => FormatCompactOneLine(address),
FormattedAddressType.MultiLine => FormatMultiLine(address),
_ => FormatFullOneLine(address)
};
}
private static string FormatFullOneLine(IAddress address)
{
if (string.IsNullOrWhiteSpace(address.Line2))
{
return $"{address.Line1}, {address.City}, {address.Subdivision} {address.PostalCode}, {address.Country}";
}
return $"{address.Line2}, {address.Line1}, {address.City}, {address.Subdivision} {address.PostalCode}, {address.Country}";
}
private static string FormatCompactOneLine(IAddress address)
{
if (string.IsNullOrWhiteSpace(address.Line2))
{
return $"{address.Line1}, {address.City}, {address.Subdivision}";
}
return $"{address.Line2}, {address.Line1}, {address.City}, {address.Subdivision}";
}
private static string FormatMultiLine(IAddress address)
{
if (string.IsNullOrWhiteSpace(address.Line2))
{
return $"{address.Line1}\n{address.City}, {address.Subdivision} {address.PostalCode}\n{address.Country}";
}
return $"{address.Line2}, {address.Line1}\n{address.City}, {address.Subdivision} {address.PostalCode}\n{address.Country}";
}
}