feat(providers): NatsConnectionProvider (NATS.Net)
This commit is contained in:
46
src/VolcanicCore.Providers/NatsConnectionProvider.cs
Normal file
46
src/VolcanicCore.Providers/NatsConnectionProvider.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Client.Core;
|
||||
using VolcanicCore.Core;
|
||||
|
||||
namespace VolcanicCore.Providers;
|
||||
|
||||
public sealed class NatsConnectionProvider : IConnectionProvider
|
||||
{
|
||||
public string Id => "nats";
|
||||
public string DisplayName => "NATS";
|
||||
|
||||
public JsonSchema ConfigSchema { get; } = new(JsonDocument.Parse("""
|
||||
{
|
||||
"type": "object",
|
||||
"required": ["url"],
|
||||
"properties": {
|
||||
"url": { "type": "string", "title": "Server URL", "default": "nats://127.0.0.1:4222" },
|
||||
"user": { "type": "string", "title": "User" },
|
||||
"pass": { "type": "string", "title": "Password", "format": "password" }
|
||||
},
|
||||
"secretFields": ["pass"]
|
||||
}
|
||||
""").RootElement);
|
||||
|
||||
public IReadOnlySet<string> SecretFields { get; } =
|
||||
new HashSet<string>(StringComparer.Ordinal) { "pass" };
|
||||
|
||||
public async Task<object> OpenAsync(JsonElement config, CancellationToken ct)
|
||||
{
|
||||
var url = config.GetProperty("url").GetString()!;
|
||||
var opts = new NatsOpts { Url = url };
|
||||
if (config.TryGetProperty("user", out var u) && u.ValueKind == JsonValueKind.String
|
||||
&& config.TryGetProperty("pass", out var p) && p.ValueKind == JsonValueKind.String)
|
||||
{
|
||||
opts = opts with { AuthOpts = new NatsAuthOpts { Username = u.GetString(), Password = p.GetString() } };
|
||||
}
|
||||
var conn = new NatsConnection(opts);
|
||||
await conn.ConnectAsync();
|
||||
return conn;
|
||||
}
|
||||
|
||||
public async Task CloseAsync(object handle)
|
||||
{
|
||||
if (handle is NatsConnection conn) await conn.DisposeAsync();
|
||||
}
|
||||
}
|
||||
13
src/VolcanicCore.Providers/ServiceCollectionExtensions.cs
Normal file
13
src/VolcanicCore.Providers/ServiceCollectionExtensions.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using VolcanicCore.Core;
|
||||
|
||||
namespace VolcanicCore.Providers;
|
||||
|
||||
public static class ServiceCollectionExtensions
|
||||
{
|
||||
public static IServiceCollection AddVolcanicProviders(this IServiceCollection services)
|
||||
{
|
||||
services.AddSingleton<IConnectionProvider, NatsConnectionProvider>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user