- Most of shared code base moved to MicroElements.Shared projects: MicroElements.CodeContracts.Sources, MicroElements.Collections.Sources, MicroElements.Formatting.Sources, MicroElements.Reflection.Sources
- Fixed MessageTemplate bug with null property value
- StringFormatter.DefaultFormatValue supports collections, and some tuple types
- Lazy TypeCache
- Fixed NodaTime TypeCache creation error
- Added GetValueOrDefault for Result<A,Error> with default value
- TypeCache AliasForType index
- Added NodaTime TypeCache without direct reference
- GetValueOrThrow for Result accepts allowNullResult that allows Result to have hull value as Success
- Added extension IsNumericType and IsNullableNumericType
- Added ErrorExtensions.ToException and ErrorExtensions.Throw
- Added ReflectionExtensions and TypeCache
- FormatAsTuple can limit render be items count and text length, allows to render name value tuples and collections
- TypeCheck became public
- Added methods to TypeExtensions: CanAcceptNull, CanNotAcceptNull, IsAssignableTo
- Added Combine extension for actions and functions.
- Added Materialize and Iterate extensions
- Added Error struct
- Added CanBeNull and CanNotBeNull
- Added Flatten extension
- Added JetBrains.Annotations (slim version)
- AssertArgumentNotNull marked with NoEnumeration and InvokerParameterName
- More nullability and API markup with annotations
- Fixed TypeExtensions.GetDefaultValue
- Added TypeExtensions.IsAssignableTo and TypeExtensions.IsConcreteType
- More generic FormatAsTuple extension
- Breaking: netstandard2.1
- Breaking: Nullable flag enabled for project
- Some extensions methods annotated with nullable notation
- Added TypeExtensions.GetDefaultValue
- Added minimal optimization for structs (readonly, in modifiers)
- Message.WithProperty fixed. Now replaces only property, not deleting existing properties
- Message marked as serializable
- Message: all temporary context and caches moved to MessageContext that marked as NonSerialized
- Message: Fixed With methods (default property add mode is merge now)
- Message: some optimizations
- Removed memoize in ValueObject
- Memoize extensions fixed (recursion)
- FirstOrNone fix for value types.
- MessageTemplate
- Many extensions
- Added MatchUnsafe for Result types that can return null result.
- Changes: GetValueOrDefault now can return null result.
- Memoize with TwoLayerCache
- ValueObject Equals doesnot throw Exception
- Fixed BaseError formatted message
- Added TryAsync methods
- Added PropertyListAddMode for easy message compose
- Added Option MatchUnsafe
- Change: GetOrElse remaned to GetOrDefault and can return null value
- Initial Memoize implementation
- Message now is IReadonlyList<KeyValuePair<string,object>> and IReadOnlyDictionary<string,object>
- ValueObject.ToString and IFormattableObject
- FormatAsJson and FormatAsTuple for formattable objects
- IMessageList now is IReadOnlyCollection
- Message default values
- Message GetProperty method
- Message ToString
- Result conversion from ValueTuple
- MutableMessageList
- Improvements for ValueWithMessages
- Message for logging and validation
- Validation implementation
- TryBind and TryBindAsync for Result
- Try monad
- Result Map and async operations
- First version of validation and try
- Result async support
- Result types
- Many improvements
- ParseResult
- Initial implementation of Either and Result
- More functional Option
- Linq for Option
- Initial version
Full release notes can be found at: https://github.com/micro-elements/MicroElements.Functional/blob/master/CHANGELOG.md