feat(client): standardize connection outcomes (#13)
quality-gate / quality (push) Successful in 59s
quality-gate / quality (push) Successful in 59s
This commit is contained in:
+35
@@ -0,0 +1,35 @@
|
||||
using FinalFactory.Rendezvous.Contracts;
|
||||
|
||||
namespace FinalFactory.Rendezvous.Client;
|
||||
|
||||
public sealed class RendezvousConnectionStartResult
|
||||
{
|
||||
internal RendezvousConnectionStartResult(
|
||||
CreateJoinAttemptResponse? attempt,
|
||||
RendezvousConnectionOutcome? outcome)
|
||||
{
|
||||
if ((attempt is null) == (outcome is null))
|
||||
{
|
||||
throw new ArgumentException(
|
||||
"A connection start result requires exactly one attempt or terminal outcome.");
|
||||
}
|
||||
|
||||
Attempt = attempt;
|
||||
Outcome = outcome;
|
||||
}
|
||||
|
||||
public CreateJoinAttemptResponse? Attempt { get; }
|
||||
public RendezvousConnectionOutcome? Outcome { get; }
|
||||
public bool IsReadyForTraversal => Attempt is not null;
|
||||
public bool IsCompleted => Outcome is not null;
|
||||
|
||||
public static RendezvousConnectionStartResult ReadyForTraversal(
|
||||
CreateJoinAttemptResponse attempt) => new(
|
||||
attempt ?? throw new ArgumentNullException(nameof(attempt)),
|
||||
null);
|
||||
|
||||
public static RendezvousConnectionStartResult Completed(
|
||||
RendezvousConnectionOutcome outcome) => new(
|
||||
null,
|
||||
outcome ?? throw new ArgumentNullException(nameof(outcome)));
|
||||
}
|
||||
Reference in New Issue
Block a user