HVO.Core
1.1.2
dotnet add package HVO.Core --version 1.1.2
NuGet\Install-Package HVO.Core -Version 1.1.2
<PackageReference Include="HVO.Core" Version="1.1.2" />
<PackageVersion Include="HVO.Core" Version="1.1.2" />
<PackageReference Include="HVO.Core" />
paket add HVO.Core --version 1.1.2
#r "nuget: HVO.Core, 1.1.2"
#:package HVO.Core@1.1.2
#addin nuget:?package=HVO.Core&version=1.1.2
#tool nuget:?package=HVO.Core&version=1.1.2
HVO.SDK
Shared .NET libraries for observatory software, astronomy, weather, power, imaging, and hardware integration.
Packages
| Package | Target | Description |
|---|---|---|
| HVO.Core | netstandard2.0 |
Result<T>, Option<T>, OneOf<T1..T4>, discriminated unions, guard clauses, extensions |
| HVO.Core.SourceGenerators | netstandard2.0 |
Roslyn source generators (e.g., [NamedOneOf] attribute) |
| HVO.Astronomy | netstandard2.0 |
Solar, lunar, planetary, twilight, and coordinate calculations |
| HVO.Astronomy.TheSkyX | netstandard2.0 |
Software Bisque TheSkyX equipment integration |
| HVO.Astronomy.CFITSIO | net10.0 |
Managed FITS image and header APIs with SkiaSharp integration |
| HVO.Astronomy.CFITSIO.NativeAssets | net10.0 |
CFITSIO native assets for Linux ARM64 and macOS ARM64 |
| HVO.Iot.Devices | net8.0 |
GPIO, I2C, HAT, RTC, and environmental sensor drivers |
| HVO.NinaClient | net8.0 |
N.I.N.A. REST and WebSocket client |
| HVO.Power.OutbackMate | netstandard2.0 |
Outback MATE serial protocol parser and monitor |
| HVO.Weather | netstandard2.0 |
Weather models and CWOP/Weather Underground formatting |
| HVO.Weather.DavisVantagePro | netstandard2.0 |
Davis Vantage Pro console protocol integration |
| HVO.ZWOOptical.ASISDK | netstandard2.0 |
ZWO ASI camera SDK interop |
Installation
dotnet add package HVO.Core
Replace HVO.Core with the package needed by your application. Package-specific platform notes are included in each NuGet package readme.
Quick Start
Result<T> — Railway-oriented error handling
using HVO.Core.Results;
public Result<Customer> GetCustomer(int id)
{
try
{
var customer = _repository.Find(id);
return customer != null
? Result<Customer>.Success(customer)
: Result<Customer>.Failure(new NotFoundException($"Customer {id} not found"));
}
catch (Exception ex)
{
return ex; // Implicit conversion to failure
}
}
// Usage
var result = GetCustomer(42);
var output = result.Match(
success: c => $"Found: {c.Name}",
failure: ex => $"Error: {ex.Message}");
Result<T, TEnum> — Typed error codes
using HVO.Core.Results;
public enum OrderError { NotFound, InvalidAmount, Unauthorized }
public Result<Order, OrderError> ValidateOrder(OrderRequest request)
{
if (request.Amount <= 0)
return OrderError.InvalidAmount; // Implicit conversion
return Result<Order, OrderError>.Success(new Order(request));
}
Option<T> — Safe optional values
using HVO.Core.Options;
public Option<string> GetSetting(string key)
{
return _config.TryGetValue(key, out var value)
? new Option<string>(value)
: Option<string>.None();
}
// Usage
var setting = GetSetting("timeout");
var value = setting.GetValueOrDefault("30"); // Returns "30" if None
OneOf<T1, T2> — Discriminated unions
using HVO.Core.OneOf;
OneOf<int, string> result = 42;
var output = result.Match(
i => $"Got integer: {i}",
s => $"Got string: {s}");
// output: "Got integer: 42"
Guard & Ensure — Input validation and state assertions
using HVO.Core.Utilities;
// Guard: validates input parameters (throws ArgumentException)
public void Process(string name, int count)
{
Guard.AgainstNullOrWhiteSpace(name);
Guard.AgainstNegativeOrZero(count, 0);
}
// Ensure: asserts internal state (throws InvalidOperationException)
public void Execute()
{
Ensure.That(_isInitialized, "Service must be initialized");
Ensure.NotNull(_connection, "Connection not established");
}
Extensions
using HVO.Core.Extensions;
// String extensions
"hello world".ToTitleCase(); // "Hello World"
"Hello World Test".RemoveWhitespace(); // "HelloWorldTest"
"Second".ToEnum<MyEnum>(); // MyEnum.Second
// Collection extensions
new[] { 1, 2, 3 }.ForEach(x => Console.Write(x));
items.DistinctBy(x => x.Id);
items.Shuffle();
// Enum extensions
MyEnum.Value.GetDescription(); // Returns [Description] attribute value
Compatibility
HVO.Core targets .NET Standard 2.0 for maximum compatibility:
- .NET Framework 4.8.1+
- .NET 8+
- .NET 10+
- Mono, Xamarin, Unity
Building
dotnet build
dotnet test
Documentation
| Document | Description |
|---|---|
| CONTRIBUTING.md | PR workflow, coding standards, branch naming |
| CHANGELOG.md | Release history and notable changes |
| Testing | Test projects, coverage settings, local commands |
| Pipeline Integration | CI workflow, tag-based publishing, coordination with telemetry |
Contributing
See CONTRIBUTING.md for PR workflow, coding standards, and how to run tests locally.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Text.Json (>= 10.0.11)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on HVO.Core:
| Package | Downloads |
|---|---|
|
HVO.Iot.Devices
IoT device abstractions and implementations for GPIO, I2C, Sequent Microsystems HATs, and environmental sensors (MLX90614, SI1145, TSL2591). |
|
|
HVO.Astronomy.CFITSIO
Managed CFITSIO wrapper with bundled native binaries for Linux ARM64 and macOS ARM64. |
|
|
HVO.NinaClient
NINA (Nighttime Imaging 'N' Astronomy) API client — REST and WebSocket integration for camera, mount, dome, focuser, filter wheel, guider, rotator, safety monitor, flat device, sequencer, and imaging control. |
|
|
HVO.Weather.DavisVantagePro
Davis Vantage Pro weather station integration — LOOP packet parser, TCP client, and hardware-specific enumerations. |
GitHub repositories
This package is not used by any popular GitHub repositories.