diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/ResourceTypeFilterTests.cs b/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/ResourceTypeFilterTests.cs deleted file mode 100644 index 7aa0b03b0063..000000000000 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/tests/Unit/ResourceTypeFilterTests.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Azure.ResourceManager.Core.Resources; -using NUnit.Framework; -using System; - -namespace Azure.ResourceManager.Core.Tests -{ - [Parallelizable] - public class ResourceTypeFilterTests - { - [TestCase] - public void TestResourceTypeFilterParamCheck() - { - Assert.Throws(() => { new PhVoidArmOperation((Operation)null); }); - Assert.Throws(() => { new PhVoidArmOperation((Response)null); }); - } - } -} diff --git a/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhArmOperation.cs b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhArmOperation.cs new file mode 100644 index 000000000000..aecd09d4a1e6 --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhArmOperation.cs @@ -0,0 +1,125 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; + +namespace Proto.Authorization +{ + /// + /// A class representing an arm operation wrapper object. + /// + /// The to convert TModel into. + /// The model returned by existing Operation methods. + public class PhArmOperation : Operation + where TOperations : class + where TModel : class + { + private readonly Func _converter; + private readonly Operation _wrappedOperation; + private readonly Operation _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + /// The function used to convert from existing type to new type. + public PhArmOperation(Operation wrapped, Func converter) + { + if (wrapped is null) + { + throw new ArgumentNullException(nameof(wrapped)); + } + + if (converter is null) + { + throw new ArgumentNullException(nameof(converter)); + } + + _wrappedOperation = wrapped; + _converter = converter; + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + /// The function used to convert from existing type to new type. + public PhArmOperation(Response wrapped, Func converter) + { + if (wrapped is null) + { + throw new ArgumentNullException(nameof(wrapped)); + } + + if (converter is null) + { + throw new ArgumentNullException(nameof(converter)); + } + + _wrappedResponseOperation = new PhValueArmOperation(wrapped); + _converter = converter; + } + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhArmOperation() + { + } + + /// + public override string Id => _wrappedOperation?.Id; + + /// + public override TOperations Value => _converter(_doesWrapOperation ? _wrappedOperation.Value : _wrappedResponseOperation.Value); + + /// + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + /// + public override bool HasValue => _doesWrapOperation ? _wrappedOperation.HasValue : _wrappedResponseOperation.HasValue; + + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "")] + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + /// + public override Response GetRawResponse() + { + return _doesWrapOperation ? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + } + + /// + public override Response UpdateStatus(CancellationToken cancellationToken = default) + { + return _doesWrapOperation ? _wrappedOperation.UpdateStatus(cancellationToken) : _wrappedResponseOperation.UpdateStatus(cancellationToken); + } + + /// + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) + { + return _doesWrapOperation + ? _wrappedOperation.UpdateStatusAsync(cancellationToken) + : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + } + + /// + public override async ValueTask> WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + var task = WaitForCompletionAsync(OperationInternals.DefaultPollingInterval, cancellationToken); + return await task.ConfigureAwait(false); + } + + /// + public override async ValueTask> WaitForCompletionAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) + { + var value = _doesWrapOperation + ? await _wrappedOperation.WaitForCompletionAsync(pollingInterval, cancellationToken).ConfigureAwait(false) + : await _wrappedResponseOperation.WaitForCompletionAsync(pollingInterval, cancellationToken).ConfigureAwait(false); + return Response.FromValue(_converter(value.Value), GetRawResponse()); + } + } +} diff --git a/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhValueArmOperation.cs b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhValueArmOperation.cs new file mode 100644 index 000000000000..3aaf5f1749ad --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhValueArmOperation.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; + +namespace Proto.Authorization +{ + /// + /// A class representing an arm operation wrapper object. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1618:Generic type parameters should be documented", Justification = "")] + internal class PhValueArmOperation : Operation + where TOperations : class + { + private readonly Operation _wrappedOperation; + private readonly OperationOrResponseInternals _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhValueArmOperation() + { + } + + /// + /// Initializes a new instance of the . + /// + /// The operation object to wrap. + public PhValueArmOperation(Operation wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedOperation = wrapped; + } + + /// + /// Initializes a new instance of the . + /// + /// The response object to wrap. + public PhValueArmOperation(Response wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedResponseOperation = new OperationOrResponseInternals(wrapped); + } + + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + public override TOperations Value => _doesWrapOperation ? _wrappedOperation.Value : _wrappedResponseOperation.Value; + + public override bool HasValue => _doesWrapOperation ? _wrappedOperation.HasValue : _wrappedResponseOperation.HasValue; + + public override string Id => _wrappedOperation?.Id; + + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + public override Response GetRawResponse() => _doesWrapOperation? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + + public override Response UpdateStatus(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.UpdateStatus(cancellationToken) : _wrappedResponseOperation.UpdateStatus(cancellationToken); + + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.UpdateStatusAsync(cancellationToken) : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + + public override ValueTask> WaitForCompletionAsync(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.WaitForCompletionAsync(cancellationToken) : _wrappedResponseOperation.WaitForCompletionAsync(cancellationToken); + + public override ValueTask> WaitForCompletionAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) => _doesWrapOperation ? _wrappedOperation.WaitForCompletionAsync(pollingInterval, cancellationToken) : _wrappedResponseOperation.WaitForCompletionAsync(pollingInterval, cancellationToken); + } +} diff --git a/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhVoidArmOperation.cs b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhVoidArmOperation.cs new file mode 100644 index 000000000000..75d76ec9edd5 --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/authorization/Placeholder/PhVoidArmOperation.cs @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; + +namespace Proto.Authorization +{ + /// + /// A class representing an arm operation wrapper object. + /// + public class PhVoidArmOperation : Operation + { + private readonly Operation _wrappedOperation; + private readonly OperationOrResponseInternals _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhVoidArmOperation() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + public PhVoidArmOperation(Operation wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedOperation = wrapped; + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + public PhVoidArmOperation(Response wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedResponseOperation = new OperationOrResponseInternals(wrapped); + } + + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + /// + public override string Id => _wrappedOperation?.Id; + + /// + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + /// + public override Response GetRawResponse() => _doesWrapOperation ? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + + /// + public override Response UpdateStatus(CancellationToken cancellationToken = default) => + _doesWrapOperation + ? _wrappedOperation.UpdateStatus(cancellationToken) + : _wrappedResponseOperation.UpdateStatus(cancellationToken); + + /// + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) => + _doesWrapOperation + ? _wrappedOperation.UpdateStatusAsync(cancellationToken) + : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + + /// + public override ValueTask WaitForCompletionResponseAsync(CancellationToken cancellationToken = default) => + WaitForCompletionResponseAsync(OperationInternals.DefaultPollingInterval, cancellationToken); + + /// + public override ValueTask WaitForCompletionResponseAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) => + _doesWrapOperation + ? _wrappedOperation.WaitForCompletionResponseAsync(pollingInterval, cancellationToken) + : _wrappedResponseOperation.WaitForCompletionResponseAsync(pollingInterval, cancellationToken); + } +} diff --git a/sdk/resourcemanager/Proto.Client/authorization/Proto.Authorization.csproj b/sdk/resourcemanager/Proto.Client/authorization/Proto.Authorization.csproj index 098d4055cf8f..d48caa0115ba 100644 --- a/sdk/resourcemanager/Proto.Client/authorization/Proto.Authorization.csproj +++ b/sdk/resourcemanager/Proto.Client/authorization/Proto.Authorization.csproj @@ -5,7 +5,9 @@ netstandard2.0 Proto.Authorization latest + true false + 0 @@ -15,6 +17,7 @@ + all diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhArmOperation.cs b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhArmOperation.cs similarity index 93% rename from sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhArmOperation.cs rename to sdk/resourcemanager/Proto.Client/compute/Placeholder/PhArmOperation.cs index 1668e4e7ef34..2088f514d6ef 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhArmOperation.cs +++ b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhArmOperation.cs @@ -4,9 +4,10 @@ using System; using System.Threading; using System.Threading.Tasks; +using Azure; using Azure.Core; -namespace Azure.ResourceManager.Core +namespace Proto.Compute { /// /// A class representing an arm operation wrapper object. @@ -21,13 +22,6 @@ public class PhArmOperation : Operation private readonly Operation _wrappedOperation; private readonly Operation _wrappedResponseOperation; - /// - /// Initializes a new instance of the class for mocking. - /// - protected PhArmOperation() - { - } - /// /// Initializes a new instance of the class. /// @@ -36,10 +30,14 @@ protected PhArmOperation() public PhArmOperation(Operation wrapped, Func converter) { if (wrapped is null) + { throw new ArgumentNullException(nameof(wrapped)); + } if (converter is null) + { throw new ArgumentNullException(nameof(converter)); + } _wrappedOperation = wrapped; _converter = converter; @@ -53,16 +51,25 @@ public PhArmOperation(Operation wrapped, Func conve public PhArmOperation(Response wrapped, Func converter) { if (wrapped is null) + { throw new ArgumentNullException(nameof(wrapped)); + } if (converter is null) + { throw new ArgumentNullException(nameof(converter)); + } _wrappedResponseOperation = new PhValueArmOperation(wrapped); _converter = converter; } - private bool _doesWrapOperation => _wrappedResponseOperation is null; + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhArmOperation() + { + } /// public override string Id => _wrappedOperation?.Id; @@ -76,6 +83,9 @@ public PhArmOperation(Response wrapped, Func conver /// public override bool HasValue => _doesWrapOperation ? _wrappedOperation.HasValue : _wrappedResponseOperation.HasValue; + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "")] + private bool _doesWrapOperation => _wrappedResponseOperation is null; + /// public override Response GetRawResponse() { diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhValueArmOperation.cs b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhValueArmOperation.cs similarity index 94% rename from sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhValueArmOperation.cs rename to sdk/resourcemanager/Proto.Client/compute/Placeholder/PhValueArmOperation.cs index 3c0f8982941f..3cd7d16faa08 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhValueArmOperation.cs +++ b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhValueArmOperation.cs @@ -4,13 +4,15 @@ using System; using System.Threading; using System.Threading.Tasks; +using Azure; using Azure.Core; -namespace Azure.ResourceManager.Core +namespace Proto.Compute { /// /// A class representing an arm operation wrapper object. /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1618:Generic type parameters should be documented", Justification = "")] internal class PhValueArmOperation : Operation where TOperations : class { diff --git a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhVoidArmOperation.cs b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhVoidArmOperation.cs similarity index 98% rename from sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhVoidArmOperation.cs rename to sdk/resourcemanager/Proto.Client/compute/Placeholder/PhVoidArmOperation.cs index 8ca7191eeaff..3791c5bad335 100644 --- a/sdk/resourcemanager/Azure.ResourceManager.Core/src/Placeholder/PhVoidArmOperation.cs +++ b/sdk/resourcemanager/Proto.Client/compute/Placeholder/PhVoidArmOperation.cs @@ -4,9 +4,10 @@ using System; using System.Threading; using System.Threading.Tasks; +using Azure; using Azure.Core; -namespace Azure.ResourceManager.Core +namespace Proto.Compute { /// /// A class representing an arm operation wrapper object. diff --git a/sdk/resourcemanager/Proto.Client/compute/Proto.Compute.csproj b/sdk/resourcemanager/Proto.Client/compute/Proto.Compute.csproj index a7a569056c39..ed273344410d 100644 --- a/sdk/resourcemanager/Proto.Client/compute/Proto.Compute.csproj +++ b/sdk/resourcemanager/Proto.Client/compute/Proto.Compute.csproj @@ -6,9 +6,11 @@ Proto.Compute latest false + true + diff --git a/sdk/resourcemanager/Proto.Client/network/Placeholder/PhArmOperation.cs b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhArmOperation.cs new file mode 100644 index 000000000000..401d363632fa --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhArmOperation.cs @@ -0,0 +1,126 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; +using Azure.ResourceManager.Core; + +namespace Proto.Network +{ + /// + /// A class representing an arm operation wrapper object. + /// + /// The to convert TModel into. + /// The model returned by existing Operation methods. + public class PhArmOperation : Operation + where TOperations : class + where TModel : class + { + private readonly Func _converter; + private readonly Operation _wrappedOperation; + private readonly Operation _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + /// The function used to convert from existing type to new type. + public PhArmOperation(Operation wrapped, Func converter) + { + if (wrapped is null) + { + throw new ArgumentNullException(nameof(wrapped)); + } + + if (converter is null) + { + throw new ArgumentNullException(nameof(converter)); + } + + _wrappedOperation = wrapped; + _converter = converter; + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + /// The function used to convert from existing type to new type. + public PhArmOperation(Response wrapped, Func converter) + { + if (wrapped is null) + { + throw new ArgumentNullException(nameof(wrapped)); + } + + if (converter is null) + { + throw new ArgumentNullException(nameof(converter)); + } + + _wrappedResponseOperation = new PhValueArmOperation(wrapped); + _converter = converter; + } + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhArmOperation() + { + } + + /// + public override string Id => _wrappedOperation?.Id; + + /// + public override TOperations Value => _converter(_doesWrapOperation ? _wrappedOperation.Value : _wrappedResponseOperation.Value); + + /// + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + /// + public override bool HasValue => _doesWrapOperation ? _wrappedOperation.HasValue : _wrappedResponseOperation.HasValue; + + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:Element should begin with upper-case letter", Justification = "")] + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + /// + public override Response GetRawResponse() + { + return _doesWrapOperation ? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + } + + /// + public override Response UpdateStatus(CancellationToken cancellationToken = default) + { + return _doesWrapOperation ? _wrappedOperation.UpdateStatus(cancellationToken) : _wrappedResponseOperation.UpdateStatus(cancellationToken); + } + + /// + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) + { + return _doesWrapOperation + ? _wrappedOperation.UpdateStatusAsync(cancellationToken) + : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + } + + /// + public override async ValueTask> WaitForCompletionAsync(CancellationToken cancellationToken = default) + { + var task = WaitForCompletionAsync(OperationInternals.DefaultPollingInterval, cancellationToken); + return await task.ConfigureAwait(false); + } + + /// + public override async ValueTask> WaitForCompletionAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) + { + var value = _doesWrapOperation + ? await _wrappedOperation.WaitForCompletionAsync(pollingInterval, cancellationToken).ConfigureAwait(false) + : await _wrappedResponseOperation.WaitForCompletionAsync(pollingInterval, cancellationToken).ConfigureAwait(false); + return Response.FromValue(_converter(value.Value), GetRawResponse()); + } + } +} diff --git a/sdk/resourcemanager/Proto.Client/network/Placeholder/PhValueArmOperation.cs b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhValueArmOperation.cs new file mode 100644 index 000000000000..9919064b70b1 --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhValueArmOperation.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; + +namespace Proto.Network +{ + /// + /// A class representing an arm operation wrapper object. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1618:Generic type parameters should be documented", Justification = "")] + internal class PhValueArmOperation : Operation + where TOperations : class + { + private readonly Operation _wrappedOperation; + private readonly OperationOrResponseInternals _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhValueArmOperation() + { + } + + /// + /// Initializes a new instance of the . + /// + /// The operation object to wrap. + public PhValueArmOperation(Operation wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedOperation = wrapped; + } + + /// + /// Initializes a new instance of the . + /// + /// The response object to wrap. + public PhValueArmOperation(Response wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedResponseOperation = new OperationOrResponseInternals(wrapped); + } + + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + public override TOperations Value => _doesWrapOperation ? _wrappedOperation.Value : _wrappedResponseOperation.Value; + + public override bool HasValue => _doesWrapOperation ? _wrappedOperation.HasValue : _wrappedResponseOperation.HasValue; + + public override string Id => _wrappedOperation?.Id; + + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + public override Response GetRawResponse() => _doesWrapOperation? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + + public override Response UpdateStatus(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.UpdateStatus(cancellationToken) : _wrappedResponseOperation.UpdateStatus(cancellationToken); + + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.UpdateStatusAsync(cancellationToken) : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + + public override ValueTask> WaitForCompletionAsync(CancellationToken cancellationToken = default) => _doesWrapOperation ? _wrappedOperation.WaitForCompletionAsync(cancellationToken) : _wrappedResponseOperation.WaitForCompletionAsync(cancellationToken); + + public override ValueTask> WaitForCompletionAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) => _doesWrapOperation ? _wrappedOperation.WaitForCompletionAsync(pollingInterval, cancellationToken) : _wrappedResponseOperation.WaitForCompletionAsync(pollingInterval, cancellationToken); + } +} diff --git a/sdk/resourcemanager/Proto.Client/network/Placeholder/PhVoidArmOperation.cs b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhVoidArmOperation.cs new file mode 100644 index 000000000000..039792bd298d --- /dev/null +++ b/sdk/resourcemanager/Proto.Client/network/Placeholder/PhVoidArmOperation.cs @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading; +using System.Threading.Tasks; +using Azure; +using Azure.Core; + +namespace Proto.Network +{ + /// + /// A class representing an arm operation wrapper object. + /// + public class PhVoidArmOperation : Operation + { + private readonly Operation _wrappedOperation; + private readonly OperationOrResponseInternals _wrappedResponseOperation; + + /// + /// Initializes a new instance of the class for mocking. + /// + protected PhVoidArmOperation() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + public PhVoidArmOperation(Operation wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedOperation = wrapped; + } + + /// + /// Initializes a new instance of the class. + /// + /// The results to wrap. + public PhVoidArmOperation(Response wrapped) + { + if (wrapped is null) + throw new ArgumentNullException(nameof(wrapped)); + + _wrappedResponseOperation = new OperationOrResponseInternals(wrapped); + } + + private bool _doesWrapOperation => _wrappedResponseOperation is null; + + /// + public override string Id => _wrappedOperation?.Id; + + /// + public override bool HasCompleted => _doesWrapOperation ? _wrappedOperation.HasCompleted : _wrappedResponseOperation.HasCompleted; + + /// + public override Response GetRawResponse() => _doesWrapOperation ? _wrappedOperation.GetRawResponse() : _wrappedResponseOperation.GetRawResponse(); + + /// + public override Response UpdateStatus(CancellationToken cancellationToken = default) => + _doesWrapOperation + ? _wrappedOperation.UpdateStatus(cancellationToken) + : _wrappedResponseOperation.UpdateStatus(cancellationToken); + + /// + public override ValueTask UpdateStatusAsync(CancellationToken cancellationToken = default) => + _doesWrapOperation + ? _wrappedOperation.UpdateStatusAsync(cancellationToken) + : _wrappedResponseOperation.UpdateStatusAsync(cancellationToken); + + /// + public override ValueTask WaitForCompletionResponseAsync(CancellationToken cancellationToken = default) => + WaitForCompletionResponseAsync(OperationInternals.DefaultPollingInterval, cancellationToken); + + /// + public override ValueTask WaitForCompletionResponseAsync(TimeSpan pollingInterval, CancellationToken cancellationToken) => + _doesWrapOperation + ? _wrappedOperation.WaitForCompletionResponseAsync(pollingInterval, cancellationToken) + : _wrappedResponseOperation.WaitForCompletionResponseAsync(pollingInterval, cancellationToken); + } +} diff --git a/sdk/resourcemanager/Proto.Client/network/Proto.Network.csproj b/sdk/resourcemanager/Proto.Client/network/Proto.Network.csproj index ac7953e94d77..626a81eed251 100644 --- a/sdk/resourcemanager/Proto.Client/network/Proto.Network.csproj +++ b/sdk/resourcemanager/Proto.Client/network/Proto.Network.csproj @@ -6,6 +6,7 @@ Proto.Network latest false + true @@ -13,6 +14,7 @@ +