diff --git a/Directory.Build.props b/Directory.Build.props index c85c822..48f0de1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -16,7 +16,7 @@ snupkg - + true diff --git a/Funcky.Money.SourceGenerator/XmlNodeExtensions.cs b/Funcky.Money.SourceGenerator/XmlNodeExtensions.cs index 142b977..abb2a8b 100644 --- a/Funcky.Money.SourceGenerator/XmlNodeExtensions.cs +++ b/Funcky.Money.SourceGenerator/XmlNodeExtensions.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; using System.Collections.Immutable; -using System.Linq; using System.Xml; namespace Funcky.Money.SourceGenerator; diff --git a/Funcky.Money.Test/MoneyTest.cs b/Funcky.Money.Test/MoneyTest.cs index cfb5436..762bf95 100644 --- a/Funcky.Money.Test/MoneyTest.cs +++ b/Funcky.Money.Test/MoneyTest.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Globalization; using FsCheck; using FsCheck.Xunit; using Xunit; @@ -8,9 +7,8 @@ namespace Funcky.Test; public sealed class MoneyTest { - public MoneyTest() => - Arb - .Register(); + public MoneyTest() + => Arb.Register(); private static MoneyEvaluationContext SwissRounding => MoneyEvaluationContext diff --git a/Funcky.Money/Money.cs b/Funcky.Money/Money.cs index a3749f4..4bcdef9 100644 --- a/Funcky.Money/Money.cs +++ b/Funcky.Money/Money.cs @@ -36,7 +36,7 @@ public Money(int amount, Option currency = default) public bool IsZero => Amount == 0m; - // These operators supports the operators on IMoneyExpression, because Money + Money or Money * factor does not work otherwise without a cast. + // These operators support the operators on IMoneyExpression, because Money + Money or Money * factor does not work otherwise without a cast. public static IMoneyExpression operator +(Money augend, IMoneyExpression addend) => augend.Add(addend); @@ -61,8 +61,8 @@ public bool IsZero public static decimal operator /(Money dividend, IMoneyExpression divisor) => dividend.Divide(divisor); - private static Currency SelectCurrency(Option currency) - => currency.GetOrElse(CurrencyCulture.CurrentCurrency); + TState IMoneyExpression.Accept(IMoneyExpressionVisitor visitor) + => visitor.Visit(this); public static Option ParseOrNone(string money, Option currency = default) => CurrencyCulture @@ -72,6 +72,14 @@ public static Option ParseOrNone(string money, Option currency some: ParseWithFormatProvider(money)) .AndThen(amount => new Money(amount, SelectCurrency(currency))); + public override string ToString() + => CurrencyCulture.FormatProviderFromCurrency(Currency).Match( + none: () => string.Format($"{{0:N{Currency.MinorUnitDigits}}} {{1}}", Amount, Currency.AlphabeticCurrencyCode), + some: formatProvider => string.Format(formatProvider, $"{{0:C{Currency.MinorUnitDigits}}}", Amount)); + + private static Currency SelectCurrency(Option currency) + => currency.GetOrElse(CurrencyCulture.CurrentCurrency); + private static Func> ParseManually(string money) => () => RemoveIsoCurrency(money).ParseDecimalOrNone(); @@ -87,12 +95,4 @@ private static string RemoveIsoCurrency(string money) private static Func> ParseWithFormatProvider(string money) => formatProvider => money.ParseDecimalOrNone(NumberStyles.Currency, formatProvider); - - public override string ToString() - => CurrencyCulture.FormatProviderFromCurrency(Currency).Match( - none: () => string.Format($"{{0:N{Currency.MinorUnitDigits}}} {{1}}", Amount, Currency.AlphabeticCurrencyCode), - some: formatProvider => string.Format(formatProvider, $"{{0:C{Currency.MinorUnitDigits}}}", Amount)); - - TState IMoneyExpression.Accept(IMoneyExpressionVisitor visitor) - => visitor.Visit(this); } diff --git a/Packages.props b/Packages.props index 37a7e3a..81ac837 100644 --- a/Packages.props +++ b/Packages.props @@ -5,7 +5,7 @@ - +