Releases: onix-labs/onixlabs-dotnet
Version 11.3.0
ONIXLabs DotNET Library 11.3.0
We are excited to announce the release of ONIXLabs .NET Library version 11.3.0, now available on NuGet.
Core Updates
The core package now includes an implementation of the Specification pattern:
Specification<T>
represents the base class for implementing specifications.CriteriaSpecification<T>
represents a specification that wrapsExpression<Func<T, bool>>
.
The implementation also includes logical specifications for AND, OR and NOT operations.
Version 11.2.0
ONIXLabs DotNET Library 11.2.0
We are excited to announce the release of ONIXLabs .NET Library version 11.2.0, now available on NuGet.
Core Updates
The following extension methods have been added to System.String
:
NthIndexOf
find the nth index of achar
orstring
within the currentstring
value.SubstringBeforeNth
obtains the sub-string before the nth index of the specifiedchar
orstring
value.SubstringAfterNth
obtains the sub-string after the nth index of the specifiedchar
orstring
value.
Security.Cryptography Updates
Hash
and Salt
structs now include a Length
property that obtains their length in bytes.
Version 11.1.0
ONIXLabs DotNET Library 11.1.0
We are excited to announce the release of ONIXLabs .NET Library version 11.1.0, now available on NuGet.
Core Updates
The entire library now builds against .NET 8.0 and .NET 9.0, therefore supporting the latest LTS and STS releases of the .NET SDK.
The Result<T>
class now includes a GetValue
method with an out
parameter. This can be used to obtain success values inline; for example:
if (call().GetValue(out var value) is Failure<object> failure)
return failure; // Return if call() failed...
// ...or continue with success value in scope
There are also extension methods to allow any type of value to be wrapped as a Result<T>
instance; for example:
return value.ToSuccessResult();
return task.ToSuccessResultAsync(cancellationToken);
Security.Cryptography Updates
NamedHash
now implements ISpanParsable<NamedHash>
.
PublicKey
now implements GetHash
, which returns a Hash
representation of a public key instance.
Version 11.0.0
ONIXLabs DotNET Library 11
We are excited to announce the release of ONIXLabs .NET Library version 11, now available on NuGet.
Core Updates
New extension methods have been added to obtain DateOnly
and TimeOnly
components from DateTime
instances.
Security.Cryptography Updates
The existing public/private key import/export APIs have been overhauled to provide a cleaner, more consistent, and more robust experience for importing and exporting public and private keys. This now includes support for binary, PKCS8 and PEM imports and exports, including support for encrypted imports and exports.
Breaking Changes
- The
IPublicKeyExportable
interface was originally implemented by private keys from which a public key could be derived. Since this interface name needed to be repurposed for public key implementations that can be exported, the interface name has changed toIPrivateKeyDerivable
, indicating that its implementation is intended on private keys, and that something can be derived from the private key. - The
IPrivateKeyImportablePkcs8
andIPrivateKeyExportablePkcs8
interfaces have been renamed toIPrivateKeyImportable
andIPrivateKeyExportable
, since they now support import and export APIs other than PKCS8.
Version 10.0.0
ONIXLabs DotNET Library 10
We are excited to announce the release of ONIXLabs .NET Library version 10, now available on NuGet.
This release updates the library to use .NET 9.0 and utilizes new language features in C# 13.
All of the underlying NuGet dependencies have also been updated to the latest available versions, although this has zero impact on the libraries themselves as they are designed to be as lightweight as possible, and therefore dependency free. Notably, it's the test projects that require NuGet dependencies.
Core Updates
Collection initialiser functions now utilise params collections, so there is no longer a need to convert from an array to the desired type.
Breaking Changes
In a move towards immutable, safe code with fewer memory allocations, this release includes several breaking changes cascading from IBinaryConvertible
. This interface no longer exposes a ToByteArray
method. Instead, a new IMemoryBinaryConvertible
interface exists which exposes an AsReadOnlyMemory
method. Similarly, ISpanBinaryConvertible
has been modified to align, so the method ToReadOnlySpan
has been renamed to AsReadOnlySpan
. IBinaryConvertible
is now a composite of ISpanBinaryConvertible
, and IMemoryBinaryConvertible
.
Since the IBinaryConvertible
and ISpanBinaryConvertible
interfaces have changed, this has cascaded into several types in the OnixLabs.Core.Text
, and OnixLabs.Security.Cryptography
namespaces.
Obsolete APIs have also been removed in this release.
Version 9.5.1
ONIXLabs .NET Library 9.5.1
We are excited to announce the release of ONIXLabs .NET Library version 9.5.1, now available on NuGet.
Cryptography Updates
This version fixes a bug in the SHA 3 implementation, where transforming multiple blocks of data resulted in erroneous hashes. This was due to the sponge state being reset every time HashCore
was called, and has now been fixed and tested.
Version 9.5.0
ONIXLabs .NET Library 9.5.0
We are excited to announce the release of ONIXLabs .NET Library version 9.5.0, now available on NuGet. This version includes new features and associated unit tests.
Core Updates
Deprecates the GetName
method and TypeNameFlags
enumeration in the OnixLabs.Core.Reflection
package, in favour of the new GetCSharpTypeDeclaration
method, and TypeDeclarationFlags
enumeration.
Dependency Injection
This is a new package that introduces several new extension methods for IServiceCollection
. All AddService
methods accept a ServiceLifetime
, which means that services can be configured (as opposed to hard-coded) as singleton, scoped, or transient.
Version 9.4.0
ONIXLabs .NET Library 9.4.0
We are excited to announce the release of ONIXLabs .NET Library version 9.4.0, now available on NuGet. This version includes new features and associated unit tests.
Core Updates
- Adds a comprehensive suite of overloads for
MatchAsync
,SelectAsync
, andSelectManyAsync
onResult
andResult<T>
types. - Adds extension methods to bind
MatchAsync
,SelectAsync
andSelectManyAsync
methods into async workflows. - Adds extension methods for
Random
allowing a random element of aReadOnlyList<T>
to be obtained.
Version 9.3.0
ONIXLabs .NET Library 9.3.0
We are excited to announce the release of ONIXLabs .NET Library version 9.3.0, now available on NuGet. This version includes new features and associated unit tests.
Core Updates
- Updated
Preconditions
to return values from inclusive or exclusive checks if they are valid.
Version 9.2.0
ONIXLabs .NET Library 9.2.0
We are excited to announce the release of ONIXLabs .NET Library version 9.2.0, now available on NuGet. This version includes new features and associated unit tests.
Core Updates
- Introduced new pre-condition checks and requirements to check
Result
,Result<T>
andOptional<T>
types. - Re-added collection generator functions.
Whilst collection expressions are a much welcomed addition to .NET, they have their limitations; i.e. you cannot chain functions to the end of a collection expression; for example;
List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].Where(number => number % 2 is 0);
In contrast, this can be done with collection generators; for example:
List<int> numbers = ListOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).Where(number => number % 2 is 0);