59 lines
1.6 KiB
C#
59 lines
1.6 KiB
C#
using Microsoft.Extensions.Logging;
|
|
|
|
namespace MxGateway.Client;
|
|
|
|
/// <summary>
|
|
/// Configures the gRPC channel used by the .NET MXAccess Gateway client.
|
|
/// </summary>
|
|
public sealed class MxGatewayClientOptions
|
|
{
|
|
public required Uri Endpoint { get; init; }
|
|
|
|
public required string ApiKey { get; init; }
|
|
|
|
public bool UseTls { get; init; }
|
|
|
|
public string? CaCertificatePath { get; init; }
|
|
|
|
public string? ServerNameOverride { get; init; }
|
|
|
|
public TimeSpan ConnectTimeout { get; init; } = TimeSpan.FromSeconds(10);
|
|
|
|
public TimeSpan DefaultCallTimeout { get; init; } = TimeSpan.FromSeconds(30);
|
|
|
|
public ILoggerFactory? LoggerFactory { get; init; }
|
|
|
|
public void Validate()
|
|
{
|
|
ArgumentNullException.ThrowIfNull(Endpoint);
|
|
|
|
if (!Endpoint.IsAbsoluteUri)
|
|
{
|
|
throw new ArgumentException(
|
|
"The gateway endpoint must be an absolute URI.",
|
|
nameof(Endpoint));
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(ApiKey))
|
|
{
|
|
throw new ArgumentException(
|
|
"The gateway API key must not be empty.",
|
|
nameof(ApiKey));
|
|
}
|
|
|
|
if (ConnectTimeout <= TimeSpan.Zero)
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
nameof(ConnectTimeout),
|
|
"The connect timeout must be greater than zero.");
|
|
}
|
|
|
|
if (DefaultCallTimeout <= TimeSpan.Zero)
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
nameof(DefaultCallTimeout),
|
|
"The default call timeout must be greater than zero.");
|
|
}
|
|
}
|
|
}
|