Skip to content

Commit fa983e2

Browse files
authored
Move default unit converter registration to quantity types (#1018)
Ref #1016 Instead of a huge single method in UnitConverter, it is split up into a static method per quanitity type.
1 parent 28f9dc8 commit fa983e2

File tree

119 files changed

+4272
-2702
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+4272
-2702
lines changed

CodeGen/Generators/UnitsNetGen/QuantityGenerator.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,42 @@ private void GenerateStaticMethods()
344344
345345
#region Static Methods
346346
347+
/// <summary>
348+
/// Registers the default conversion functions in the given <see cref=""UnitConverter""/> instance.
349+
/// </summary>
350+
/// <param name=""unitConverter"">The <see cref=""UnitConverter""/> to register the default conversion functions in.</param>
351+
internal static void RegisterDefaultConversions(UnitConverter unitConverter)
352+
{{
353+
// Register in unit converter: BaseUnit -> {_quantity.Name}Unit");
354+
355+
foreach(var unit in _quantity.Units)
356+
{
357+
if(unit.SingularName == _quantity.BaseUnit)
358+
continue;
359+
360+
Writer.WL( $@"
361+
unitConverter.SetConversionFunction<{_quantity.Name}>({_unitEnumName}.{_quantity.BaseUnit}, {_quantity.Name}Unit.{unit.SingularName}, quantity => quantity.ToUnit({_quantity.Name}Unit.{unit.SingularName}));");
362+
}
363+
364+
Writer.WL( $@"
365+
366+
// Register in unit converter: BaseUnit <-> BaseUnit
367+
unitConverter.SetConversionFunction<{_quantity.Name}>({_unitEnumName}.{_quantity.BaseUnit}, {_unitEnumName}.{_quantity.BaseUnit}, quantity => quantity);
368+
369+
// Register in unit converter: {_quantity.Name}Unit -> BaseUnit" );
370+
371+
foreach(var unit in _quantity.Units)
372+
{
373+
if(unit.SingularName == _quantity.BaseUnit)
374+
continue;
375+
376+
Writer.WL($@"
377+
unitConverter.SetConversionFunction<{_quantity.Name}>({_quantity.Name}Unit.{unit.SingularName}, {_unitEnumName}.{_quantity.BaseUnit}, quantity => quantity.ToBaseUnit());" );
378+
}
379+
380+
Writer.WL( $@"
381+
}}
382+
347383
/// <summary>
348384
/// Get unit abbreviation string.
349385
/// </summary>

CodeGen/Generators/UnitsNetGen/UnitConverterGenerator.cs

Lines changed: 0 additions & 56 deletions
This file was deleted.

CodeGen/Generators/UnitsNetGenerator.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public static void Generate(string rootDir, Quantity[] quantities)
6969
GenerateUnitAbbreviationsCache(quantities, $"{outputDir}/UnitAbbreviationsCache.g.cs");
7070
GenerateQuantityType(quantities, $"{outputDir}/QuantityType.g.cs");
7171
GenerateStaticQuantity(quantities, $"{outputDir}/Quantity.g.cs");
72-
GenerateUnitConverter(quantities, $"{outputDir}/UnitConverter.g.cs");
7372

7473
var unitCount = quantities.SelectMany(q => q.Units).Count();
7574
Log.Information("");
@@ -143,12 +142,5 @@ private static void GenerateStaticQuantity(Quantity[] quantities, string filePat
143142
File.WriteAllText(filePath, content);
144143
Log.Information("✅ Quantity.g.cs");
145144
}
146-
147-
private static void GenerateUnitConverter(Quantity[] quantities, string filePath)
148-
{
149-
var content = new UnitConverterGenerator(quantities).Generate();
150-
File.WriteAllText(filePath, content);
151-
Log.Information("✅ UnitConverter.g.cs");
152-
}
153145
}
154146
}

UnitsNet.NanoFramework/GeneratedCode/Quantities/Density.g.cs

Lines changed: 143 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)