58 lines
2.0 KiB
C#
58 lines
2.0 KiB
C#
namespace QWERTYkez.Mensura.Units;
|
|
|
|
/// <summary>
|
|
/// Base value is Grams
|
|
/// </summary>
|
|
[UnitGenerator, DebuggerDisplay("gr = {_Grams.ToString(\"0.###\")}, kg = {KiloGrams.ToString(\"0.###\")}")]
|
|
public readonly partial record struct Mass
|
|
{
|
|
public static Mass Gram { get; } = new() { _Grams = 1 };
|
|
[NotMapped, JsonIgnore] public double _Grams { get => _Value; init => _Value = value; }
|
|
|
|
|
|
public static Mass KiloGram { get; } = new() { KiloGrams = 1 };
|
|
[NotMapped, JsonIgnore] public double KiloGrams
|
|
{
|
|
get => MassConv.KiloGrams.From(_Value);
|
|
init
|
|
{
|
|
_Value = MassConv.KiloGrams.To(value);
|
|
}
|
|
}
|
|
public static Mass Centner { get; } = new() { Centners = 1 };
|
|
[NotMapped, JsonIgnore] public double Centners
|
|
{
|
|
get => MassConv.Centners.From(_Value);
|
|
init
|
|
{
|
|
_Value = MassConv.Centners.To(value);
|
|
}
|
|
}
|
|
|
|
public static Mass Ton { get; } = new() { Tons = 1 };
|
|
[NotMapped, JsonIgnore] public double Tons
|
|
{
|
|
get => MassConv.Tons.From(_Value);
|
|
init
|
|
{
|
|
_Value = MassConv.Tons.To(value);
|
|
}
|
|
}
|
|
|
|
public Mass AddGrams(double value) => new(_Value + value);
|
|
public Mass AddKiloGrams(double value) => new(_Value + MassConv.KiloGrams.To(value));
|
|
public Mass AddCentners(double value) => new(_Value + MassConv.Centners.To(value));
|
|
public Mass AddTons(double value) => new(_Value + MassConv.Tons.To(value));
|
|
}
|
|
|
|
internal readonly struct MassConv
|
|
{
|
|
private MassConv(double multiplicator) => this.Multiplicator = multiplicator;
|
|
public double To(double value) => value * Multiplicator;
|
|
public double From(double value) => value / Multiplicator;
|
|
public double Multiplicator { get; init; }
|
|
public static MassConv Grams { get; } = new(1);
|
|
public static MassConv KiloGrams { get; } = new(1000);
|
|
public static MassConv Centners { get; } = new(100000);
|
|
public static MassConv Tons { get; } = new(1000000);
|
|
} |