diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ec0dab9ffce39..bd9496ad0916c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1,26 @@ -# See for instructions on this file https://help.github.com/articles/about-codeowners/ +# Instructions for CODEOWNERS file format and automatic build failure notifications: +# https://github.com/Azure/azure-sdk/blob/master/docs/engineering-system/codeowners.md + +########### +# SDK +########### + +# Catch all +# /sdk/ @joshfree + +# Core +# /sdk/core/ + +# Service teams +# /sdk/appconfiguration/ +# /sdk/eventhubs/ +# /sdk/identity/ +# /sdk/keyvault/ +# /sdk/storage/ + +########### +# Eng Sys +########### +/eng/ @weshaggard @mitchdenny @danieljurek +/**/tests.yml @danieljurek +/**/ci.yml @mitchdenny diff --git a/.azure-pipelines/client.yml b/eng/pipelines/client.yml similarity index 100% rename from .azure-pipelines/client.yml rename to eng/pipelines/client.yml diff --git a/pom.data.xml b/pom.data.xml index 90cec2fac80be..58305130b0e38 100644 --- a/pom.data.xml +++ b/pom.data.xml @@ -542,7 +542,7 @@ ./sdk/batch/microsoft-azure-batch - ./eventhubs/data-plane + ./sdk/eventhubs/pom.data.xml ./sdk/keyvault/pom.data.xml ./sdk/servicebus ./storage/data-plane diff --git a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationAsyncClient.java b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationAsyncClient.java index 470dff124d006..157620a8f2135 100644 --- a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationAsyncClient.java +++ b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationAsyncClient.java @@ -28,8 +28,7 @@ import java.net.URL; import java.util.Objects; -import static com.azure.core.implementation.util.FluxUtil.fluxContext; -import static com.azure.core.implementation.util.FluxUtil.monoContext; +import static com.azure.core.implementation.util.FluxUtil.withContext; /** * This class provides a client that contains all the operations for {@link ConfigurationSetting ConfigurationSettings} @@ -86,7 +85,7 @@ public final class ConfigurationAsyncClient { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> addSetting(String key, String value) { - return monoContext( + return withContext( context -> addSetting(new ConfigurationSetting().key(key).value(value), context)); } @@ -115,7 +114,7 @@ public Mono> addSetting(String key, String value) */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> addSetting(ConfigurationSetting setting) { - return monoContext(context -> addSetting(setting, context)); + return withContext(context -> addSetting(setting, context)); } /** @@ -188,7 +187,7 @@ Mono> addSetting(ConfigurationSetting setting, Co */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> setSetting(String key, String value) { - return monoContext( + return withContext( context -> setSetting(new ConfigurationSetting().key(key).value(value), context)); } @@ -233,7 +232,7 @@ public Mono> setSetting(String key, String value) */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> setSetting(ConfigurationSetting setting) { - return monoContext(context -> setSetting(setting, context)); + return withContext(context -> setSetting(setting, context)); } /** @@ -317,7 +316,7 @@ Mono> setSetting(ConfigurationSetting setting, Co */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> updateSetting(String key, String value) { - return monoContext( + return withContext( context -> updateSetting(new ConfigurationSetting().key(key).value(value), context)); } @@ -350,7 +349,7 @@ public Mono> updateSetting(String key, String val */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> updateSetting(ConfigurationSetting setting) { - return monoContext(context -> updateSetting(setting, context)); + return withContext(context -> updateSetting(setting, context)); } /** @@ -416,7 +415,7 @@ Mono> updateSetting(ConfigurationSetting setting, */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getSetting(String key) { - return monoContext(context -> getSetting(new ConfigurationSetting().key(key), context)); + return withContext(context -> getSetting(new ConfigurationSetting().key(key), context)); } /** @@ -443,7 +442,7 @@ public Mono> getSetting(String key) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getSetting(ConfigurationSetting setting) { - return monoContext(context -> getSetting(setting, context)); + return withContext(context -> getSetting(setting, context)); } /** @@ -502,7 +501,7 @@ Mono> getSetting(ConfigurationSetting setting, Co */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> deleteSetting(String key) { - return monoContext(context -> deleteSetting(new ConfigurationSetting().key(key), context)); + return withContext(context -> deleteSetting(new ConfigurationSetting().key(key), context)); } /** @@ -536,7 +535,7 @@ public Mono> deleteSetting(String key) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> deleteSetting(ConfigurationSetting setting) { - return monoContext(context -> deleteSetting(setting, context)); + return withContext(context -> deleteSetting(setting, context)); } /** @@ -597,8 +596,8 @@ Mono> deleteSetting(ConfigurationSetting setting, */ @ServiceMethod(returns = ReturnType.COLLECTION) public PagedFlux listSettings(SettingSelector options) { - return new PagedFlux<>(() -> monoContext(context -> listFirstPageSettings(options, context)), - continuationToken -> monoContext(context -> listNextPageSettings(context, continuationToken))); + return new PagedFlux<>(() -> withContext(context -> listFirstPageSettings(options, context)), + continuationToken -> withContext(context -> listNextPageSettings(context, continuationToken))); } /** @@ -672,8 +671,41 @@ private Mono> listFirstPageSettings(SettingS * @return Revisions of the ConfigurationSetting */ @ServiceMethod(returns = ReturnType.COLLECTION) - public Flux listSettingRevisions(SettingSelector selector) { - return fluxContext(context -> listSettingRevisions(selector, context)); + public PagedFlux listSettingRevisions(SettingSelector selector) { + return new PagedFlux<>(() -> + withContext(context -> listSettingRevisionsFirstPage(selector, context)), + continuationToken -> withContext(context -> listSettingRevisionsNextPage(continuationToken, context))); + } + + Mono> listSettingRevisionsFirstPage(SettingSelector selector, Context context) { + Mono> result; + + if (selector != null) { + String fields = ImplUtils.arrayToString(selector.fields(), SettingFields::toStringMapper); + String keys = ImplUtils.arrayToString(selector.keys(), key -> key); + String labels = ImplUtils.arrayToString(selector.labels(), label -> label); + String range = selector.range() != null ? String.format(RANGE_QUERY, selector.range()) : null; + + result = service.listKeyValueRevisions(serviceEndpoint, keys, labels, fields, selector.acceptDateTime(), range, context) + .doOnRequest(ignoredValue -> logger.info("Listing ConfigurationSetting revisions - {}", selector)) + .doOnSuccess(response -> logger.info("Listed ConfigurationSetting revisions - {}", selector)) + .doOnError(error -> logger.warning("Failed to list ConfigurationSetting revisions - {}", selector, error)); + } else { + result = service.listKeyValueRevisions(serviceEndpoint, null, null, null, null, null, context) + .doOnRequest(ignoredValue -> logger.info("Listing ConfigurationSetting revisions")) + .doOnSuccess(response -> logger.info("Listed ConfigurationSetting revisions")) + .doOnError(error -> logger.warning("Failed to list all ConfigurationSetting revisions", error)); + } + + return result; + } + + Mono> listSettingRevisionsNextPage(String nextPageLink, Context context) { + Mono> result = service.listKeyValues(serviceEndpoint, nextPageLink, context) + .doOnRequest(ignoredValue -> logger.info("Retrieving the next listing page - Page {}", nextPageLink)) + .doOnSuccess(response -> logger.info("Retrieved the next listing page - Page {}", nextPageLink)) + .doOnError(error -> logger.warning("Failed to retrieve the next listing page - Page {}", nextPageLink, error)); + return result; } /** @@ -733,6 +765,7 @@ private Flux listSettings(String nextPageLink, Context con .doOnRequest(ignoredValue -> logger.info("Retrieving the next listing page - Page {}", nextPageLink)) .doOnSuccess(response -> logger.info("Retrieved the next listing page - Page {}", nextPageLink)) .doOnError(error -> logger.warning("Failed to retrieve the next listing page - Page {}", nextPageLink, error)); + return result.flatMapMany(r -> extractAndFetchConfigurationSettings(r, context)); } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/util/FluxUtil.java b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/util/FluxUtil.java index f8541f0983931..c13d5b9bee023 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/implementation/util/FluxUtil.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/implementation/util/FluxUtil.java @@ -187,13 +187,13 @@ public static Mono bytebufStreamToFile(Flux content, Asynchronous *

* *

Code samples

- * {@codesnippet com.azure.core.implementation.util.fluxutil.monocontext} + * {@codesnippet com.azure.core.implementation.util.fluxutil.withcontext} * * @param serviceCall The lambda function that makes the service call into which azure context will be passed * @param The type of response returned from the service call * @return The response from service call */ - public static Mono monoContext(Function> serviceCall) { + public static Mono withContext(Function> serviceCall) { return Mono.subscriberContext() .map(FluxUtil::toAzureContext) .flatMap(serviceCall); diff --git a/sdk/core/azure-core/src/samples/java/com/azure/core/implementation/util/FluxUtilJavaDocCodeSnippets.java b/sdk/core/azure-core/src/samples/java/com/azure/core/implementation/util/FluxUtilJavaDocCodeSnippets.java index 341adf9e27f7d..d09272ddb377e 100644 --- a/sdk/core/azure-core/src/samples/java/com/azure/core/implementation/util/FluxUtilJavaDocCodeSnippets.java +++ b/sdk/core/azure-core/src/samples/java/com/azure/core/implementation/util/FluxUtilJavaDocCodeSnippets.java @@ -16,11 +16,11 @@ public class FluxUtilJavaDocCodeSnippets { * Code snippet for using {@link FluxUtil} with single item response */ public void codeSnippetForCallWithSingleResponse() { - // BEGIN: com.azure.core.implementation.util.fluxutil.monocontext + // BEGIN: com.azure.core.implementation.util.fluxutil.withcontext String prefix = "Hello, "; Mono response = FluxUtil - .monoContext(context -> serviceCallReturnsSingle(prefix, context)); - // END: com.azure.core.implementation.util.fluxutil.monocontext + .withContext(context -> serviceCallReturnsSingle(prefix, context)); + // END: com.azure.core.implementation.util.fluxutil.withcontext } /** diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/implementation/util/FluxUtilTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/implementation/util/FluxUtilTests.java index 76cd1feb04a5e..50a427fc25b54 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/implementation/util/FluxUtilTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/implementation/util/FluxUtilTests.java @@ -312,9 +312,9 @@ private PagedFlux getPagedCollection() // Simulates the client library API List> pagedResponses = getPagedResponses(4); return new PagedFlux<>( - () -> FluxUtil.monoContext(context -> getFirstPage(pagedResponses, context)), + () -> FluxUtil.withContext(context -> getFirstPage(pagedResponses, context)), continuationToken -> FluxUtil - .monoContext(context -> getNextPage(continuationToken, pagedResponses, context))); + .withContext(context -> getNextPage(continuationToken, pagedResponses, context))); } private List> getPagedResponses(int noOfPages) @@ -361,7 +361,7 @@ private List getItems(Integer i) { private Mono getSingle(String prefix) { - return FluxUtil.monoContext(context -> serviceCallSingle(prefix, context)); + return FluxUtil.withContext(context -> serviceCallSingle(prefix, context)); } private Flux getCollection(String prefix) { diff --git a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ClientConstants.java b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ClientConstants.java index 24bea7a6cd9a5..910e330259d12 100644 --- a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ClientConstants.java +++ b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ClientConstants.java @@ -8,13 +8,12 @@ public final class ClientConstants { public static final Duration OPERATION_TIMEOUT = Duration.ofSeconds(60); public static final String NOT_APPLICABLE = "n/a"; - public static final int HTTPS_PORT = 443; public static final int MAX_EVENTHUB_AMQP_HEADER_SIZE_BYTES = 512; public static final Duration TOKEN_VALIDITY = Duration.ofMinutes(20); public static final int SERVER_BUSY_BASE_SLEEP_TIME_IN_SECS = 4; public static final String PRODUCT_NAME = "azsdk-java-eventhubs"; - public static final String CURRENT_JAVACLIENT_VERSION = "1.0.0-SNAPSHOT"; + public static final String CURRENT_JAVA_CLIENT_VERSION = "1.0.0-preview.2"; public static final String PLATFORM_INFO = getOSInformation(); public static final String FRAMEWORK_INFO = getFrameworkInfo(); @@ -24,8 +23,7 @@ public final class ClientConstants { * TODO (conniey): Extract logic from UserAgentPolicy into something we can use here. */ public static final String USER_AGENT = String.format("%s/%s %s;%s", - PRODUCT_NAME, CURRENT_JAVACLIENT_VERSION, System.getProperty("java.version"), PLATFORM_INFO); - public static final String HTTPS_URI_FORMAT = "https://%s:%s"; + PRODUCT_NAME, CURRENT_JAVA_CLIENT_VERSION, System.getProperty("java.version"), PLATFORM_INFO); public static final String ENDPOINT_FORMAT = "sb://%s.%s"; private ClientConstants() { diff --git a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ReactorHandlerProvider.java b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ReactorHandlerProvider.java index 851ad1b4e7260..9d7c66ad27bbf 100644 --- a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ReactorHandlerProvider.java +++ b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/ReactorHandlerProvider.java @@ -4,10 +4,12 @@ package com.azure.messaging.eventhubs.implementation; import com.azure.core.amqp.TransportType; +import com.azure.core.util.logging.ClientLogger; import com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler; import com.azure.messaging.eventhubs.implementation.handler.ReceiveLinkHandler; import com.azure.messaging.eventhubs.implementation.handler.SendLinkHandler; import com.azure.messaging.eventhubs.implementation.handler.SessionHandler; +import com.azure.messaging.eventhubs.implementation.handler.WebSocketsConnectionHandler; import org.apache.qpid.proton.reactor.Reactor; import java.time.Duration; @@ -17,6 +19,7 @@ * Provides handlers for the various types of links. */ public class ReactorHandlerProvider { + private final ClientLogger logger = new ClientLogger(ReactorHandlerProvider.class); private final ReactorProvider provider; /** @@ -42,8 +45,10 @@ ConnectionHandler createConnectionHandler(String connectionId, String hostname, case AMQP: return new ConnectionHandler(connectionId, hostname); case AMQP_WEB_SOCKETS: + return new WebSocketsConnectionHandler(connectionId, hostname); default: - throw new IllegalArgumentException(String.format(Locale.US, "This transport type '%s' is not supported yet.", transportType)); + logger.logAndThrow(new IllegalArgumentException(String.format(Locale.US, "This transport type '%s' is not supported.", transportType))); + return null; } } @@ -60,7 +65,6 @@ SessionHandler createSessionHandler(String connectionId, String host, String ses return new SessionHandler(connectionId, host, sessionName, provider.getReactorDispatcher(), openTimeout); } - /** * Creates a new link handler for sending messages. * diff --git a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandler.java b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandler.java index 9053bc6178a52..db80eb963fabe 100644 --- a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandler.java +++ b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandler.java @@ -21,6 +21,9 @@ import java.util.HashMap; import java.util.Map; +/** + * Creates an AMQP connection using sockets and the default AMQP protocol port 5671. + */ public class ConnectionHandler extends Handler { static final Symbol PRODUCT = Symbol.valueOf("product"); static final Symbol VERSION = Symbol.valueOf("version"); @@ -32,8 +35,8 @@ public class ConnectionHandler extends Handler { static final int AMQPS_PORT = 5671; static final int MAX_FRAME_SIZE = 65536; - private final ClientLogger logger; private final Map connectionProperties; + protected final ClientLogger logger; /** * Creates a handler that handles proton-j's connection events. @@ -62,7 +65,7 @@ protected ConnectionHandler(final String connectionId, final String hostname, fi this.connectionProperties = new HashMap<>(); this.connectionProperties.put(PRODUCT.toString(), ClientConstants.PRODUCT_NAME); - this.connectionProperties.put(VERSION.toString(), ClientConstants.CURRENT_JAVACLIENT_VERSION); + this.connectionProperties.put(VERSION.toString(), ClientConstants.CURRENT_JAVA_CLIENT_VERSION); this.connectionProperties.put(PLATFORM.toString(), ClientConstants.PLATFORM_INFO); this.connectionProperties.put(FRAMEWORK.toString(), ClientConstants.FRAMEWORK_INFO); diff --git a/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandler.java b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandler.java new file mode 100644 index 0000000000000..ddaf7fe9c1ba7 --- /dev/null +++ b/sdk/eventhubs/azure-eventhubs/src/main/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandler.java @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.messaging.eventhubs.implementation.handler; + +import com.azure.core.util.logging.ClientLogger; +import com.microsoft.azure.proton.transport.ws.impl.WebSocketImpl; +import org.apache.qpid.proton.engine.Event; +import org.apache.qpid.proton.engine.impl.TransportInternal; + +/** + * Creates an AMQP connection using web sockets (port 443). + */ +public class WebSocketsConnectionHandler extends ConnectionHandler { + static final int HTTPS_PORT = 443; + + // This is the current limitation of https://github.com/Azure/qpid-proton-j-extensions. + // Once this library enables larger frames - this property can be removed. + static final int MAX_FRAME_SIZE = 4 * 1024; + + private static final String SOCKET_PATH = "/$servicebus/websocket"; + private static final String PROTOCOL = "AMQPWSB10"; + + /** + * Creates a handler that handles proton-j's connection events using web sockets. + * + * @param connectionId Identifier for this connection. + * @param hostname Hostname to use for socket creation. If there is a proxy configured, this could be a + * proxy's IP address. + */ + public WebSocketsConnectionHandler(final String connectionId, final String hostname) { + super(connectionId, hostname, new ClientLogger(WebSocketsConnectionHandler.class)); + } + + @Override + protected void addTransportLayers(final Event event, final TransportInternal transport) { + final String hostName = event.getConnection().getHostname(); + + final WebSocketImpl webSocket = new WebSocketImpl(); + webSocket.configure( + hostName, + SOCKET_PATH, + "", + 0, + PROTOCOL, + null, + null); + + transport.addTransportLayer(webSocket); + + logger.verbose("Adding web sockets transport layer for hostname[{}]", hostName); + + super.addTransportLayers(event, transport); + } + + @Override + public int getProtocolPort() { + return HTTPS_PORT; + } + + @Override + public int getMaxFrameSize() { + return MAX_FRAME_SIZE; + } +} diff --git a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubClientIntegrationTest.java b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubClientIntegrationTest.java index ba80afd99c381..a89e0561be23b 100644 --- a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubClientIntegrationTest.java +++ b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubClientIntegrationTest.java @@ -3,8 +3,10 @@ package com.azure.messaging.eventhubs; +import com.azure.core.amqp.TransportType; import com.azure.core.util.logging.ClientLogger; import com.azure.messaging.eventhubs.implementation.ApiTestBase; +import com.azure.messaging.eventhubs.implementation.ConnectionOptions; import com.azure.messaging.eventhubs.implementation.ReactorHandlerProvider; import com.azure.messaging.eventhubs.models.EventHubConsumerOptions; import com.azure.messaging.eventhubs.models.EventHubProducerOptions; @@ -14,6 +16,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import reactor.core.Disposable; import reactor.core.Disposables; import reactor.core.publisher.Flux; @@ -26,23 +30,37 @@ import java.util.UUID; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import static com.azure.messaging.eventhubs.EventHubAsyncClient.DEFAULT_CONSUMER_GROUP_NAME; +import static com.azure.messaging.eventhubs.TestUtils.isMatchingEvent; import static java.nio.charset.StandardCharsets.UTF_8; /** * Tests scenarios on {@link EventHubAsyncClient}. */ +@RunWith(Parameterized.class) public class EventHubClientIntegrationTest extends ApiTestBase { - private static final String PARTITION_ID = "0"; + private static final int NUMBER_OF_EVENTS = 5; + + @Parameterized.Parameters(name = "{index}: transportType={0}") + public static Iterable getTransportTypes() { + return Arrays.asList(TransportType.AMQP, TransportType.AMQP_WEB_SOCKETS); + } + + private static final String PARTITION_ID = "1"; + private static final AtomicBoolean HAS_PUSHED_EVENTS = new AtomicBoolean(); + private static final String MESSAGE_TRACKING_VALUE = UUID.randomUUID().toString(); private EventHubAsyncClient client; @Rule public TestName testName = new TestName(); - public EventHubClientIntegrationTest() { + public EventHubClientIntegrationTest(TransportType transportType) { super(new ClientLogger(EventHubClientIntegrationTest.class)); + + setTransportType(transportType); } @Override @@ -52,8 +70,12 @@ protected String testName() { @Override protected void beforeTest() { - ReactorHandlerProvider handlerProvider = new ReactorHandlerProvider(getReactorProvider()); - client = new EventHubAsyncClient(getConnectionOptions(), getReactorProvider(), handlerProvider); + final ReactorHandlerProvider handlerProvider = new ReactorHandlerProvider(getReactorProvider()); + final ConnectionOptions connectionOptions = getConnectionOptions(); + + client = new EventHubAsyncClient(connectionOptions, getReactorProvider(), handlerProvider); + + setupEventTestData(client); } @Override @@ -117,15 +139,14 @@ public void receiveMessage() { skipIfNotRecordMode(); // Arrange - final int numberOfEvents = 10; final EventHubConsumerOptions options = new EventHubConsumerOptions() .prefetchCount(2); final EventHubConsumer consumer = client.createConsumer(DEFAULT_CONSUMER_GROUP_NAME, PARTITION_ID, EventPosition.earliest(), options); // Act & Assert - StepVerifier.create(consumer.receive().take(numberOfEvents)) - .expectNextCount(numberOfEvents) + StepVerifier.create(consumer.receive().filter(x -> isMatchingEvent(x, MESSAGE_TRACKING_VALUE)).take(NUMBER_OF_EVENTS)) + .expectNextCount(NUMBER_OF_EVENTS) .verifyComplete(); } @@ -196,4 +217,27 @@ public void parallelEventHubClients() throws InterruptedException { dispose(clients); } } + + /** + * When we run this test, we check if there have been events already pushed to the partition, if not, we push some + * events there. + */ + private void setupEventTestData(EventHubAsyncClient client) { + if (HAS_PUSHED_EVENTS.getAndSet(true)) { + logger.info("Already pushed events to partition. Skipping."); + return; + } + + logger.info("Pushing events to partition. Message tracking value: {}", MESSAGE_TRACKING_VALUE); + + final EventHubProducerOptions producerOptions = new EventHubProducerOptions().partitionId(PARTITION_ID); + final EventHubProducer producer = client.createProducer(producerOptions); + final Flux events = TestUtils.getEvents(NUMBER_OF_EVENTS, MESSAGE_TRACKING_VALUE); + + try { + producer.send(events).block(TIMEOUT); + } finally { + dispose(producer); + } + } } diff --git a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventPositionIntegrationTest.java b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventPositionIntegrationTest.java index 30921adf1ba5a..1609006d9ffe7 100644 --- a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventPositionIntegrationTest.java +++ b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventPositionIntegrationTest.java @@ -43,7 +43,6 @@ public class EventPositionIntegrationTest extends ApiTestBase { // our own. private static final AtomicBoolean HAS_PUSHED_EVENTS = new AtomicBoolean(); private static final AtomicReference EVENTS_PUSHED = new AtomicReference<>(); - private static final String MESSAGE_POSITION_ID = "message-position"; private static final String MESSAGE_TRACKING_VALUE = UUID.randomUUID().toString(); private static final AtomicReference MESSAGES_PUSHED_INSTANT = new AtomicReference<>(); diff --git a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/ApiTestBase.java b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/ApiTestBase.java index c6dfeec5ff7e3..d30d403d64132 100644 --- a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/ApiTestBase.java +++ b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/ApiTestBase.java @@ -47,8 +47,10 @@ public abstract class ApiTestBase extends TestBase { private TokenCredential tokenCredential; private ReactorProvider reactorProvider; private ConnectionOptions connectionOptions; + private TransportType transportType; protected ApiTestBase(ClientLogger logger) { + this.transportType = TransportType.AMQP; this.logger = logger; } @@ -70,7 +72,7 @@ public void setupTest() { tokenCredential = new EventHubSharedAccessKeyCredential(properties.sharedAccessKeyName(), properties.sharedAccessKey(), ClientConstants.TOKEN_VALIDITY); } catch (NoSuchAlgorithmException | InvalidKeyException e) { - Assert.fail("Could not create tokenProvider :" + e.toString()); + Assert.fail("Could not create tokenProvider :" + e); } if (getTestMode() != TestMode.RECORD) { @@ -79,13 +81,13 @@ public void setupTest() { try { reactorDispatcher = new ReactorDispatcher(reactor); } catch (IOException e) { - Assert.fail("Could not create dispatcher."); + Assert.fail("Could not create dispatcher: " + e); } reactorProvider = new MockReactorProvider(reactor, reactorDispatcher); } connectionOptions = new ConnectionOptions(properties.endpoint().getHost(), properties.eventHubPath(), - tokenCredential, getAuthorizationType(), TIMEOUT, TransportType.AMQP, Retry.getNoRetry(), + tokenCredential, getAuthorizationType(), TIMEOUT, transportType, Retry.getNoRetry(), ProxyConfiguration.SYSTEM_DEFAULTS, scheduler); beforeTest(); @@ -125,6 +127,10 @@ protected void skipIfNotRecordMode() { Assume.assumeTrue(getTestMode() == TestMode.RECORD); } + protected void setTransportType(TransportType transportType) { + this.transportType = transportType; + } + protected ConnectionOptions getConnectionOptions() { return connectionOptions; } diff --git a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandlerTest.java b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandlerTest.java index 59be023ec35db..6f9d0e0538221 100644 --- a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandlerTest.java +++ b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/ConnectionHandlerTest.java @@ -3,16 +3,19 @@ package com.azure.messaging.eventhubs.implementation.handler; +import com.azure.messaging.eventhubs.implementation.ClientConstants; import org.apache.qpid.proton.amqp.Symbol; import org.apache.qpid.proton.engine.Connection; import org.apache.qpid.proton.engine.EndpointState; import org.apache.qpid.proton.engine.Event; import org.apache.qpid.proton.engine.impl.TransportInternal; +import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import reactor.test.StepVerifier; @@ -24,7 +27,6 @@ import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.MAX_FRAME_SIZE; import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.PLATFORM; import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.PRODUCT; -import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.USER_AGENT; import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.VERSION; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; @@ -46,19 +48,35 @@ public void setup() { handler = new ConnectionHandler(CONNECTION_ID, HOSTNAME); } + @After + public void teardown() { + Mockito.framework().clearInlineMocks(); + argumentCaptor = null; + } + @Test public void createHandler() { + // Arrange + final Map expected = new HashMap<>(); + expected.put(PRODUCT.toString(), ClientConstants.PRODUCT_NAME); + expected.put(VERSION.toString(), ClientConstants.CURRENT_JAVA_CLIENT_VERSION); + expected.put(PLATFORM.toString(), ClientConstants.PLATFORM_INFO); + expected.put(FRAMEWORK.toString(), ClientConstants.FRAMEWORK_INFO); + // Assert Assert.assertEquals(HOSTNAME, handler.getHostname()); Assert.assertEquals(MAX_FRAME_SIZE, handler.getMaxFrameSize()); Assert.assertEquals(AMQPS_PORT, handler.getProtocolPort()); final Map properties = handler.getConnectionProperties(); - Assert.assertTrue(properties.containsKey(PRODUCT.toString())); - Assert.assertTrue(properties.containsKey(VERSION.toString())); - Assert.assertTrue(properties.containsKey(PLATFORM.toString())); - Assert.assertTrue(properties.containsKey(FRAMEWORK.toString())); - Assert.assertTrue(properties.containsKey(USER_AGENT.toString())); + expected.forEach((key, value) -> { + Assert.assertTrue(properties.containsKey(key)); + + final Object actual = properties.get(key); + + Assert.assertTrue(actual instanceof String); + Assert.assertEquals(value, actual); + }); } @Test diff --git a/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandlerTest.java b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandlerTest.java new file mode 100644 index 0000000000000..7fd9c42f4c28b --- /dev/null +++ b/sdk/eventhubs/azure-eventhubs/src/test/java/com/azure/messaging/eventhubs/implementation/handler/WebSocketsConnectionHandlerTest.java @@ -0,0 +1,136 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.messaging.eventhubs.implementation.handler; + +import com.azure.messaging.eventhubs.implementation.ClientConstants; +import org.apache.qpid.proton.amqp.Symbol; +import org.apache.qpid.proton.engine.Connection; +import org.apache.qpid.proton.engine.EndpointState; +import org.apache.qpid.proton.engine.Event; +import org.apache.qpid.proton.engine.impl.TransportInternal; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import reactor.test.StepVerifier; + +import java.util.HashMap; +import java.util.Map; + +import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.FRAMEWORK; +import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.PLATFORM; +import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.PRODUCT; +import static com.azure.messaging.eventhubs.implementation.handler.ConnectionHandler.VERSION; +import static com.azure.messaging.eventhubs.implementation.handler.WebSocketsConnectionHandler.HTTPS_PORT; +import static com.azure.messaging.eventhubs.implementation.handler.WebSocketsConnectionHandler.MAX_FRAME_SIZE; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class WebSocketsConnectionHandlerTest { + private static final String CONNECTION_ID = "some-random-id"; + private static final String HOSTNAME = "hostname-random"; + private WebSocketsConnectionHandler handler; + + @Captor + ArgumentCaptor> argumentCaptor; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + handler = new WebSocketsConnectionHandler(CONNECTION_ID, HOSTNAME); + } + + @After + public void teardown() { + Mockito.framework().clearInlineMocks(); + argumentCaptor = null; + } + + @Test + public void createHandler() { + // Arrange + final Map expected = new HashMap<>(); + expected.put(PRODUCT.toString(), ClientConstants.PRODUCT_NAME); + expected.put(VERSION.toString(), ClientConstants.CURRENT_JAVA_CLIENT_VERSION); + expected.put(PLATFORM.toString(), ClientConstants.PLATFORM_INFO); + expected.put(FRAMEWORK.toString(), ClientConstants.FRAMEWORK_INFO); + + // Assert + Assert.assertEquals(HOSTNAME, handler.getHostname()); + Assert.assertEquals(MAX_FRAME_SIZE, handler.getMaxFrameSize()); + Assert.assertEquals(HTTPS_PORT, handler.getProtocolPort()); + + final Map properties = handler.getConnectionProperties(); + expected.forEach((key, value) -> { + Assert.assertTrue(properties.containsKey(key)); + + final Object actual = properties.get(key); + + Assert.assertTrue(actual instanceof String); + Assert.assertEquals(value, actual); + }); + } + + @Test + public void addsSslLayer() { + // Arrange + final TransportInternal transport = mock(TransportInternal.class); + final Connection connection = mock(Connection.class); + when(connection.getRemoteState()).thenReturn(EndpointState.CLOSED); + + final Event event = mock(Event.class); + when(event.getTransport()).thenReturn(transport); + when(event.getConnection()).thenReturn(connection); + + // Act + handler.onConnectionBound(event); + + StepVerifier.create(handler.getEndpointStates()) + .expectNext(EndpointState.CLOSED) + .then(handler::close) + .verifyComplete(); + + // Assert + verify(transport, times(1)).ssl(any()); + } + + @Test + public void onConnectionInit() { + // Arrange + final String expectedHostname = String.join(":", HOSTNAME, String.valueOf(HTTPS_PORT)); + final Map expectedProperties = new HashMap<>(handler.getConnectionProperties()); + final Connection connection = mock(Connection.class); + final Event event = mock(Event.class); + when(event.getConnection()).thenReturn(connection); + + // Act + handler.onConnectionInit(event); + + // Assert + verify(connection, times(1)).setHostname(expectedHostname); + verify(connection, times(1)).setContainer(CONNECTION_ID); + verify(connection, times(1)).open(); + + verify(connection).setProperties(argumentCaptor.capture()); + Map actualProperties = argumentCaptor.getValue(); + Assert.assertEquals(expectedProperties.size(), actualProperties.size()); + expectedProperties.forEach((key, value) -> { + final Symbol symbol = Symbol.getSymbol(key); + final Object removed = actualProperties.remove(symbol); + Assert.assertNotNull(removed); + + final String expected = String.valueOf(value); + final String actual = String.valueOf(removed); + Assert.assertEquals(expected, actual); + }); + Assert.assertTrue(actualProperties.isEmpty()); + } +} diff --git a/sdk/eventhubs/pom.data.xml b/sdk/eventhubs/pom.data.xml index 72c5ab14aa8b1..bd64c28df3f8b 100644 --- a/sdk/eventhubs/pom.data.xml +++ b/sdk/eventhubs/pom.data.xml @@ -74,9 +74,9 @@ - azure-eventhubs - azure-eventhubs-eph - azure-eventhubs-extensions + microsoft-azure-eventhubs + microsoft-azure-eventhubs-eph + microsoft-azure-eventhubs-extensions diff --git a/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java b/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java index b8b4ad5c4816c..1a43375dc288b 100644 --- a/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java +++ b/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java @@ -16,6 +16,7 @@ import com.azure.core.implementation.annotation.ReturnType; import com.azure.core.implementation.annotation.ServiceClient; import com.azure.core.implementation.annotation.ServiceMethod; +import com.azure.core.util.Context; import com.azure.core.util.logging.ClientLogger; import com.azure.security.keyvault.keys.models.DeletedKey; import com.azure.security.keyvault.keys.models.EcKeyCreateOptions; @@ -36,7 +37,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import static com.azure.core.implementation.util.FluxUtil.monoContext; +import static com.azure.core.implementation.util.FluxUtil.withContext; /** * The KeyAsyncClient provides asynchronous methods to manage {@link Key keys} in the Azure Key Vault. The client @@ -97,11 +98,15 @@ public final class KeyAsyncClient { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> createKey(String name, KeyType keyType) { + return withContext(context -> createKey(name, keyType, context)); + } + + Mono> createKey(String name, KeyType keyType, Context context) { KeyRequestParameters parameters = new KeyRequestParameters().kty(keyType); - return monoContext(context -> service.createKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.createKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Creating key - {}", name)) .doOnSuccess(response -> logger.info("Created key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to create key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to create key - {}", name, error)); } /** @@ -134,17 +139,22 @@ public Mono> createKey(String name, KeyType keyType) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> createKey(KeyCreateOptions keyCreateOptions) { - Objects.requireNonNull(keyCreateOptions, "The key options parameter cannot be null."); + return withContext(context -> createKey(keyCreateOptions, context)); + } + + Mono> createKey(KeyCreateOptions keyCreateOptions, Context context) { + Objects.requireNonNull(keyCreateOptions, "The key create options parameter cannot be null."); KeyRequestParameters parameters = new KeyRequestParameters() - .kty(keyCreateOptions.keyType()) - .keyOps(keyCreateOptions.keyOperations()) - .keyAttributes(new KeyRequestAttributes(keyCreateOptions)); - return monoContext(context -> service.createKey(endpoint, keyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) - .doOnRequest(ignored -> logger.info("Creating key - {}", keyCreateOptions.name())) - .doOnSuccess(response -> logger.info("Created key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to create key - {}", keyCreateOptions.name(), error))); + .kty(keyCreateOptions.keyType()) + .keyOps(keyCreateOptions.keyOperations()) + .keyAttributes(new KeyRequestAttributes(keyCreateOptions)); + return service.createKey(endpoint, keyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) + .doOnRequest(ignored -> logger.info("Creating key - {}", keyCreateOptions.name())) + .doOnSuccess(response -> logger.info("Created key - {}", response.value().name())) + .doOnError(error -> logger.warning("Failed to create key - {}", keyCreateOptions.name(), error)); } + /** * Creates a new Rsa key and stores it in the key vault. The create Rsa key operation can be used to create any Rsa key type in * key vault. If the named key already exists, Azure Key Vault creates a new version of the key. It requires the {@code keys/create} permission. @@ -177,16 +187,20 @@ public Mono> createKey(KeyCreateOptions keyCreateOptions) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> createRsaKey(RsaKeyCreateOptions rsaKeyCreateOptions) { + return withContext(context -> createRsaKey(rsaKeyCreateOptions, context)); + } + + Mono> createRsaKey(RsaKeyCreateOptions rsaKeyCreateOptions, Context context) { Objects.requireNonNull(rsaKeyCreateOptions, "The Rsa key options parameter cannot be null."); KeyRequestParameters parameters = new KeyRequestParameters() .kty(rsaKeyCreateOptions.keyType()) .keySize(rsaKeyCreateOptions.keySize()) .keyOps(rsaKeyCreateOptions.keyOperations()) .keyAttributes(new KeyRequestAttributes(rsaKeyCreateOptions)); - return monoContext(context -> service.createKey(endpoint, rsaKeyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.createKey(endpoint, rsaKeyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Creating Rsa key - {}", rsaKeyCreateOptions.name())) .doOnSuccess(response -> logger.info("Created Rsa key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to create Rsa key - {}", rsaKeyCreateOptions.name(), error))); + .doOnError(error -> logger.warning("Failed to create Rsa key - {}", rsaKeyCreateOptions.name(), error)); } /** @@ -221,16 +235,20 @@ public Mono> createRsaKey(RsaKeyCreateOptions rsaKeyCreateOptions) */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> createEcKey(EcKeyCreateOptions ecKeyCreateOptions) { + return withContext(context -> createEcKey(ecKeyCreateOptions, context)); + } + + Mono> createEcKey(EcKeyCreateOptions ecKeyCreateOptions, Context context) { Objects.requireNonNull(ecKeyCreateOptions, "The Ec key options options cannot be null."); KeyRequestParameters parameters = new KeyRequestParameters() .kty(ecKeyCreateOptions.keyType()) .curve(ecKeyCreateOptions.curve()) .keyOps(ecKeyCreateOptions.keyOperations()) .keyAttributes(new KeyRequestAttributes(ecKeyCreateOptions)); - return monoContext(context -> service.createKey(endpoint, ecKeyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.createKey(endpoint, ecKeyCreateOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Creating Ec key - {}", ecKeyCreateOptions.name())) .doOnSuccess(response -> logger.info("Created Ec key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to create Ec key - {}", ecKeyCreateOptions.name(), error))); + .doOnError(error -> logger.warning("Failed to create Ec key - {}", ecKeyCreateOptions.name(), error)); } /** @@ -252,11 +270,15 @@ public Mono> createEcKey(EcKeyCreateOptions ecKeyCreateOptions) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> importKey(String name, JsonWebKey keyMaterial) { + return withContext(context -> importKey(name, keyMaterial, context)); + } + + Mono> importKey(String name, JsonWebKey keyMaterial, Context context) { KeyImportRequestParameters parameters = new KeyImportRequestParameters().key(keyMaterial); - return monoContext(context -> service.importKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) - .doOnRequest(ignored -> logger.info("Importing key - {}", name)) - .doOnSuccess(response -> logger.info("Imported key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to import key - {}", name, error))); + return service.importKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) + .doOnRequest(ignored -> logger.info("Importing key - {}", name)) + .doOnSuccess(response -> logger.info("Imported key - {}", response.value().name())) + .doOnError(error -> logger.warning("Failed to import key - {}", name, error)); } /** @@ -287,15 +309,19 @@ public Mono> importKey(String name, JsonWebKey keyMaterial) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> importKey(KeyImportOptions keyImportOptions) { + return withContext(context -> importKey(keyImportOptions, context)); + } + + Mono> importKey(KeyImportOptions keyImportOptions, Context context) { Objects.requireNonNull(keyImportOptions, "The key import configuration parameter cannot be null."); KeyImportRequestParameters parameters = new KeyImportRequestParameters() - .key(keyImportOptions.keyMaterial()) - .hsm(keyImportOptions.hsm()) - .keyAttributes(new KeyRequestAttributes(keyImportOptions)); - return monoContext(context -> service.importKey(endpoint, keyImportOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) - .doOnRequest(ignored -> logger.info("Importing key - {}", keyImportOptions.name())) - .doOnSuccess(response -> logger.info("Imported key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to import key - {}", keyImportOptions.name(), error))); + .key(keyImportOptions.keyMaterial()) + .hsm(keyImportOptions.hsm()) + .keyAttributes(new KeyRequestAttributes(keyImportOptions)); + return service.importKey(endpoint, keyImportOptions.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) + .doOnRequest(ignored -> logger.info("Importing key - {}", keyImportOptions.name())) + .doOnSuccess(response -> logger.info("Imported key - {}", response.value().name())) + .doOnError(error -> logger.warning("Failed to import key - {}", keyImportOptions.name(), error)); } /** @@ -322,10 +348,14 @@ public Mono> getKey(String name, String version) { if (version == null) { return getKey(name); } - return monoContext(context -> service.getKey(endpoint, name, version, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> getKey(name, version, context)); + } + + Mono> getKey(String name, String version, Context context) { + return service.getKey(endpoint, name, version, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Retrieving key - {}", name)) .doOnSuccess(response -> logger.info("Retrieved key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to get key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to get key - {}", name, error)); } /** @@ -348,13 +378,9 @@ public Mono> getKey(String name, String version) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getKey(String name) { - return monoContext(context -> getKey(name, "") - .doOnRequest(ignored -> logger.info("Retrieving key - {}", name)) - .doOnSuccess(response -> logger.info("Retrieved key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to get key - {}", name, error))); + return getKey(name, ""); } - /** * Get public part of the key which represents {@link KeyBase keyBase} from the key vault. The get key operation is applicable * to all key types and it requires the {@code keys/get} permission. @@ -379,7 +405,6 @@ public Mono> getKey(KeyBase keyBase) { if (keyBase.version() == null) { return getKey(keyBase.name()); } - return getKey(keyBase.name(), keyBase.version()); } @@ -409,17 +434,21 @@ public Mono> getKey(KeyBase keyBase) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> updateKey(KeyBase key) { + return withContext(context -> updateKey(key, context)); + } + + Mono> updateKey(KeyBase key, Context context) { Objects.requireNonNull(key, "The key input parameter cannot be null."); KeyRequestParameters parameters = new KeyRequestParameters() - .tags(key.tags()) - .keyAttributes(new KeyRequestAttributes(key)); - - return monoContext(context -> service.updateKey(endpoint, key.name(), key.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) - .doOnRequest(ignored -> logger.info("Updating key - {}", key.name())) - .doOnSuccess(response -> logger.info("Updated key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to update key - {}", key.name(), error))); + .tags(key.tags()) + .keyAttributes(new KeyRequestAttributes(key)); + return service.updateKey(endpoint, key.name(), key.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) + .doOnRequest(ignored -> logger.info("Updating key - {}", key.name())) + .doOnSuccess(response -> logger.info("Updated key - {}", response.value().name())) + .doOnError(error -> logger.warning("Failed to update key - {}", key.name(), error)); } + /** * Updates the attributes and key operations associated with the specified key, but not the cryptographic key material of the specified key in the key vault. The update * operation changes specified attributes of an existing stored key and attributes that are not specified in the request are left unchanged. @@ -447,18 +476,22 @@ public Mono> updateKey(KeyBase key) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> updateKey(KeyBase key, KeyOperation... keyOperations) { + return withContext(context -> updateKey(key, context, keyOperations)); + } + + Mono> updateKey(KeyBase key, Context context, KeyOperation... keyOperations) { Objects.requireNonNull(key, "The key input parameter cannot be null."); KeyRequestParameters parameters = new KeyRequestParameters() - .tags(key.tags()) - .keyOps(Arrays.asList(keyOperations)) - .keyAttributes(new KeyRequestAttributes(key)); - - return monoContext(context -> service.updateKey(endpoint, key.name(), key.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) - .doOnRequest(ignored -> logger.info("Updating key - {}", key.name())) - .doOnSuccess(response -> logger.info("Updated key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to update key - {}", key.name(), error))); + .tags(key.tags()) + .keyOps(Arrays.asList(keyOperations)) + .keyAttributes(new KeyRequestAttributes(key)); + return service.updateKey(endpoint, key.name(), key.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) + .doOnRequest(ignored -> logger.info("Updating key - {}", key.name())) + .doOnSuccess(response -> logger.info("Updated key - {}", response.value().name())) + .doOnError(error -> logger.warning("Failed to update key - {}", key.name(), error)); } + /** * Deletes a key of any type from the key vault. If soft-delete is enabled on the key vault then the key is placed in the deleted state * and requires to be purged for permanent deletion else the key is permanently deleted. The delete operation applies to any key stored @@ -481,10 +514,14 @@ public Mono> updateKey(KeyBase key, KeyOperation... keyOperations) */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> deleteKey(String name) { - return monoContext(context -> service.deleteKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> deleteKey(name, context)); + } + + Mono> deleteKey(String name, Context context) { + return service.deleteKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Deleting key - {}", name)) .doOnSuccess(response -> logger.info("Deleted key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to delete key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to delete key - {}", name, error)); } /** @@ -507,10 +544,14 @@ public Mono> deleteKey(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getDeletedKey(String name) { - return monoContext(context -> service.getDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> getDeletedKey(name, context)); + } + + Mono> getDeletedKey(String name, Context context) { + return service.getDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Retrieving deleted key - {}", name)) .doOnSuccess(response -> logger.info("Retrieved deleted key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to get key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to get key - {}", name, error)); } /** @@ -533,10 +574,14 @@ public Mono> getDeletedKey(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono purgeDeletedKey(String name) { - return monoContext(context -> service.purgeDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> purgeDeletedKey(name, context)); + } + + Mono purgeDeletedKey(String name, Context context) { + return service.purgeDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Purging deleted key - {}", name)) .doOnSuccess(response -> logger.info("Purged deleted key - {}", name)) - .doOnError(error -> logger.warning("Failed to purge deleted key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to purge deleted key - {}", name, error)); } /** @@ -560,10 +605,14 @@ public Mono purgeDeletedKey(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recoverDeletedKey(String name) { - return monoContext(context -> service.recoverDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> recoverDeletedKey(name, context)); + } + + Mono> recoverDeletedKey(String name, Context context) { + return service.recoverDeletedKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Recovering deleted key - {}", name)) .doOnSuccess(response -> logger.info("Recovered deleted key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to recover deleted key - {}", name, error))); + .doOnError(error -> logger.warning("Failed to recover deleted key - {}", name, error)); } /** @@ -591,12 +640,16 @@ public Mono> recoverDeletedKey(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> backupKey(String name) { - return monoContext(context -> service.backupKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> backupKey(name, context)); + } + + Mono> backupKey(String name, Context context) { + return service.backupKey(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Backing up key - {}", name)) .doOnSuccess(response -> logger.info("Backed up key - {}", name)) .doOnError(error -> logger.warning("Failed to backup key - {}", name, error)) .flatMap(base64URLResponse -> Mono.just(new SimpleResponse(base64URLResponse.request(), - base64URLResponse.statusCode(), base64URLResponse.headers(), base64URLResponse.value().value())))); + base64URLResponse.statusCode(), base64URLResponse.headers(), base64URLResponse.value().value()))); } /** @@ -623,11 +676,15 @@ public Mono> backupKey(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> restoreKey(byte[] backup) { + return withContext(context -> restoreKey(backup, context)); + } + + Mono> restoreKey(byte[] backup, Context context) { KeyRestoreRequestParameters parameters = new KeyRestoreRequestParameters().keyBackup(backup); - return monoContext(context -> service.restoreKey(endpoint, API_VERSION, parameters, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return service.restoreKey(endpoint, API_VERSION, parameters, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Attempting to restore key")) .doOnSuccess(response -> logger.info("Restored Key - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to restore key - {}", error))); + .doOnError(error -> logger.warning("Failed to restore key - {}", error)); } /** @@ -648,8 +705,14 @@ public Mono> restoreKey(byte[] backup) { @ServiceMethod(returns = ReturnType.COLLECTION) public PagedFlux listKeys() { return new PagedFlux<>( - () -> monoContext(context -> listKeysFirstPage()), - continuationToken -> monoContext(context -> listKeysNextPage(continuationToken))); + () -> withContext(context -> listKeysFirstPage(context)), + continuationToken -> withContext(context -> listKeysNextPage(continuationToken, context))); + } + + PagedFlux listKeys(Context context) { + return new PagedFlux<>( + () -> listKeysFirstPage(context), + continuationToken -> listKeysNextPage(continuationToken, context)); } /* @@ -659,8 +722,8 @@ public PagedFlux listKeys() { * @param continuationToken The {@link PagedResponse#nextLink()} from a previous, successful call to one of the listKeys operations. * @return A {@link Mono} of {@link PagedResponse} from the next page of results. */ - private Mono> listKeysNextPage(String continuationToken) { - return service.getKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listKeysNextPage(String continuationToken, Context context) { + return service.getKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing next keys page - Page {} ", continuationToken)) .doOnSuccess(response -> logger.info("Listed next keys page - Page {} ", continuationToken)) .doOnError(error -> logger.warning("Failed to list next keys page - Page {} ", continuationToken, error)); @@ -669,8 +732,8 @@ private Mono> listKeysNextPage(String continuationToken) /* * Calls the service and retrieve first page result. It makes one call and retrieve {@code DEFAULT_MAX_PAGE_RESULTS} values. */ - private Mono> listKeysFirstPage() { - return service.getKeys(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listKeysFirstPage(Context context) { + return service.getKeys(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing keys")) .doOnSuccess(response -> logger.info("Listed keys")) .doOnError(error -> logger.warning("Failed to list keys", error)); @@ -694,8 +757,14 @@ private Mono> listKeysFirstPage() { @ServiceMethod(returns = ReturnType.COLLECTION) public PagedFlux listDeletedKeys() { return new PagedFlux<>( - () -> monoContext(context -> listDeletedKeysFirstPage()), - continuationToken -> monoContext(context -> listDeletedKeysNextPage(continuationToken))); + () -> withContext(context -> listDeletedKeysFirstPage(context)), + continuationToken -> withContext(context -> listDeletedKeysNextPage(continuationToken, context))); + } + + PagedFlux listDeletedKeys(Context context) { + return new PagedFlux<>( + () -> listDeletedKeysFirstPage(context), + continuationToken -> listDeletedKeysNextPage(continuationToken, context)); } /* @@ -705,8 +774,8 @@ public PagedFlux listDeletedKeys() { * @param continuationToken The {@link PagedResponse#nextLink()} from a previous, successful call to one of the list operations. * @return A {@link Mono} of {@link PagedResponse} from the next page of results. */ - private Mono> listDeletedKeysNextPage(String continuationToken) { - return service.getDeletedKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listDeletedKeysNextPage(String continuationToken, Context context) { + return service.getDeletedKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing next deleted keys page - Page {} ", continuationToken)) .doOnSuccess(response -> logger.info("Listed next deleted keys page - Page {} ", continuationToken)) .doOnError(error -> logger.warning("Failed to list next deleted keys page - Page {} ", continuationToken, error)); @@ -715,8 +784,8 @@ private Mono> listDeletedKeysNextPage(String continuat /* * Calls the service and retrieve first page result. It makes one call and retrieve {@code DEFAULT_MAX_PAGE_RESULTS} values. */ - private Mono> listDeletedKeysFirstPage() { - return service.getDeletedKeys(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listDeletedKeysFirstPage(Context context) { + return service.getDeletedKeys(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing deleted keys")) .doOnSuccess(response -> logger.info("Listed deleted keys")) .doOnError(error -> logger.warning("Failed to list deleted keys", error)); @@ -744,12 +813,18 @@ private Mono> listDeletedKeysFirstPage() { @ServiceMethod(returns = ReturnType.COLLECTION) public PagedFlux listKeyVersions(String name) { return new PagedFlux<>( - () -> monoContext(context -> listKeyVersionsFirstPage(name)), - continuationToken -> monoContext(context -> listKeyVersionsNextPage(continuationToken))); + () -> withContext(context -> listKeyVersionsFirstPage(name, context)), + continuationToken -> withContext(context -> listKeyVersionsNextPage(continuationToken, context))); + } + + PagedFlux listKeyVersions(String name, Context context) { + return new PagedFlux<>( + () -> listKeyVersionsFirstPage(name, context), + continuationToken -> listKeyVersionsNextPage(continuationToken, context)); } - private Mono> listKeyVersionsFirstPage(String name) { - return service.getKeyVersions(endpoint, name, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listKeyVersionsFirstPage(String name, Context context) { + return service.getKeyVersions(endpoint, name, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing key versions - {}", name)) .doOnSuccess(response -> logger.info("Listed key versions - {}", name)) .doOnError(error -> logger.warning(String.format("Failed to list key versions - {}", name), error)); @@ -762,8 +837,8 @@ private Mono> listKeyVersionsFirstPage(String name) { * @param continuationToken The {@link PagedResponse#nextLink()} from a previous, successful call to one of the listKeys operations. * @return A {@link Mono} of {@link PagedResponse} from the next page of results. */ - private Mono> listKeyVersionsNextPage(String continuationToken) { - return service.getKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + private Mono> listKeyVersionsNextPage(String continuationToken, Context context) { + return service.getKeys(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Listing next key versions page - Page {} ", continuationToken)) .doOnSuccess(response -> logger.info("Listed next key versions page - Page {} ", continuationToken)) .doOnError(error -> logger.warning("Failed to list next key versions page - Page {} ", continuationToken, error)); diff --git a/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyService.java b/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyService.java index 6cf9dca0b5f80..db392baeedfce 100644 --- a/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyService.java +++ b/sdk/keyvault/azure-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyService.java @@ -23,6 +23,7 @@ import com.azure.core.http.rest.PagedResponse; import com.azure.core.http.rest.Response; import com.azure.core.http.rest.VoidResponse; +import com.azure.core.util.Context; import com.azure.security.keyvault.keys.implementation.DeletedKeyPage; import com.azure.security.keyvault.keys.implementation.KeyBasePage; import com.azure.security.keyvault.keys.models.DeletedKey; @@ -49,7 +50,8 @@ Mono> createKey(@HostParam("url") String url, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, @BodyParam("body") KeyRequestParameters parameters, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("keys/{key-name}/{key-version}") @ExpectedResponses({200}) @@ -61,7 +63,8 @@ Mono> getKey(@HostParam("url") String url, @PathParam("key-version") String keyVersion, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Post("keys/{key-name}") @ExpectedResponses({200}) @@ -71,7 +74,8 @@ Mono> importKey(@HostParam("url") String url, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, @BodyParam("body") KeyImportRequestParameters parameters, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Delete("keys/{key-name}") @@ -82,7 +86,8 @@ Mono> deleteKey(@HostParam("url") String url, @PathParam("key-name") String keyName, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Patch("keys/{key-name}/{key-version}") @ExpectedResponses({200}) @@ -93,7 +98,8 @@ Mono> updateKey(@HostParam("url") String url, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, @BodyParam("body") KeyRequestParameters parameters, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("keys/{key-name}/versions") @ExpectedResponses({200}) @@ -104,7 +110,8 @@ Mono> getKeyVersions(@HostParam("url") String url, @QueryParam("maxresults") Integer maxresults, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Post("keys/{key-name}/backup") @ExpectedResponses({200}) @@ -114,7 +121,8 @@ Mono> backupKey(@HostParam("url") String url, @PathParam("key-name") String keyName, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Post("keys/restore") @@ -125,7 +133,8 @@ Mono> restoreKey(@HostParam("url") String url, @QueryParam("api-version") String apiVersion, @BodyParam("body") KeyRestoreRequestParameters parameters, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("keys") @@ -136,7 +145,8 @@ Mono> getKeys(@HostParam("url") String url, @QueryParam("maxresults") Integer maxresults, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("{nextUrl}") @@ -146,7 +156,8 @@ Mono> getKeys(@HostParam("url") String url, Mono> getKeys(@HostParam("url") String url, @PathParam(value = "nextUrl", encoded = true) String nextUrl, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("deletedkeys") @@ -157,7 +168,8 @@ Mono> getDeletedKeys(@HostParam("url") String url, @QueryParam("maxresults") Integer maxresults, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("{nextUrl}") @ExpectedResponses({200}) @@ -166,7 +178,8 @@ Mono> getDeletedKeys(@HostParam("url") String url, Mono> getDeletedKeys(@HostParam("url") String url, @PathParam(value = "nextUrl", encoded = true) String nextUrl, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Get("deletedkeys/{key-name}") @ExpectedResponses({200}) @@ -176,7 +189,8 @@ Mono> getDeletedKey(@HostParam("url") String url, @PathParam("key-name") String keyName, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Delete("deletedkeys/{key-name}") @ExpectedResponses({204}) @@ -186,7 +200,8 @@ Mono purgeDeletedKey(@HostParam("url") String url, @PathParam("key-name") String keyName, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); @Post("deletedkeys/{key-name}/recover") @@ -197,5 +212,6 @@ Mono> recoverDeletedKey(@HostParam("url") String url, @PathParam("key-name") String keyName, @QueryParam("api-version") String apiVersion, @HeaderParam("accept-language") String acceptLanguage, - @HeaderParam("Content-Type") String type); + @HeaderParam("Content-Type") String type, + Context context); } diff --git a/sdk/keyvault/azure-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java b/sdk/keyvault/azure-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java index dd0b711996b88..4e21a1d56a9d4 100644 --- a/sdk/keyvault/azure-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java +++ b/sdk/keyvault/azure-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java @@ -85,7 +85,7 @@ public void setKeyNullType() { * Verifies that an exception is thrown when null key object is passed for creation. */ public void setKeyNull() { - assertRunnableThrowsException(() -> client.createKey(null), NullPointerException.class); + assertRunnableThrowsException(() -> client.createKey(null).block(), NullPointerException.class); } /** diff --git a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java index 8adfceac47ffe..836e32d0ebfc2 100644 --- a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java +++ b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java @@ -28,7 +28,7 @@ import com.azure.core.exception.ResourceModifiedException; import com.azure.core.exception.HttpRequestException; -import static com.azure.core.implementation.util.FluxUtil.monoContext; +import static com.azure.core.implementation.util.FluxUtil.withContext; /** * The SecretAsyncClient provides asynchronous methods to manage {@link Secret secrets} in the Azure Key Vault. The client @@ -93,6 +93,10 @@ public final class SecretAsyncClient { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> setSecret(Secret secret) { + return withContext(context -> setSecret(secret, context)); + } + + Mono> setSecret(Secret secret, Context context) { Objects.requireNonNull(secret, "The Secret input parameter cannot be null."); SecretRequestParameters parameters = new SecretRequestParameters() .value(secret.value()) @@ -100,19 +104,20 @@ public Mono> setSecret(Secret secret) { .contentType(secret.contentType()) .secretAttributes(new SecretRequestAttributes(secret)); - return monoContext(context -> service.setSecret(endpoint, secret.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.setSecret(endpoint, secret.name(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Setting secret - {}", secret.name())) .doOnSuccess(response -> logger.info("Set secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to set secret - {}", secret.name(), error))); + .doOnError(error -> logger.warning("Failed to set secret - {}", secret.name(), error)); } /** - * The set operation adds a secret to the key vault. If the named secret already exists, Azure Key Vault creates a new version of that secret. - * This operation requires the {@code secrets/set} permission. + * The set operation adds a secret to the key vault. If the named secret already exists, Azure Key + * Vault creates a new version of that secret. This operation requires the {@code secrets/set} + * permission. * *

Code Samples

- *

Creates a new secret in the key vault. Subscribes to the call asynchronously and prints out the newly - * created secret details when a response is received.

+ *

Creates a new secret in the key vault. Subscribes to the call asynchronously and prints out + * the newly created secret details when a response is received.

*
      * secretAsyncClient.setSecret("secretName", "secretValue").subscribe(secretResponse ->
      *   System.out.printf("Secret is created with name %s and value %s \n", secretResponse.value().name(), secretResponse.value().value()));
@@ -120,25 +125,32 @@ public Mono> setSecret(Secret secret) {
      *
      * @param name The name of the secret. It is required and cannot be null.
      * @param value The value of the secret. It is required and cannot be null.
+     * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value}
+     * contains the {@link Secret created secret}.
      * @throws ResourceModifiedException if invalid {@code name} or {@code value} are specified.
      * @throws HttpRequestException if {@code name} or {@code value} is empty string.
-     * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} contains the {@link Secret created secret}.
      */
     @ServiceMethod(returns = ReturnType.SINGLE)
     public Mono> setSecret(String name, String value) {
+        return withContext(context -> setSecret(name, value, context));
+    }
+
+    Mono> setSecret(String name, String value, Context context) {
         SecretRequestParameters parameters = new SecretRequestParameters().value(value);
-        return monoContext(context -> service.setSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE)
-                .doOnRequest(ignored -> logger.info("Setting secret - {}", name))
-                .doOnSuccess(response -> logger.info("Set secret - {}", response.value().name()))
-                .doOnError(error -> logger.warning("Failed to set secret - {}", name, error)));
+        return service.setSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context)
+            .doOnRequest(ignored -> logger.info("Setting secret - {}", name))
+            .doOnSuccess(response -> logger.info("Set secret - {}", response.value().name()))
+            .doOnError(error -> logger.warning("Failed to set secret - {}", name, error));
     }
 
     /**
-     * Get the specified secret with specified version from the key vault. The get operation is applicable to any secret stored in Azure Key Vault.
-     * This operation requires the {@code secrets/get} permission.
+     * Get the specified secret with specified version from the key vault. The get operation is
+     * applicable to any secret stored in Azure Key Vault. This operation requires the {@code
+     * secrets/get} permission.
      *
      * 

Code Samples

- *

Gets a specific version of the secret in the key vault. Subscribes to the call asynchronously and prints out the + *

Gets a specific version of the secret in the key vault. Subscribes to the call + * asynchronously and prints out the * returned secret details when a response is received.

*
      * String secretVersion = "6A385B124DEF4096AF1361A85B16C204";
@@ -148,40 +160,55 @@ public Mono> setSecret(String name, String value) {
      * 
* * @param name The name of the secret, cannot be null - * @param version The version of the secret to retrieve. If this is an empty String or null, this call is equivalent to calling {@link #getSecret(String)}, with the latest version being retrieved. - * @throws ResourceNotFoundException when a secret with {@code name} and {@code version} doesn't exist in the key vault. + * @param version The version of the secret to retrieve. If this is an empty String or null, this + * call is equivalent to calling {@link #getSecret(String)}, with the latest version being + * retrieved. + * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} + * contains the requested {@link Secret secret}. + * @throws ResourceNotFoundException when a secret with {@code name} and {@code version} doesn't + * exist in the key vault. * @throws HttpRequestException if {@code name} name} or {@code version} is empty string. - * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} contains the requested {@link Secret secret}. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getSecret(String name, String version) { + return withContext(context -> getSecret(name, version, context)); + } + + Mono> getSecret(String name, String version, Context context) { if (version == null) { return getSecret(name); } - return monoContext(context -> service.getSecret(endpoint, name, version, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return service.getSecret(endpoint, name, version, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignoredValue -> logger.info("Retrieving secret - {}", name)) .doOnSuccess(response -> logger.info("Retrieved secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to get secret - {}", name, error))); + .doOnError(error -> logger.warning("Failed to get secret - {}", name, error)); } /** - * Get the secret which represents {@link SecretBase secretBase} from the key vault. The get operation is applicable to any - * secret stored in Azure Key Vault. This operation requires the {@code secrets/get} permission. - * - *

The list operations {@link SecretAsyncClient#listSecrets()} and {@link SecretAsyncClient#listSecretVersions(String)} return - * the {@link Flux} containing {@link SecretBase base secret} as output excluding the include the value of the secret. - * This operation can then be used to get the full secret with its value from {@code secretBase}.

+ * Get the secret which represents {@link SecretBase secretBase} from the key vault. The get + * operation is applicable to any secret stored in Azure Key Vault. This operation requires the + * {@code secrets/get} permission. + * + *

The list operations {@link SecretAsyncClient#listSecrets()} and {@link + * SecretAsyncClient#listSecretVersions(String)} return + * the {@link Flux} containing {@link SecretBase base secret} as output. This operation can then be used to get + * the full secret with its value from {@code secretBase}.

+ *

Code Samples

*
      * secretAsyncClient.listSecrets().subscribe(secretBase ->
      *     client.getSecret(secretBase).subscribe(secretResponse ->
      *       System.out.printf("Secret with name %s and value %s \n", secretResponse.value().name(), secretResponse.value().value())));
      * 
* - * @param secretBase The {@link SecretBase base secret} secret base holding attributes of the secret being requested. - * @throws ResourceNotFoundException when a secret with {@link SecretBase#name() name} and {@link SecretBase#version() version} doesn't exist in the key vault. - * @throws HttpRequestException if {@link SecretBase#name()} name} or {@link SecretBase#version() version} is empty string. - * @return A {@link Response} whose {@link Response#value() value} contains the requested {@link Secret secret}. + * @param secretBase The {@link SecretBase base secret} secret base holding attributes of the + * secret being requested. + * @return A {@link Response} whose {@link Response#value() value} contains the requested {@link + * Secret secret}. + * @throws ResourceNotFoundException when a secret with {@link SecretBase#name() name} and {@link + * SecretBase#version() version} doesn't exist in the key vault. + * @throws HttpRequestException if {@link SecretBase#name()} name} or {@link SecretBase#version() + * version} is empty string. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getSecret(SecretBase secretBase) { @@ -191,6 +218,14 @@ public Mono> getSecret(SecretBase secretBase) { } return getSecret(secretBase.name(), secretBase.version()); } + + Mono> getSecret(SecretBase secretBase, Context context) { + Objects.requireNonNull(secretBase, "The Secret Base parameter cannot be null."); + if (secretBase.version() == null) { + return getSecret(secretBase.name(), context); + } + return getSecret(secretBase.name(), secretBase.version(), context); + } /** * Get the latest version of the specified secret from the key vault. The get operation is applicable to any secret stored in Azure Key Vault. * This operation requires the {@code secrets/get} permission. @@ -214,6 +249,10 @@ public Mono> getSecret(String name) { return getSecret(name, ""); } + Mono> getSecret(String name, Context context) { + return getSecret(name, "", context); + } + /** * Updates the attributes associated with the specified secret, but not the value of the specified secret in the key vault. The update * operation changes specified attributes of an existing stored secret and attributes that are not specified in the request are left unchanged. @@ -241,16 +280,20 @@ public Mono> getSecret(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> updateSecret(SecretBase secret) { + return withContext(context -> updateSecret(secret, context)); + } + + Mono> updateSecret(SecretBase secret, Context context) { Objects.requireNonNull(secret, "The secret input parameter cannot be null."); SecretRequestParameters parameters = new SecretRequestParameters() .tags(secret.tags()) .contentType(secret.contentType()) .secretAttributes(new SecretRequestAttributes(secret)); - return monoContext(context -> service.updateSecret(endpoint, secret.name(), secret.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.updateSecret(endpoint, secret.name(), secret.version(), API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Updating secret - {}", secret.name())) .doOnSuccess(response -> logger.info("Updated secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to update secret - {}", secret.name(), error))); + .doOnError(error -> logger.warning("Failed to update secret - {}", secret.name(), error)); } /** @@ -273,18 +316,23 @@ public Mono> updateSecret(SecretBase secret) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> deleteSecret(String name) { - return monoContext(context -> service.deleteSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> deleteSecret(name, context)); + } + + Mono> deleteSecret(String name, Context context) { + return service.deleteSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Deleting secret - {}", name)) .doOnSuccess(response -> logger.info("Deleted secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to delete secret - {}", name, error))); + .doOnError(error -> logger.warning("Failed to delete secret - {}", name, error)); } /** - * The get deleted secret operation returns the secrets that have been deleted for a vault enabled for soft-delete. - * This operation requires the {@code secrets/list} permission. + * The get deleted secret operation returns the secrets that have been deleted for a vault enabled + * for soft-delete. This operation requires the {@code secrets/list} permission. * *

Code Samples

- *

Gets the deleted secret from the key vault enabled for soft-delete. Subscribes to the call asynchronously and prints out the + *

Gets the deleted secret from the key vault enabled for soft-delete. Subscribes to the call + * asynchronously and prints out the * deleted secret details when a response is received.

*
      * //Assuming secret is deleted on a soft-delete enabled vault.
@@ -293,24 +341,32 @@ public Mono> deleteSecret(String name) {
      * 
* * @param name The name of the deleted secret. - * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. + * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} + * contains the {@link DeletedSecret deleted secret}. + * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key + * vault. * @throws HttpRequestException when a secret with {@code name} is empty string. - * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} contains the {@link DeletedSecret deleted secret}. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getDeletedSecret(String name) { - return monoContext(context -> service.getDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> getDeletedSecret(name, context)); + } + + Mono> getDeletedSecret(String name, Context context) { + return service.getDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Retrieving deleted secret - {}", name)) .doOnSuccess(response -> logger.info("Retrieved deleted secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to retrieve deleted secret - {}", name, error))); + .doOnError(error -> logger.warning("Failed to retrieve deleted secret - {}", name, error)); } /** - * The purge deleted secret operation removes the secret permanently, without the possibility of recovery. - * This operation can only be enabled on a soft-delete enabled vault. This operation requires the {@code secrets/purge} permission. + * The purge deleted secret operation removes the secret permanently, without the possibility of + * recovery. This operation can only be enabled on a soft-delete enabled vault. This operation + * requires the {@code secrets/purge} permission. * *

Code Samples

- *

Purges the deleted secret from the key vault enabled for soft-delete. Subscribes to the call asynchronously and prints out the + *

Purges the deleted secret from the key vault enabled for soft-delete. Subscribes to the call + * asynchronously and prints out the * status code from the server response when a response is received.

*
      * //Assuming secret is deleted on a soft-delete enabled vault.
@@ -319,16 +375,21 @@ public Mono> getDeletedSecret(String name) {
      * 
* * @param name The name of the secret. - * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. - * @throws HttpRequestException when a secret with {@code name} is empty string. * @return A {@link Mono} containing a {@link VoidResponse}. + * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key + * vault. + * @throws HttpRequestException when a secret with {@code name} is empty string. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono purgeDeletedSecret(String name) { - return monoContext(context -> service.purgeDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> purgeDeletedSecret(name, context)); + } + + Mono purgeDeletedSecret(String name, Context context) { + return service.purgeDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Purging deleted secret - {}", name)) .doOnSuccess(response -> logger.info("Purged deleted secret - {}", name)) - .doOnError(error -> logger.warning("Failed to purge deleted secret - {}", name, error))); + .doOnError(error -> logger.warning("Failed to purge deleted secret - {}", name, error)); } /** @@ -351,18 +412,23 @@ public Mono purgeDeletedSecret(String name) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recoverDeletedSecret(String name) { - return monoContext(context -> service.recoverDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> recoverDeletedSecret(name, context)); + } + + Mono> recoverDeletedSecret(String name, Context context) { + return service.recoverDeletedSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Recovering deleted secret - {}", name)) .doOnSuccess(response -> logger.info("Recovered deleted secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to recover deleted secret - {}", name, error))); + .doOnError(error -> logger.warning("Failed to recover deleted secret - {}", name, error)); } /** - * Requests a backup of the specified secret be downloaded to the client. All versions of the secret will be downloaded. - * This operation requires the {@code secrets/backup} permission. + * Requests a backup of the specified secret be downloaded to the client. All versions of the + * secret will be downloaded. This operation requires the {@code secrets/backup} permission. * *

Code Samples

- *

Backs up the secret from the key vault. Subscribes to the call asynchronously and prints out the + *

Backs up the secret from the key vault. Subscribes to the call asynchronously and prints out + * the * length of the secret's backup byte array returned in the response.

*
      * secretAsyncClient.backupSecret("secretName").subscribe(secretBackupResponse ->
@@ -370,25 +436,33 @@ public Mono> recoverDeletedSecret(String name) {
      * 
* * @param name The name of the secret. - * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. + * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} + * contains the backed up secret blob. + * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key + * vault. * @throws HttpRequestException when a secret with {@code name} is empty string. - * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} contains the backed up secret blob. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> backupSecret(String name) { - return monoContext(context -> service.backupSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE) + return withContext(context -> backupSecret(name, context)); + } + + Mono> backupSecret(String name, Context context) { + return service.backupSecret(endpoint, name, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Backing up secret - {}", name)) .doOnSuccess(response -> logger.info("Backed up secret - {}", name)) .doOnError(error -> logger.warning("Failed to back up secret - {}", name, error)) .flatMap(base64URLResponse -> Mono.just(new SimpleResponse(base64URLResponse.request(), - base64URLResponse.statusCode(), base64URLResponse.headers(), base64URLResponse.value().value())))); + base64URLResponse.statusCode(), base64URLResponse.headers(), base64URLResponse.value().value()))); } /** - * Restores a backed up secret, and all its versions, to a vault. This operation requires the {@code secrets/restore} permission. + * Restores a backed up secret, and all its versions, to a vault. This operation requires the + * {@code secrets/restore} permission. * *

Code Samples

- *

Restores the secret in the key vault from its backup. Subscribes to the call asynchronously and prints out the + *

Restores the secret in the key vault from its backup. Subscribes to the call asynchronously + * and prints out the * restored secret details when a response is received.

*
      * //Pass the Secret Backup Byte array to the restore operation.
@@ -397,16 +471,21 @@ public Mono> backupSecret(String name) {
      * 
* * @param backup The backup blob associated with the secret. + * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} + * contains the {@link Secret restored secret}. * @throws ResourceModifiedException when {@code backup} blob is malformed. - * @return A {@link Mono} containing a {@link Response} whose {@link Response#value() value} contains the {@link Secret restored secret}. */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> restoreSecret(byte[] backup) { + return withContext(context -> restoreSecret(backup, context)); + } + + Mono> restoreSecret(byte[] backup, Context context) { SecretRestoreRequestParameters parameters = new SecretRestoreRequestParameters().secretBackup(backup); - return monoContext(context -> service.restoreSecret(endpoint, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE) + return service.restoreSecret(endpoint, API_VERSION, ACCEPT_LANGUAGE, parameters, CONTENT_TYPE_HEADER_VALUE, context) .doOnRequest(ignored -> logger.info("Attempting to restore secret")) .doOnSuccess(response -> logger.info("Restored secret - {}", response.value().name())) - .doOnError(error -> logger.warning("Failed to restore secret", error))); + .doOnError(error -> logger.warning("Failed to restore secret", error)); } /** @@ -414,6 +493,7 @@ public Mono> restoreSecret(byte[] backup) { * in the flux is represented by {@link SecretBase} as only the base secret identifier and its attributes are * provided in the response. The secret values and individual secret versions are not listed in the response. This operation requires the {@code secrets/list} permission. * + *

Code Samples

*

It is possible to get full Secrets with values from this information. Convert the {@link Flux} containing {@link SecretBase base secret} to * {@link Flux} containing {@link Secret secret} using {@link SecretAsyncClient#getSecret(SecretBase baseSecret)} within {@link Flux#flatMap(Function)}.

*
@@ -427,8 +507,14 @@ public Mono> restoreSecret(byte[] backup) {
     @ServiceMethod(returns = ReturnType.COLLECTION)
     public PagedFlux listSecrets() {
         return new PagedFlux<>(
-            () -> monoContext(context -> listSecretsFirstPage()),
-            continuationToken -> monoContext(context -> listSecretsNextPage(continuationToken)));
+            () -> withContext(context -> listSecretsFirstPage(context)),
+            continuationToken -> withContext(context -> listSecretsNextPage(continuationToken, context)));
+    }
+
+    PagedFlux listSecrets(Context context) {
+        return new PagedFlux<>(
+            () -> listSecretsFirstPage(context),
+            continuationToken -> listSecretsNextPage(continuationToken, context));
     }
 
     /*
@@ -438,8 +524,8 @@ public PagedFlux listSecrets() {
      * @param continuationToken The {@link PagedResponse#nextLink()} from a previous, successful call to one of the list operations.
      * @return A {@link Mono} of {@link PagedResponse} from the next page of results.
      */
-    private Mono> listSecretsNextPage(String continuationToken) {
-        return service.getSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+    private Mono> listSecretsNextPage(String continuationToken, Context context) {
+        return service.getSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignoredValue -> logger.info("Retrieving the next secrets page - Page {}", continuationToken))
             .doOnSuccess(response -> logger.info("Retrieved the next secrets page - Page {}", continuationToken))
             .doOnError(error -> logger.warning("Failed to retrieve the next secrets page - Page {}", continuationToken, error));
@@ -448,8 +534,8 @@ private Mono> listSecretsNextPage(String continuationT
     /*
      * Calls the service and retrieve first page result. It makes one call and retrieve {@code DEFAULT_MAX_PAGE_RESULTS} values.
      */
-    private Mono> listSecretsFirstPage() {
-        return service.getSecrets(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+    private Mono> listSecretsFirstPage(Context context) {
+        return service.getSecrets(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignored -> logger.info("Listing secrets"))
             .doOnSuccess(response -> logger.info("Listed secrets"))
             .doOnError(error -> logger.warning("Failed to list secrets", error));
@@ -472,10 +558,17 @@ private Mono> listSecretsFirstPage() {
     @ServiceMethod(returns = ReturnType.COLLECTION)
     public PagedFlux listDeletedSecrets() {
         return new PagedFlux<>(
-            () -> monoContext(context -> listDeletedSecretsFirstPage()),
-            continuationToken -> monoContext(context -> listDeletedSecretsNextPage(continuationToken, Context.NONE)));
+            () -> withContext(context -> listDeletedSecretsFirstPage(context)),
+            continuationToken -> withContext(context -> listDeletedSecretsNextPage(continuationToken, context)));
     }
 
+    PagedFlux listDeletedSecrets(Context context) {
+        return new PagedFlux<>(
+            () -> listDeletedSecretsFirstPage(context),
+            continuationToken -> listDeletedSecretsNextPage(continuationToken, context));
+    }
+
+
     /**
      * Gets attributes of all the secrets given by the {@code nextPageLink} that was retrieved from a call to
      * {@link SecretAsyncClient#listDeletedSecrets()}.
@@ -484,7 +577,7 @@ public PagedFlux listDeletedSecrets() {
      * @return A {@link Mono} of {@link PagedResponse} from the next page of results.
      */
     private Mono> listDeletedSecretsNextPage(String continuationToken, Context context) {
-        return service.getDeletedSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+        return service.getDeletedSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignoredValue -> logger.info("Retrieving the next deleted secrets page - Page {}", continuationToken))
             .doOnSuccess(response -> logger.info("Retrieved the next deleted secrets page - Page {}", continuationToken))
             .doOnError(error -> logger.warning("Failed to retrieve the next deleted secrets page - Page {}", continuationToken, error));
@@ -493,8 +586,8 @@ private Mono> listDeletedSecretsNextPage(String con
     /*
      * Calls the service and retrieve first page result. It makes one call and retrieve {@code DEFAULT_MAX_PAGE_RESULTS} values.
      */
-    private Mono> listDeletedSecretsFirstPage() {
-        return service.getDeletedSecrets(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+    private Mono> listDeletedSecretsFirstPage(Context context) {
+        return service.getDeletedSecrets(endpoint, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignored -> logger.info("Listing deleted secrets"))
             .doOnSuccess(response -> logger.info("Listed deleted secrets"))
             .doOnError(error -> logger.warning("Failed to list deleted secrets", error));
@@ -522,8 +615,14 @@ private Mono> listDeletedSecretsFirstPage() {
     @ServiceMethod(returns = ReturnType.COLLECTION)
     public PagedFlux listSecretVersions(String name) {
         return new PagedFlux<>(
-            () -> monoContext(context -> listSecretVersionsFirstPage(name)),
-            continuationToken -> monoContext(context -> listSecretVersionsNextPage(continuationToken)));
+            () -> withContext(context -> listSecretVersionsFirstPage(name, context)),
+            continuationToken -> withContext(context -> listSecretVersionsNextPage(continuationToken, context)));
+    }
+
+    PagedFlux listSecretVersions(String name, Context context) {
+        return new PagedFlux<>(
+            () -> listSecretVersionsFirstPage(name, context),
+            continuationToken -> listSecretVersionsNextPage(continuationToken, context));
     }
 
     /*
@@ -534,8 +633,8 @@ public PagedFlux listSecretVersions(String name) {
      * 
      * @return A {@link Mono} of {@link PagedResponse} from the next page of results.
      */
-    private Mono> listSecretVersionsNextPage(String continuationToken) {
-        return service.getSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+    private Mono> listSecretVersionsNextPage(String continuationToken, Context context) {
+        return service.getSecrets(endpoint, continuationToken, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignoredValue -> logger.info("Retrieving the next secrets versions page - Page {}", continuationToken))
             .doOnSuccess(response -> logger.info("Retrieved the next secrets versions page - Page {}", continuationToken))
             .doOnError(error -> logger.warning("Failed to retrieve the next secrets versions page - Page {}", continuationToken, error));
@@ -544,8 +643,8 @@ private Mono> listSecretVersionsNextPage(String contin
     /*
      * Calls the service and retrieve first page result. It makes one call and retrieve {@code DEFAULT_MAX_PAGE_RESULTS} values.
      */
-    private Mono> listSecretVersionsFirstPage(String name) {
-        return service.getSecretVersions(endpoint, name, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE)
+    private Mono> listSecretVersionsFirstPage(String name, Context context) {
+        return service.getSecretVersions(endpoint, name, DEFAULT_MAX_PAGE_RESULTS, API_VERSION, ACCEPT_LANGUAGE, CONTENT_TYPE_HEADER_VALUE, context)
             .doOnRequest(ignored -> logger.info("Listing secret versions - {}", name))
             .doOnSuccess(response -> logger.info("Listed secret versions - {}", name))
             .doOnError(error -> logger.warning(String.format("Failed to list secret versions - {}", name), error));
diff --git a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
index 87ef153de03dc..5d51121fb007c 100644
--- a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
+++ b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
@@ -47,10 +47,6 @@
  * {@codesnippet com.azure.security.keyvault.keys.async.secretclient.pipeline.instantiation}
  *
  * @see SecretClient
-<<<<<<< HEAD
-<<<<<<< HEAD
-=======
->>>>>>> master
  * @see SecretAsyncClient
  */
 @ServiceClientBuilder(serviceClients = SecretClient.class)
diff --git a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretService.java b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretService.java
index e49c88b9b2146..a686836effc66 100644
--- a/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretService.java
+++ b/sdk/keyvault/azure-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretService.java
@@ -24,6 +24,7 @@
 import com.azure.core.http.rest.PagedResponse;
 import com.azure.core.http.rest.Response;
 import com.azure.core.http.rest.VoidResponse;
+import com.azure.core.util.Context;
 import com.azure.security.keyvault.secrets.implementation.DeletedSecretPage;
 import com.azure.security.keyvault.secrets.implementation.SecretBasePage;
 import com.azure.security.keyvault.secrets.models.DeletedSecret;
@@ -50,7 +51,8 @@ Mono> setSecret(@HostParam("url") String url,
                                      @QueryParam("api-version") String apiVersion,
                                      @HeaderParam("accept-language") String acceptLanguage,
                                      @BodyParam("body") SecretRequestParameters parameters,
-                                     @HeaderParam("Content-Type") String type);
+                                     @HeaderParam("Content-Type") String type,
+                                     Context context);
 
     @Get("secrets/{secret-name}/{secret-version}")
     @ExpectedResponses({200})
@@ -62,7 +64,8 @@ Mono> getSecret(@HostParam("url") String url,
                                          @PathParam("secret-version") String secretVersion,
                                          @QueryParam("api-version") String apiVersion,
                                          @HeaderParam("accept-language") String acceptLanguage,
-                                         @HeaderParam("Content-Type") String type);
+                                         @HeaderParam("Content-Type") String type,
+                                         Context context);
 
 
     @Patch("secrets/{secret-name}/{secret-version}")
@@ -74,7 +77,8 @@ Mono> updateSecret(@HostParam("url") String url,
                                             @QueryParam("api-version") String apiVersion,
                                             @HeaderParam("accept-language") String acceptLanguage,
                                             @BodyParam("body") SecretRequestParameters parameters,
-                                            @HeaderParam("Content-Type") String type);
+                                            @HeaderParam("Content-Type") String type,
+                                            Context context);
 
 
     @Delete("secrets/{secret-name}")
@@ -85,7 +89,8 @@ Mono> deleteSecret(@HostParam("url") String url,
                                                @PathParam("secret-name") String secretName,
                                                @QueryParam("api-version") String apiVersion,
                                                @HeaderParam("accept-language") String acceptLanguage,
-                                               @HeaderParam("Content-Type") String type);
+                                               @HeaderParam("Content-Type") String type,
+                                               Context context);
 
 
     @Get("deletedsecrets/{secret-name}")
@@ -96,7 +101,8 @@ Mono> getDeletedSecret(@HostParam("url") String url,
                                                        @PathParam("secret-name") String secretName,
                                                        @QueryParam("api-version") String apiVersion,
                                                        @HeaderParam("accept-language") String acceptLanguage,
-                                                       @HeaderParam("Content-Type") String type);
+                                                       @HeaderParam("Content-Type") String type,
+                                                       Context context);
 
     @Delete("deletedsecrets/{secret-name}")
     @ExpectedResponses({204})
@@ -106,7 +112,8 @@ Mono purgeDeletedSecret(@HostParam("url") String url,
                                           @PathParam("secret-name") String secretName,
                                           @QueryParam("api-version") String apiVersion,
                                           @HeaderParam("accept-language") String acceptLanguage,
-                                          @HeaderParam("Content-Type") String type);
+                                          @HeaderParam("Content-Type") String type,
+                                          Context context);
 
 
     @Post("deletedsecrets/{secret-name}/recover")
@@ -117,7 +124,8 @@ Mono> recoverDeletedSecret(@HostParam("url") String url,
                                                     @PathParam("secret-name") String secretName,
                                                     @QueryParam("api-version") String apiVersion,
                                                     @HeaderParam("accept-language") String acceptLanguage,
-                                                    @HeaderParam("Content-Type") String type);
+                                                    @HeaderParam("Content-Type") String type,
+                                                    Context context);
 
 
     @Post("secrets/{secret-name}/backup")
@@ -128,7 +136,8 @@ Mono> backupSecret(@HostParam("url") String url,
                                                   @PathParam("secret-name") String secretName,
                                                   @QueryParam("api-version") String apiVersion,
                                                   @HeaderParam("accept-language") String acceptLanguage,
-                                                  @HeaderParam("Content-Type") String type);
+                                                  @HeaderParam("Content-Type") String type,
+                                                  Context context);
 
 
 
@@ -140,7 +149,8 @@ Mono> restoreSecret(@HostParam("url") String url,
                                              @QueryParam("api-version") String apiVersion,
                                              @HeaderParam("accept-language") String acceptLanguage,
                                              @BodyParam("application/json") SecretRestoreRequestParameters parameters,
-                                             @HeaderParam("Content-Type") String type);
+                                             @HeaderParam("Content-Type") String type,
+                                             Context context);
 
 
     @Get("secrets")
@@ -151,7 +161,8 @@ Mono> getSecrets(@HostParam("url") String url,
                                                @QueryParam("maxresults") Integer maxresults,
                                                @QueryParam("api-version") String apiVersion,
                                                @HeaderParam("accept-language") String acceptLanguage,
-                                               @HeaderParam("Content-Type") String type);
+                                               @HeaderParam("Content-Type") String type,
+                                               Context context);
 
 
     @Get("secrets/{secret-name}/versions")
@@ -163,7 +174,8 @@ Mono> getSecretVersions(@HostParam("url") String url,
                                                       @QueryParam("maxresults") Integer maxresults,
                                                       @QueryParam("api-version") String apiVersion,
                                                       @HeaderParam("accept-language") String acceptLanguage,
-                                                      @HeaderParam("Content-Type") String type);
+                                                      @HeaderParam("Content-Type") String type,
+                                                      Context context);
 
 
     @Get("{nextUrl}")
@@ -173,7 +185,8 @@ Mono> getSecretVersions(@HostParam("url") String url,
     Mono> getSecrets(@HostParam("url") String url,
                                                @PathParam(value = "nextUrl", encoded = true) String nextUrl,
                                                @HeaderParam("accept-language") String acceptLanguage,
-                                               @HeaderParam("Content-Type") String type);
+                                               @HeaderParam("Content-Type") String type,
+                                               Context context);
 
 
     @Get("deletedsecrets")
@@ -184,7 +197,8 @@ Mono> getDeletedSecrets(@HostParam("url") String ur
                                                               @QueryParam("maxresults") Integer maxresults,
                                                               @QueryParam("api-version") String apiVersion,
                                                               @HeaderParam("accept-language") String acceptLanguage,
-                                                              @HeaderParam("Content-Type") String type);
+                                                              @HeaderParam("Content-Type") String type,
+                                                              Context context);
 
     @Get("{nextUrl}")
     @ExpectedResponses({200})
@@ -193,5 +207,6 @@ Mono> getDeletedSecrets(@HostParam("url") String ur
     Mono> getDeletedSecrets(@HostParam("url") String url,
                                                      @PathParam(value = "nextUrl", encoded = true) String nextUrl,
                                                      @HeaderParam("accept-language") String acceptLanguage,
-                                                     @HeaderParam("Content-Type") String type);
+                                                     @HeaderParam("Content-Type") String type,
+                                                     Context context);
 }
diff --git a/sdk/keyvault/azure-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java b/sdk/keyvault/azure-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java
index 2e11cd2c52487..1f47223f0b406 100644
--- a/sdk/keyvault/azure-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java
+++ b/sdk/keyvault/azure-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java
@@ -89,7 +89,7 @@ public void setSecretEmptyValue() {
      * Verifies that an exception is thrown when null secret object is passed for creation.
      */
     public void setSecretNull() {
-        assertRunnableThrowsException(() -> client.setSecret(null), NullPointerException.class);
+        assertRunnableThrowsException(() -> client.setSecret(null).block(), NullPointerException.class);
     }
 
     /**
diff --git a/storage/client/blob/README.md b/storage/client/blob/README.md
index 0b3f28e20fb52..5a90220c5ed7b 100644
--- a/storage/client/blob/README.md
+++ b/storage/client/blob/README.md
@@ -15,7 +15,7 @@ definition, such as text or binary data.
 
 -  Java Development Kit (JDK) with version 8 or above
 - [Azure Subscription][azure_subscription]
-- [Create Strorage Account][storage_account]
+- [Create Storage Account][storage_account]
 
 ### Adding the package to your product
 
@@ -41,7 +41,7 @@ az group create \
 In order to interact with the Storage service (Blob, Queue, Message, MessageId, File) you'll need to create an instance of the Service Client class. 
 To make this possible you'll need the Account SAS (shared access signature) string of Storage account. Learn more at [SAS Token][sas_token]
 
-#### Get Credentials
+#### Get credentials
 
 - **SAS Token**
  
@@ -94,29 +94,31 @@ Blob storage is designed for:
 - Storing data for analysis by an on-premises or Azure-hosted service.
 
 ## Examples
+
 The following sections provide several code snippets covering some of the most common Azure Storage Blob tasks, including:
+
 - [Create storage client](#create-storage-client)
 - [Create container client](#create-container-client)
 - [Create blob client](#create-blob-client)
 - [Create a container](#create-a-container)
-- [Upload a blob from InputStream](#upload-a-blob-from-inputstream)
-- [Upload a blob from File](#upload-a-blob-from-file)
-- [Download a blob to OutputStream](#download-a-blob-to-outputstream)
-- [Download a blob to File](#download-a-blob-to-file)
+- [Upload a blob from InputStream](#uploading-a-blob-from-a-stream)
+- [Upload a blob from File](#uploading-a-blob-from-file)
+- [Download a blob to OutputStream](#downloading-a-blob-to-output-stream)
+- [Download a blob to File](#downloading-a-blob-to-local-path)
 - [Enumerating blobs](#enumerating-blobs)
-- [Authenticate with Azure.Identity](#authenticate-with-azure-identity)
+- [Authenticate with Azure.Identity](#authenticate-with-azureidentity)
 
-### Create Storage Client
+### Create storage client
 
 Create a storage client using the [`sasToken`](#get-credentials) generated above.
 ```java
 StorageClient storageClient = StorageClient.builder()
-        .endpoiont()
-        .credentail(sasToken)
+        .endpoint("")
+        .credential("")
         .build();
 ```
 
-### Create Container Client
+### Create container client
 
 Create a container client if storage client exists.
 ```java
@@ -128,13 +130,13 @@ or
 Create the container client from the builder [`sasToken`](#get-credentials) generated above.
 ```java
 ContainerClient containerClient = ContainerClient.builder()
-     .endpoiont()
-     .credentail(sasToken)
-     .containerName("mycontainer")
-     .build();
+         .endpoint("")
+         .credential("")
+         .containerName("mycontainer")
+         .build();
 ```
 
-### Create Blob Client
+### Create blob client
 
 Create a blob client if container client exists.
 ```java
@@ -146,11 +148,11 @@ or
 Create the blob client from the builder [`sasToken`](#get-credentials) generated above.
 ```java
 BlobClient blobClient = BlobClient.builder()
-     .endpoiont()
-     .credentail(sasToken)
-     .containerName("mycontainer")
-     .blobName("myblob")
-     .build();
+         .endpoint("")
+         .credential("")
+         .containerName("mycontainer")
+         .blobName("myblob")
+         .build();
 ```
 
 ### Create a container
@@ -164,10 +166,10 @@ or
 
 Create a container using container client.
 ```java
-conatinerClient.create();
+containerClient.create();
 ```
 
-### Uploading a blob from InputStream
+### Uploading a blob from a stream
 
 Upload data stream to a blob using blockBlobClient generated from containerClient.
 
@@ -179,7 +181,7 @@ try (ByteArrayInputStream dataStream = new ByteArrayInputStream(dataSample.getBy
 }
 ```
 
-### Uploading a blob from File
+### Uploading a blob from `File`
 
 Upload a file to a blob using blockBlobClient generated from containerClient.
 
@@ -207,7 +209,7 @@ blobClient.downloadToFile("downloaded-file.jpg");
 
 ### Enumerating blobs
 
-Enuerating all blobs using containerClient
+Enumerating all blobs using `ContainerClient`
 ```java
 containerClient.listBlobsFlat()
         .forEach(
@@ -217,29 +219,31 @@ containerClient.listBlobsFlat()
 
 ### Authenticate with Azure.Identity
 
-The [Azure Identity library](identity) provides Azure Active Directory support for authenticating with Azure Storage.
+The [Azure Identity library][identity] provides Azure Active Directory support for authenticating with Azure Storage.
+
 ```java
 StorageClient storageClient = StorageClient.storageClientBuilder()
-                .endpoint(endpoint)
-                .credential(new DefaultAzureCredential())
-                .buildClient();
+        .endpoint(endpoint)
+        .credential(new DefaultAzureCredential())
+        .buildClient();
 ```
 
 ## Troubleshooting
 
-When interacts with blobs using this Java client library, errors returned by the service correspond to the same HTTP status codes returned for [REST API][error_codes] requests. 
-For example, if you try to retrieve a container or blob that doesn't exist in your Storage Account, a `404` error is returned, indicating `Not Found`.
+When interacts with blobs using this Java client library, errors returned by the service correspond to the same HTTP 
+status codes returned for [REST API][error_codes] requests. For example, if you try to retrieve a container or blob that
+doesn't exist in your Storage Account, a `404` error is returned, indicating `Not Found`.
 
 ## Next steps
 
 Get started with our [Blob samples][samples]:
 
-1. [Basic Examples](src/samples/java/blob/BasicExample.java): Create storage, container, blob clients, Upload, download, and list blobs.
-1. [File Transfer Examples](src/samples/java/blob/FileTranferExample.java): Upload and download a large file through blobs.
-1. [Storage Error Examples](src/samples/java/blob/StorageErrorHandlingExample.java): Handle the exceptions from storage blob service side.
-1. [List Container Examples](src/samples/java/blob/ListContainersExample.java): Create, list and delete containers.
-1. [Set metadata and HTTPHeaders Examples](src/samples/java/blob/SetMetadataAndHTTPHeadersExample.java): Set metadata for container and blob, and set HTTPHeaders for blob.
-1. [Azure Identity Examples](src/samples/java/blob/AzureIdentityExample.java): Use DefaultAzureCredential to do the authentication.
+1. [Basic Examples](src/samples/java/BasicExample.java): Create storage, container, blob clients, Upload, download, and list blobs.
+1. [File Transfer Examples](src/samples/java/FileTransferExample.java): Upload and download a large file through blobs.
+1. [Storage Error Examples](src/samples/java/StorageErrorHandlingExample.java): Handle the exceptions from storage blob service side.
+1. [List Container Examples](src/samples/java/ListContainersExample.java): Create, list and delete containers.
+1. [Set metadata and HTTPHeaders Examples](src/samples/java/SetMetadataAndHTTPHeadersExample.java): Set metadata for container and blob, and set HTTPHeaders for blob.
+1. [Azure Identity Examples](src/samples/java/AzureIdentityExample.java): Use DefaultAzureCredential to do the authentication.
 
 ## Contributing
 
@@ -269,7 +273,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
 [azure_sub]: https://azure.microsoft.com/free/
 [identity]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/identity/azure-identity/README.md
 [error_codes]: https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-error-codes
-[samples]: samples/
+[samples]: ./src/samples/
 [cla]: https://cla.microsoft.com
 [coc]: https://opensource.microsoft.com/codeofconduct/
 [coc_faq]: https://opensource.microsoft.com/codeofconduct/faq/
diff --git a/storage/client/blob/swagger/blob.json b/storage/client/blob/swagger/blob.json
new file mode 100644
index 0000000000000..4a89d47458cc3
--- /dev/null
+++ b/storage/client/blob/swagger/blob.json
@@ -0,0 +1,8701 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "Azure Blob Storage",
+    "version": "2018-11-09",
+    "x-ms-code-generation-settings": {
+      "header": "MIT",
+      "strictSpecAdherence": false
+    }
+  },
+  "x-ms-parameterized-host": {
+    "hostTemplate": "{url}",
+    "useSchemePrefix": false,
+    "positionInOperation": "first",
+    "parameters": [
+      {
+        "$ref": "#/parameters/Url"
+      }
+    ]
+  },
+  "securityDefinitions": {
+    "blob_shared_key": {
+      "type": "apiKey",
+      "name": "Authorization",
+      "in": "header"
+    }
+  },
+  "schemes": [
+    "https"
+  ],
+  "consumes": [
+    "application/xml"
+  ],
+  "produces": [
+    "application/xml"
+  ],
+  "paths": {},
+  "x-ms-paths": {
+    "/?restype=service&comp=properties": {
+      "put": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_SetProperties",
+        "description": "Sets properties for a storage account's Blob service endpoint, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules",
+        "parameters": [
+          {
+            "$ref": "#/parameters/StorageServiceProperties"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "Success (Accepted)",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetProperties",
+        "description": "gets the properties of a storage account's Blob service, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageServiceProperties"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "service"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/?restype=service&comp=stats": {
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetStatistics",
+        "description": "Retrieves statistics related to replication for the Blob service. It is only available on the secondary location endpoint when read-access geo-redundant replication is enabled for the storage account.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageServiceStats"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "service"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "stats"
+          ]
+        }
+      ]
+    },
+    "/?comp=list": {
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_ListContainersSegment",
+        "description": "The List Containers Segment operation returns a list of the containers under the specified account",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Prefix"
+          },
+          {
+            "$ref": "#/parameters/Marker"
+          },
+          {
+            "$ref": "#/parameters/MaxResults"
+          },
+          {
+            "$ref": "#/parameters/ListContainersInclude"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/ListContainersSegmentResponse"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        },
+        "x-ms-pageable": {
+          "nextLinkName": "NextMarker"
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "list"
+          ]
+        }
+      ]
+    },
+    "/?restype=service&comp=userdelegationkey": {
+      "post": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetUserDelegationKey",
+        "description": "Retrieves a user delgation key for the Blob service. This is only a valid operation when using bearer token authentication.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/KeyInfo"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/UserDelegationKey"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "service"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "userdelegationkey"
+          ]
+        }
+      ]
+    },
+    "/?restype=account&comp=properties": {
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetAccountInfo",
+        "description": "Returns the sku name and account kind ",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success (OK)",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-sku-name": {
+                "x-ms-client-name": "SkuName",
+                "type": "string",
+                "enum": [
+                  "Standard_LRS",
+                  "Standard_GRS",
+                  "Standard_RAGRS",
+                  "Standard_ZRS",
+                  "Premium_LRS"
+                ],
+                "x-ms-enum": {
+                  "name": "SkuName",
+                  "modelAsString": false
+                },
+                "description": "Identifies the sku name of the account"
+              },
+              "x-ms-account-kind": {
+                "x-ms-client-name": "AccountKind",
+                "type": "string",
+                "enum": [
+                  "Storage",
+                  "BlobStorage",
+                  "StorageV2"
+                ],
+                "x-ms-enum": {
+                  "name": "AccountKind",
+                  "modelAsString": false
+                },
+                "description": "Identifies the account kind"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "account"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?restype=container": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_Create",
+        "description": "creates a new container under the specified account. If the container with the same name already exists, the operation fails",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/BlobPublicAccess"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "Success, Container created.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "get": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_GetProperties",
+        "description": "returns all user-defined metadata and system properties for the specified container. The data returned does not include the container's list of blobs",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "headers": {
+              "x-ms-meta": {
+                "type": "string",
+                "x-ms-client-name": "Metadata",
+                "x-ms-header-collection-prefix": "x-ms-meta-"
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-duration": {
+                "x-ms-client-name": "LeaseDuration",
+                "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.",
+                "type": "string",
+                "enum": [
+                  "infinite",
+                  "fixed"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseDurationType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-state": {
+                "x-ms-client-name": "LeaseState",
+                "description": "Lease state of the blob.",
+                "type": "string",
+                "enum": [
+                  "available",
+                  "leased",
+                  "expired",
+                  "breaking",
+                  "broken"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStateType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-status": {
+                "x-ms-client-name": "LeaseStatus",
+                "description": "The current lease status of the blob.",
+                "type": "string",
+                "enum": [
+                  "locked",
+                  "unlocked"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-blob-public-access": {
+                "x-ms-client-name": "BlobPublicAccess",
+                "description": "Indicated whether data in the container may be accessed publicly and the level of access",
+                "type": "string",
+                "enum": [
+                  "container",
+                  "blob"
+                ],
+                "x-ms-enum": {
+                  "name": "PublicAccessType",
+                  "modelAsString": true
+                }
+              },
+              "x-ms-has-immutability-policy": {
+                "x-ms-client-name": "HasImmutabilityPolicy",
+                "description": "Indicates whether the container has an immutability policy set on it.",
+                "type": "boolean"
+              },
+              "x-ms-has-legal-hold": {
+                "x-ms-client-name": "HasLegalHold",
+                "description": "Indicates whether the container has a legal hold.",
+                "type": "boolean"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_Delete",
+        "description": "operation marks the specified container for deletion. The container and any blobs contained within it are later deleted during garbage collection",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "Accepted",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?restype=container&comp=metadata": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_SetMetadata",
+        "description": "operation sets one or more user-defined name-value pairs for the specified container.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "metadata"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?restype=container&comp=acl": {
+      "get": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_GetAccessPolicy",
+        "description": "gets the permissions for the specified container. The permissions indicate whether container data may be accessed publicly.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "headers": {
+              "x-ms-blob-public-access": {
+                "x-ms-client-name": "BlobPublicAccess",
+                "description": "Indicated whether data in the container may be accessed publicly and the level of access",
+                "type": "string",
+                "enum": [
+                  "container",
+                  "blob"
+                ],
+                "x-ms-enum": {
+                  "name": "PublicAccessType",
+                  "modelAsString": true
+                }
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/SignedIdentifiers"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_SetAccessPolicy",
+        "description": "sets the permissions for the specified container. The permissions indicate whether blobs in a container may be accessed publicly.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/ContainerAcl"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobPublicAccess"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "acl"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?comp=lease&restype=container&acquire": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_AcquireLease",
+        "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseDuration"
+          },
+          {
+            "$ref": "#/parameters/ProposedLeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The Acquire operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a container's lease"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "acquire"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}?comp=lease&restype=container&release": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_ReleaseLease",
+        "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Release operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "release"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}?comp=lease&restype=container&renew": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_RenewLease",
+        "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Renew operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a container's lease"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "renew"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}?comp=lease&restype=container&break": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_BreakLease",
+        "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseBreakPeriod"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The Break operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-time": {
+                "x-ms-client-name": "LeaseTime",
+                "type": "integer",
+                "description": "Approximate time remaining in the lease period, in seconds."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "break"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}?comp=lease&restype=container&change": {
+      "put": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_ChangeLease",
+        "description": "[Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 to 60 seconds, or can be infinite",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/ProposedLeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Change operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a container's lease"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "change"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}?restype=container&comp=list&flat": {
+      "get": {
+        "tags": [
+          "containers"
+        ],
+        "operationId": "Container_ListBlobFlatSegment",
+        "description": "[Update] The List Blobs operation returns a list of the blobs under the specified container",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Prefix"
+          },
+          {
+            "$ref": "#/parameters/Marker"
+          },
+          {
+            "$ref": "#/parameters/MaxResults"
+          },
+          {
+            "$ref": "#/parameters/ListBlobsInclude"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "Content-Type": {
+                "type": "string",
+                "description": "The media type of the body of the response. For List Blobs this is 'application/xml'"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/ListBlobsFlatSegmentResponse"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        },
+        "x-ms-pageable": {
+          "nextLinkName": "NextMarker"
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "list"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?restype=container&comp=list&hierarchy": {
+      "get": {
+        "tags": [
+          "containers"
+        ],
+        "operationId": "Container_ListBlobHierarchySegment",
+        "description": "[Update] The List Blobs operation returns a list of the blobs under the specified container",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Prefix"
+          },
+          {
+            "$ref": "#/parameters/Delimiter"
+          },
+          {
+            "$ref": "#/parameters/Marker"
+          },
+          {
+            "$ref": "#/parameters/MaxResults"
+          },
+          {
+            "$ref": "#/parameters/ListBlobsInclude"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "Content-Type": {
+                "type": "string",
+                "description": "The media type of the body of the response. For List Blobs this is 'application/xml'"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/ListBlobsHierarchySegmentResponse"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        },
+        "x-ms-pageable": {
+          "nextLinkName": "NextMarker"
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "container"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "list"
+          ]
+        }
+      ]
+    },
+    "/{containerName}?restype=account&comp=properties": {
+      "get": {
+        "tags": [
+          "container"
+        ],
+        "operationId": "Container_GetAccountInfo",
+        "description": "Returns the sku name and account kind ",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success (OK)",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-sku-name": {
+                "x-ms-client-name": "SkuName",
+                "type": "string",
+                "enum": [
+                  "Standard_LRS",
+                  "Standard_GRS",
+                  "Standard_RAGRS",
+                  "Standard_ZRS",
+                  "Premium_LRS"
+                ],
+                "x-ms-enum": {
+                  "name": "SkuName",
+                  "modelAsString": false
+                },
+                "description": "Identifies the sku name of the account"
+              },
+              "x-ms-account-kind": {
+                "x-ms-client-name": "AccountKind",
+                "type": "string",
+                "enum": [
+                  "Storage",
+                  "BlobStorage",
+                  "StorageV2"
+                ],
+                "x-ms-enum": {
+                  "name": "AccountKind",
+                  "modelAsString": false
+                },
+                "description": "Identifies the account kind"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "account"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}": {
+      "get": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_Download",
+        "description": "The Download operation reads or downloads a blob from the system, including its metadata and properties. You can also call Download to read a snapshot or verison.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Range"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/GetRangeContentMD5"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Returns the content of the entire blob.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-meta": {
+                "type": "string",
+                "x-ms-client-name": "Metadata",
+                "x-ms-header-collection-prefix": "x-ms-meta-"
+              },
+              "Content-Length": {
+                "type": "integer",
+                "format": "int64",
+                "description": "The number of bytes present in the response body."
+              },
+              "Content-Type": {
+                "type": "string",
+                "description": "The media type of the body of the response. For Download Blob this is 'application/octet-stream'"
+              },
+              "Content-Range": {
+                "type": "string",
+                "description": "Indicates the range of bytes returned in the event that the client requested a subset of the blob by setting the 'Range' request header."
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "Content-Encoding": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Encoding request header"
+              },
+              "Cache-Control": {
+                "type": "string",
+                "description": "This header is returned if it was previously specified for the blob."
+              },
+              "Content-Disposition": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified."
+              },
+              "Content-Language": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Language request header."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-blob-type": {
+                "x-ms-client-name": "BlobType",
+                "description": "The blob's type.",
+                "type": "string",
+                "enum": [
+                  "BlockBlob",
+                  "PageBlob",
+                  "AppendBlob"
+                ],
+                "x-ms-enum": {
+                  "name": "BlobType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-copy-completion-time": {
+                "x-ms-client-name": "CopyCompletionTime",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status-description": {
+                "x-ms-client-name": "CopyStatusDescription",
+                "type": "string",
+                "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy."
+              },
+              "x-ms-copy-progress": {
+                "x-ms-client-name": "CopyProgress",
+                "type": "string",
+                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-source": {
+                "x-ms-client-name": "CopySource",
+                "type": "string",
+                "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "pending",
+                  "success",
+                  "aborted",
+                  "failed"
+                ],
+                "x-ms-enum": {
+                  "name": "CopyStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-duration": {
+                "x-ms-client-name": "LeaseDuration",
+                "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.",
+                "type": "string",
+                "enum": [
+                  "infinite",
+                  "fixed"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseDurationType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-state": {
+                "x-ms-client-name": "LeaseState",
+                "description": "Lease state of the blob.",
+                "type": "string",
+                "enum": [
+                  "available",
+                  "leased",
+                  "expired",
+                  "breaking",
+                  "broken"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStateType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-status": {
+                "x-ms-client-name": "LeaseStatus",
+                "description": "The current lease status of the blob.",
+                "type": "string",
+                "enum": [
+                  "locked",
+                  "unlocked"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Accept-Ranges": {
+                "type": "string",
+                "description": "Indicates that the service supports requests for partial blob content."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-blob-committed-block-count": {
+                "x-ms-client-name": "BlobCommittedBlockCount",
+                "type": "integer",
+                "description": "The number of committed blocks present in the blob. This header is returned only for append blobs."
+              },
+              "x-ms-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              },
+              "x-ms-blob-content-md5": {
+                "x-ms-client-name": "BlobContentMD5",
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole blob's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range"
+              }
+            },
+            "schema": {
+              "type": "object",
+              "format": "file"
+            }
+          },
+          "206": {
+            "description": "Returns the content of a specified range of the blob.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-meta": {
+                "type": "string",
+                "x-ms-client-name": "Metadata",
+                "x-ms-header-collection-prefix": "x-ms-meta-"
+              },
+              "Content-Length": {
+                "type": "integer",
+                "format": "int64",
+                "description": "The number of bytes present in the response body."
+              },
+              "Content-Type": {
+                "type": "string",
+                "description": "The media type of the body of the response. For Download Blob this is 'application/octet-stream'"
+              },
+              "Content-Range": {
+                "type": "string",
+                "description": "Indicates the range of bytes returned in the event that the client requested a subset of the blob by setting the 'Range' request header."
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "Content-Encoding": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Encoding request header"
+              },
+              "Cache-Control": {
+                "type": "string",
+                "description": "This header is returned if it was previously specified for the blob."
+              },
+              "Content-Disposition": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified."
+              },
+              "Content-Language": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Language request header."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-blob-type": {
+                "x-ms-client-name": "BlobType",
+                "description": "The blob's type.",
+                "type": "string",
+                "enum": [
+                  "BlockBlob",
+                  "PageBlob",
+                  "AppendBlob"
+                ],
+                "x-ms-enum": {
+                  "name": "BlobType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-copy-completion-time": {
+                "x-ms-client-name": "CopyCompletionTime",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status-description": {
+                "x-ms-client-name": "CopyStatusDescription",
+                "type": "string",
+                "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy."
+              },
+              "x-ms-copy-progress": {
+                "x-ms-client-name": "CopyProgress",
+                "type": "string",
+                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-source": {
+                "x-ms-client-name": "CopySource",
+                "type": "string",
+                "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "pending",
+                  "success",
+                  "aborted",
+                  "failed"
+                ],
+                "x-ms-enum": {
+                  "name": "CopyStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-duration": {
+                "x-ms-client-name": "LeaseDuration",
+                "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.",
+                "type": "string",
+                "enum": [
+                  "infinite",
+                  "fixed"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseDurationType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-state": {
+                "x-ms-client-name": "LeaseState",
+                "description": "Lease state of the blob.",
+                "type": "string",
+                "enum": [
+                  "available",
+                  "leased",
+                  "expired",
+                  "breaking",
+                  "broken"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStateType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-status": {
+                "x-ms-client-name": "LeaseStatus",
+                "description": "The current lease status of the blob.",
+                "type": "string",
+                "enum": [
+                  "locked",
+                  "unlocked"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Accept-Ranges": {
+                "type": "string",
+                "description": "Indicates that the service supports requests for partial blob content."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-blob-committed-block-count": {
+                "x-ms-client-name": "BlobCommittedBlockCount",
+                "type": "integer",
+                "description": "The number of committed blocks present in the blob. This header is returned only for append blobs."
+              },
+              "x-ms-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)."
+              },
+              "x-ms-blob-content-md5": {
+                "x-ms-client-name": "BlobContentMD5",
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole blob's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range"
+              }
+            },
+            "schema": {
+              "type": "object",
+              "format": "file"
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "head": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_GetProperties",
+        "description": "The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system properties for the blob. It does not return the content of the blob.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Returns the properties of the blob.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-creation-time": {
+                "x-ms-client-name": "CreationTime",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was created."
+              },
+              "x-ms-meta": {
+                "type": "string",
+                "x-ms-client-name": "Metadata",
+                "x-ms-header-collection-prefix": "x-ms-meta-"
+              },
+              "x-ms-blob-type": {
+                "x-ms-client-name": "BlobType",
+                "description": "The blob's type.",
+                "type": "string",
+                "enum": [
+                  "BlockBlob",
+                  "PageBlob",
+                  "AppendBlob"
+                ],
+                "x-ms-enum": {
+                  "name": "BlobType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-copy-completion-time": {
+                "x-ms-client-name": "CopyCompletionTime",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. This value can specify the time of a completed, aborted, or failed copy attempt. This header does not appear if a copy is pending, if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status-description": {
+                "x-ms-client-name": "CopyStatusDescription",
+                "type": "string",
+                "description": "Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or non-fatal copy operation failure. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy."
+              },
+              "x-ms-copy-progress": {
+                "x-ms-client-name": "CopyProgress",
+                "type": "string",
+                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this blob was the destination blob. Can show between 0 and Content-Length bytes copied. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List"
+              },
+              "x-ms-copy-source": {
+                "x-ms-client-name": "CopySource",
+                "type": "string",
+                "description": "URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob operation where this blob was the destination blob. This header does not appear if this blob has never been the destination in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "pending",
+                  "success",
+                  "aborted",
+                  "failed"
+                ],
+                "x-ms-enum": {
+                  "name": "CopyStatusType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-incremental-copy": {
+                "x-ms-client-name": "IsIncrementalCopy",
+                "type": "boolean",
+                "description": "Included if the blob is incremental copy blob."
+              },
+              "x-ms-copy-destination-snapshot": {
+                "x-ms-client-name": "DestinationSnapshot",
+                "type": "string",
+                "description": "Included if the blob is incremental copy blob or incremental copy snapshot, if x-ms-copy-status is success. Snapshot time of the last successful incremental copy snapshot for this blob."
+              },
+              "x-ms-lease-duration": {
+                "x-ms-client-name": "LeaseDuration",
+                "description": "When a blob is leased, specifies whether the lease is of infinite or fixed duration.",
+                "type": "string",
+                "enum": [
+                  "infinite",
+                  "fixed"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseDurationType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-state": {
+                "x-ms-client-name": "LeaseState",
+                "description": "Lease state of the blob.",
+                "type": "string",
+                "enum": [
+                  "available",
+                  "leased",
+                  "expired",
+                  "breaking",
+                  "broken"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStateType",
+                  "modelAsString": false
+                }
+              },
+              "x-ms-lease-status": {
+                "x-ms-client-name": "LeaseStatus",
+                "description": "The current lease status of the blob.",
+                "type": "string",
+                "enum": [
+                  "locked",
+                  "unlocked"
+                ],
+                "x-ms-enum": {
+                  "name": "LeaseStatusType",
+                  "modelAsString": false
+                }
+              },
+              "Content-Length": {
+                "type": "integer",
+                "format": "int64",
+                "description": "The number of bytes present in the response body."
+              },
+              "Content-Type": {
+                "type": "string",
+                "description": "The content type specified for the blob. The default content type is 'application/octet-stream'"
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "Content-Encoding": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Encoding request header"
+              },
+              "Content-Disposition": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. The Content-Disposition response header field conveys additional information about how to process the response payload, and also can be used to attach additional metadata. For example, if set to attachment, it indicates that the user-agent should not display the response, but instead show a Save As dialog with a filename other than the blob name specified."
+              },
+              "Content-Language": {
+                "type": "string",
+                "description": "This header returns the value that was specified for the Content-Language request header."
+              },
+              "Cache-Control": {
+                "type": "string",
+                "description": "This header is returned if it was previously specified for the blob."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "Accept-Ranges": {
+                "type": "string",
+                "description": "Indicates that the service supports requests for partial blob content."
+              },
+              "x-ms-blob-committed-block-count": {
+                "x-ms-client-name": "BlobCommittedBlockCount",
+                "type": "integer",
+                "description": "The number of committed blocks present in the blob. This header is returned only for append blobs."
+              },
+              "x-ms-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the blob data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if only parts of the blob/application metadata are encrypted)."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the metadata. This header is only returned when the metadata was encrypted with a customer-provided key."
+              },
+              "x-ms-access-tier": {
+                "x-ms-client-name": "AccessTier",
+                "type": "string",
+                "description": "The tier of page blob on a premium storage account or tier of block blob on blob storage LRS accounts. For a list of allowed premium page blob tiers, see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/premium-storage#features. For blob storage LRS accounts, valid values are Hot/Cool/Archive."
+              },
+              "x-ms-access-tier-inferred": {
+                "x-ms-client-name": "AccessTierInferred",
+                "type": "boolean",
+                "description": "For page blobs on a premium storage account only. If the access tier is not explicitly set on the blob, the tier is inferred based on its content length and this header will be returned with true value."
+              },
+              "x-ms-archive-status": {
+                "x-ms-client-name": "ArchiveStatus",
+                "type": "string",
+                "description": "For blob storage LRS accounts, valid values are rehydrate-pending-to-hot/rehydrate-pending-to-cool. If the blob is being rehydrated and is not complete then this header is returned indicating that rehydrate is pending and also tells the destination tier."
+              },
+              "x-ms-access-tier-change-time": {
+                "x-ms-client-name": "AccessTierChangeTime",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "The time the tier was changed on the object. This is only returned if the tier on the block blob was ever set."
+              }
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_Delete",
+        "description": "If the storage account's soft delete feature is disabled then, when a blob is deleted, it is permanently removed from the storage account. If the storage account's soft delete feature is enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible immediately. However, the blob service retains the blob or snapshot for the number of days specified by the DeleteRetentionPolicy section of [Storage service properties] (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is permanently removed from the storage account. Note that you continue to be charged for the soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the \"include=deleted\" query parameter to discover which blobs and snapshots have been soft deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code of 404 (ResourceNotFound). If the storage account's automatic snapshot feature is enabled, then, when a blob is deleted, an automatic snapshot is created. The blob becomes inaccessible immediately. All other operations on the blob causes the service to return an HTTP status code of 404 (ResourceNotFound). You can access automatic snapshot using snapshot timestamp or version id. You can restore the blob by calling Put or Copy Blob API with automatic snapshot as source. Deleting automatic snapshot requires shared key or special SAS/RBAC permissions.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/DeleteSnapshots"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The delete request was accepted and the blob will be deleted.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      }
+    },
+    "/{containerName}/{blob}?PageBlob": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "PageBlob_Create",
+        "description": "The Create operation creates a new page blob.",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/BlobContentType"
+          },
+          {
+            "$ref": "#/parameters/BlobContentEncoding"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLanguage"
+          },
+          {
+            "$ref": "#/parameters/BlobContentMD5"
+          },
+          {
+            "$ref": "#/parameters/BlobCacheControl"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobContentDisposition"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLengthRequired"
+          },
+          {
+            "$ref": "#/parameters/BlobSequenceNumber"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The blob was created.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies a version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "x-ms-blob-type",
+          "x-ms-client-name": "blobType",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Specifies the type of blob to create: block blob, page blob, or append blob.",
+          "type": "string",
+          "enum": [
+            "PageBlob"
+          ],
+          "x-ms-enum": {
+            "name": "BlobType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?AppendBlob": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "AppendBlob_Create",
+        "description": "The Create Append Blob operation creates a new append blob.",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/BlobContentType"
+          },
+          {
+            "$ref": "#/parameters/BlobContentEncoding"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLanguage"
+          },
+          {
+            "$ref": "#/parameters/BlobContentMD5"
+          },
+          {
+            "$ref": "#/parameters/BlobCacheControl"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobContentDisposition"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The blob was created.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies a version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "x-ms-blob-type",
+          "x-ms-client-name": "blobType",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Specifies the type of blob to create: block blob, page blob, or append blob.",
+          "type": "string",
+          "enum": [
+            "AppendBlob"
+          ],
+          "x-ms-enum": {
+            "name": "BlobType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?BlockBlob": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "BlockBlob_Upload",
+        "description": "The Upload Block Blob operation updates the content of an existing block blob. Updating an existing block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a partial update of the content of a block blob, use the Put Block List operation.",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Body"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/BlobContentType"
+          },
+          {
+            "$ref": "#/parameters/BlobContentEncoding"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLanguage"
+          },
+          {
+            "$ref": "#/parameters/BlobContentMD5"
+          },
+          {
+            "$ref": "#/parameters/BlobCacheControl"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobContentDisposition"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The blob was updated.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies a version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "x-ms-blob-type",
+          "x-ms-client-name": "blobType",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Specifies the type of blob to create: block blob, page blob, or append blob.",
+          "type": "string",
+          "enum": [
+            "BlockBlob"
+          ],
+          "x-ms-enum": {
+            "name": "BlobType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=undelete": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_Undelete",
+        "description": "Undelete a blob that was previously soft deleted",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The blob was undeleted successfully.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "undelete"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=properties&SetHTTPHeaders": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_SetHTTPHeaders",
+        "description": "The Set HTTP Headers operation sets system properties on the blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/BlobCacheControl"
+          },
+          {
+            "$ref": "#/parameters/BlobContentType"
+          },
+          {
+            "$ref": "#/parameters/BlobContentMD5"
+          },
+          {
+            "$ref": "#/parameters/BlobContentEncoding"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLanguage"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/BlobContentDisposition"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The properties were set successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=metadata": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_SetMetadata",
+        "description": "The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more name-value pairs",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The metadata was set successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the metadata. This header is only returned when the metadata was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "metadata"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=lease&acquire": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_AcquireLease",
+        "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseDuration"
+          },
+          {
+            "$ref": "#/parameters/ProposedLeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The Acquire operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a blobs's lease"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "acquire"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=lease&release": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_ReleaseLease",
+        "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Release operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "release"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=lease&renew": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_RenewLease",
+        "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Renew operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a blobs's lease"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "renew"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=lease&change": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_ChangeLease",
+        "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/ProposedLeaseIdRequired"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Change operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-lease-id": {
+                "x-ms-client-name": "LeaseId",
+                "type": "string",
+                "description": "Uniquely identifies a blobs's lease"
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "change"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=lease&break": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_BreakLease",
+        "description": "[Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete operations",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseBreakPeriod"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The Break operation completed successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the blob was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-lease-time": {
+                "x-ms-client-name": "LeaseTime",
+                "type": "integer",
+                "description": "Approximate time remaining in the lease period, in seconds."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "lease"
+          ]
+        },
+        {
+          "name": "x-ms-lease-action",
+          "x-ms-client-name": "action",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "break"
+          ],
+          "x-ms-enum": {
+            "name": "LeaseAction",
+            "modelAsString": false
+          },
+          "x-ms-parameter-location": "method",
+          "description": "Describes what lease action to take."
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=snapshot": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_CreateSnapshot",
+        "description": "The Create Snapshot operation creates a read-only snapshot of a blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The snaptshot was taken successfully.",
+            "headers": {
+              "x-ms-snapshot": {
+                "x-ms-client-name": "Snapshot",
+                "type": "string",
+                "description": "Uniquely identifies the snapshot and indicates the snapshot version. It may be used in subsequent requests to access the snapshot"
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies the version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "True if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise. For a snapshot request, this header is set to true when metadata was provided in the request and encrypted with a customer-provided key."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the source blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "snapshot"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=copy": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_StartCopyFromURL",
+        "description": "The Start Copy From URL operation copies a blob or an internet resource to a new blob.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/SourceIfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/CopySource"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The copy blob has been accepted with the specified copy status.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies the version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "pending",
+                  "success",
+                  "aborted",
+                  "failed"
+                ],
+                "x-ms-enum": {
+                  "name": "CopyStatusType",
+                  "modelAsString": false
+                }
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    },
+    "/{containerName}/{blob}?comp=copy&sync": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_CopyFromURL",
+        "description": "The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return a response until the copy is complete.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/SourceIfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/CopySource"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The copy has completed.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies the version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "success"
+                ],
+                "x-ms-enum": {
+                  "name": "SyncCopyStatusType",
+                  "modelAsString": false
+                }
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "x-ms-requires-sync",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "true"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=copy©id={CopyId}": {
+      "put": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_AbortCopyFromURL",
+        "description": "The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination blob with zero length and full metadata.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/CopyId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "The delete request was accepted and the blob will be deleted.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "copy"
+          ]
+        },
+        {
+          "name": "x-ms-copy-action",
+          "x-ms-client-name": "copyActionAbortConstant",
+          "in": "header",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "abort"
+          ],
+          "x-ms-parameter-location": "method"
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=tier": {
+      "put": {
+        "tags": [
+          "blobs"
+        ],
+        "operationId": "Blob_SetTier",
+        "description": "The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium storage account and on a block blob in a blob storage account (locally redundant storage only). A premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's ETag.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/AccessTier"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The new tier will take effect immediately.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and newer."
+              }
+            }
+          },
+          "202": {
+            "description": "The transition to the new tier is pending.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and newer."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "tier"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?restype=account&comp=properties": {
+      "get": {
+        "tags": [
+          "blob"
+        ],
+        "operationId": "Blob_GetAccountInfo",
+        "description": "Returns the sku name and account kind ",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success (OK)",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-sku-name": {
+                "x-ms-client-name": "SkuName",
+                "type": "string",
+                "enum": [
+                  "Standard_LRS",
+                  "Standard_GRS",
+                  "Standard_RAGRS",
+                  "Standard_ZRS",
+                  "Premium_LRS"
+                ],
+                "x-ms-enum": {
+                  "name": "SkuName",
+                  "modelAsString": false
+                },
+                "description": "Identifies the sku name of the account"
+              },
+              "x-ms-account-kind": {
+                "x-ms-client-name": "AccountKind",
+                "type": "string",
+                "enum": [
+                  "Storage",
+                  "BlobStorage",
+                  "StorageV2"
+                ],
+                "x-ms-enum": {
+                  "name": "AccountKind",
+                  "modelAsString": false
+                },
+                "description": "Identifies the account kind"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "account"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=block": {
+      "put": {
+        "tags": [
+          "blockblob"
+        ],
+        "operationId": "BlockBlob_StageBlock",
+        "description": "The Stage Block operation creates a new block to be committed as part of a blob",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/BlockId"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/ContentMD5"
+          },
+          {
+            "$ref": "#/parameters/Body"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The block was created.",
+            "headers": {
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the block. This header is only returned when the block was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "block"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=block&fromURL": {
+      "put": {
+        "tags": [
+          "blockblob"
+        ],
+        "operationId": "BlockBlob_StageBlockFromURL",
+        "description": "The Stage Block operation creates a new block to be committed as part of a blob where the contents are read from a URL.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/BlockId"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/SourceUrl"
+          },
+          {
+            "$ref": "#/parameters/SourceRange"
+          },
+          {
+            "$ref": "#/parameters/SourceContentMD5"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+    	  },
+          {
+            "$ref": "#/parameters/SourceIfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfNoneMatch"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The block was created.",
+            "headers": {
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the block. This header is only returned when the block was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "block"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=blocklist": {
+      "put": {
+        "tags": [
+          "blockblob"
+        ],
+        "operationId": "BlockBlob_CommitBlockList",
+        "description": "The Commit Block List operation writes a blob by specifying the list of block IDs that make up the blob. In order to be written as part of a blob, a block must have been successfully written to the server in a prior Put Block operation. You can call Put Block List to update a blob by uploading only those blocks that have changed, then committing the new and existing blocks together. You can do this by specifying whether to commit a block from the committed block list or from the uncommitted block list, or to commit the most recently uploaded version of the block, whichever list it may belong to.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/BlobCacheControl"
+          },
+          {
+            "$ref": "#/parameters/BlobContentType"
+          },
+          {
+            "$ref": "#/parameters/BlobContentEncoding"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLanguage"
+          },
+          {
+            "$ref": "#/parameters/BlobContentMD5"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobContentDisposition"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "name": "blocks",
+            "in": "body",
+            "required": true,
+            "schema": {
+              "$ref": "#/definitions/BlockLookupList"
+            }
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The block list was recorded.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "x-ms-version-id": {
+                "x-ms-client-name": "VersionId",
+                "type": "string",
+                "description": "UTC date/time value generated by the service that identifies a version of the blob. This header is returned for requests made against version 2018-11-09 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the blob. This header is only returned when the blob was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "get": {
+        "tags": [
+          "blockblob"
+        ],
+        "operationId": "BlockBlob_GetBlockList",
+        "description": "The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/BlockListType"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The page range was written.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Content-Type": {
+                "type": "string",
+                "description": "The media type of the body of the response. For Get Block List this is 'application/xml'"
+              },
+              "x-ms-blob-content-length": {
+                "x-ms-client-name": "BlobContentLength",
+                "type": "integer",
+                "format": "int64",
+                "description": "The size of the blob in bytes."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/BlockList"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "blocklist"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=page&update": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_UploadPages",
+        "description": "The Upload Pages operation writes a range of pages to a page blob",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Body"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/ContentMD5"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Range"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThan"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The page range was written.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for the page blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the pages. This header is only returned when the pages were encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "page"
+          ]
+        },
+        {
+          "name": "x-ms-page-write",
+          "x-ms-client-name": "pageWrite",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Required. You may specify one of the following options:\n  - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n  - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.",
+          "type": "string",
+          "enum": [
+            "update"
+          ],
+          "x-ms-enum": {
+            "name": "PageWriteType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=page&clear": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_ClearPages",
+        "description": "The Clear Pages operation clears a set of pages from a page blob",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Range"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThan"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The page range was cleared.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for the page blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "page"
+          ]
+        },
+        {
+          "name": "x-ms-page-write",
+          "x-ms-client-name": "pageWrite",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Required. You may specify one of the following options:\n  - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n  - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.",
+          "type": "string",
+          "enum": [
+            "clear"
+          ],
+          "x-ms-enum": {
+            "name": "PageWriteType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=page&update&fromUrl": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_UploadPagesFromURL",
+        "description": "The Upload Pages operation writes a range of pages to a page blob where the contents are read from a URL",
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/SourceUrl"
+          },
+          {
+            "$ref": "#/parameters/SourceRangeRequiredPutPageFromUrl"
+          },
+          {
+            "$ref": "#/parameters/SourceContentMD5"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/RangeRequiredPutPageFromUrl"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThanOrEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberLessThan"
+          },
+          {
+            "$ref": "#/parameters/IfSequenceNumberEqualTo"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The page range was written.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for the page blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              }
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "page"
+          ]
+        },
+        {
+          "name": "x-ms-page-write",
+          "x-ms-client-name": "pageWrite",
+          "in": "header",
+          "required": true,
+          "x-ms-parameter-location": "method",
+          "description": "Required. You may specify one of the following options:\n  - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update.\n  - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and the Range header to a value that indicates the range to clear, up to maximum blob size.",
+          "type": "string",
+          "enum": [
+            "update"
+          ],
+          "x-ms-enum": {
+            "name": "PageWriteType",
+            "modelAsString": false
+          }
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=pagelist": {
+      "get": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_GetPageRanges",
+        "description": "The Get Page Ranges operation returns the list of valid page ranges for a page blob, version or snapshot of a page blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Range"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Information on the page blob was found.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "x-ms-blob-content-length": {
+                "x-ms-client-name": "BlobContentLength",
+                "type": "integer",
+                "format": "int64",
+                "description": "The size of the blob in bytes."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/PageList"
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "pagelist"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=pagelist&diff": {
+      "get": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_GetPageRangesDiff",
+        "description": "[Update] The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were changed between target blob and previous snapshot or version.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Snapshot"
+          },
+          {
+            "$ref": "#/parameters/VersionId"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/PrevSnapshot"
+          },
+          {
+            "$ref": "#/parameters/Range"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Information on the page blob was found.",
+            "headers": {
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "x-ms-blob-content-length": {
+                "x-ms-client-name": "BlobContentLength",
+                "type": "integer",
+                "format": "int64",
+                "description": "The size of the blob in bytes."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/PageList"
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "pagelist"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=properties&Resize": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_Resize",
+        "description": "Resize the Blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/BlobContentLengthRequired"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The Blob was resized successfully",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=properties&UpdateSequenceNumber": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_UpdateSequenceNumber",
+        "description": "Update the sequence number of the blob",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/SequenceNumberAction"
+          },
+          {
+            "$ref": "#/parameters/BlobSequenceNumber"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "The sequence numbers were updated successfully.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-blob-sequence-number": {
+                "x-ms-client-name": "BlobSequenceNumber",
+                "type": "integer",
+                "format": "int64",
+                "description": "The current sequence number for a page blob. This header is not returned for block blobs or append blobs"
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=incrementalcopy": {
+      "put": {
+        "tags": [
+          "pageblob"
+        ],
+        "operationId": "PageBlob_CopyIncremental",
+        "description": "The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob. The snapshot is copied such that only the differential changes between the previously copied snapshot are transferred to the destination. The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual. This API is supported since REST version 2016-05-31.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/CopySource"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "The blob was copied.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-copy-id": {
+                "x-ms-client-name": "CopyId",
+                "type": "string",
+                "description": "String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy operation, or pass to Abort Copy Blob to abort a pending copy."
+              },
+              "x-ms-copy-status": {
+                "x-ms-client-name": "CopyStatus",
+                "description": "State of the copy operation identified by x-ms-copy-id.",
+                "type": "string",
+                "enum": [
+                  "pending",
+                  "success",
+                  "aborted",
+                  "failed"
+                ],
+                "x-ms-enum": {
+                  "name": "CopyStatusType",
+                  "modelAsString": false
+                }
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "incrementalcopy"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=appendblock": {
+      "put": {
+        "tags": [
+          "appendblob"
+        ],
+        "consumes": [
+          "application/octet-stream"
+        ],
+        "operationId": "AppendBlob_AppendBlock",
+        "description": "The Append Block operation commits a new block of data to the end of an existing append blob. The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/Body"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/ContentMD5"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobConditionMaxSize"
+          },
+          {
+            "$ref": "#/parameters/BlobConditionAppendPos"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKey"
+          },
+          {
+            "$ref": "#/parameters/EncryptionKeySha256"
+          },
+          {
+            "$ref": "#/parameters/EncryptionAlgorithm"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The block was created.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-blob-append-offset": {
+                "x-ms-client-name": "BlobAppendOffset",
+                "type": "string",
+                "description": "This response header is returned only for append operations. It returns the offset at which the block was committed, in bytes."
+              },
+              "x-ms-blob-committed-block-count": {
+                "x-ms-client-name": "BlobCommittedBlockCount",
+                "type": "integer",
+                "description": "The number of committed blocks present in the blob. This header is returned only for append blobs."
+              },
+              "x-ms-request-server-encrypted": {
+                "x-ms-client-name": "IsServerEncrypted",
+                "type": "boolean",
+                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+              },
+              "x-ms-encryption-key-sha256": {
+                "x-ms-client-name": "EncryptionKeySha256",
+                "type": "string",
+                "description": "The SHA-256 hash of the encryption key used to encrypt the block. This header is only returned when the block was encrypted with a customer-provided key."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "appendblock"
+          ]
+        }
+      ]
+    },
+    "/{containerName}/{blob}?comp=appendblock&fromUrl": {
+      "put": {
+        "tags": [
+          "appendblob"
+        ],
+        "operationId": "AppendBlob_AppendBlockFromUrl",
+        "description": "The Append Block operation commits a new block of data to the end of an existing append blob where the contents are read from a source url. The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version 2015-02-21 version or later.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/ContainerName"
+          },
+          {
+            "$ref": "#/parameters/Blob"
+          },
+          {
+            "$ref": "#/parameters/SourceUrl"
+          },
+          {
+            "$ref": "#/parameters/SourceRange"
+          },
+          {
+            "$ref": "#/parameters/SourceContentMD5"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ContentLength"
+          },
+          {
+            "$ref": "#/parameters/LeaseIdOptional"
+          },
+          {
+            "$ref": "#/parameters/BlobConditionMaxSize"
+          },
+          {
+            "$ref": "#/parameters/BlobConditionAppendPos"
+          },
+          {
+            "$ref": "#/parameters/IfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/IfMatch"
+          },
+          {
+            "$ref": "#/parameters/IfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfModifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfUnmodifiedSince"
+          },
+          {
+            "$ref": "#/parameters/SourceIfMatch"
+          },
+          {
+            "$ref": "#/parameters/SourceIfNoneMatch"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "The block was created.",
+            "headers": {
+              "ETag": {
+                "type": "string",
+                "format": "etag",
+                "description": "The ETag contains a value that you can use to perform operations conditionally. If the request version is 2011-08-18 or newer, the ETag value will be in quotes."
+              },
+              "Last-Modified": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "Returns the date and time the container was last modified. Any operation that modifies the blob, including an update of the blob's metadata or properties, changes the last-modified time of the blob."
+              },
+              "Content-MD5": {
+                "type": "string",
+                "format": "byte",
+                "description": "If the blob has an MD5 hash and this operation is to read the full blob, this response header is returned so that the client can check for message content integrity."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Blob service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-blob-append-offset": {
+                "x-ms-client-name": "BlobAppendOffset",
+                "type": "string",
+                "description": "This response header is returned only for append operations. It returns the offset at which the block was committed, in bytes."
+              },
+              "x-ms-blob-committed-block-count": {
+                "x-ms-client-name": "BlobCommittedBlockCount",
+                "type": "integer",
+                "description": "The number of committed blocks present in the blob. This header is returned only for append blobs."
+              }
+            }
+          },
+          "304": {
+            "description": "The condition specified using HTTP conditional header(s) is not met.",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "appendblock"
+          ]
+        }
+      ]
+    }
+  },
+  "definitions": {
+    "KeyInfo": {
+      "type": "object",
+      "required": [
+        "Start",
+        "Expiry"
+      ],
+      "description": "Key information",
+      "properties": {
+        "Start": {
+          "description": "The date-time the key is active in ISO 8601 UTC time",
+          "type": "string"
+        },
+        "Expiry": {
+          "description": "The date-time the key expires in ISO 8601 UTC time",
+          "type": "string"
+        }
+      }
+    },
+    "UserDelegationKey": {
+      "type": "object",
+      "required": [
+        "SignedOid",
+        "SignedTid",
+        "SignedStart",
+        "SignedExpiry",
+        "SignedService",
+        "SignedVersion",
+        "Value"
+      ],
+      "description": "A user delegation key",
+      "properties": {
+        "SignedOid": {
+          "description": "The Azure Active Directory object ID in GUID format.",
+          "type": "string"
+        },
+        "SignedTid": {
+          "description": "The Azure Active Directory tenant ID in GUID format",
+          "type": "string"
+        },
+        "SignedStart": {
+          "description": "The date-time the key is active",
+          "type": "string",
+          "format": "date-time"
+        },
+        "SignedExpiry": {
+          "description": "The date-time the key expires",
+          "type": "string",
+          "format": "date-time"
+        },
+        "SignedService": {
+          "description": "Abbreviation of the Azure Storage service that accepts the key",
+          "type": "string"
+        },
+        "SignedVersion": {
+          "description": "The service version that created the key",
+          "type": "string"
+        },
+        "Value": {
+          "description": "The key as a base64 string",
+          "type": "string"
+        }
+      }
+    },
+    "PublicAccessType": {
+      "type": "string",
+      "enum": [
+        "container",
+        "blob"
+      ],
+      "x-ms-enum": {
+        "name": "PublicAccessType",
+        "modelAsString": true
+      }
+    },
+    "CopyStatus": {
+      "type": "string",
+      "enum": [
+        "pending",
+        "success",
+        "aborted",
+        "failed"
+      ],
+      "x-ms-enum": {
+        "name": "CopyStatusType",
+        "modelAsString": false
+      }
+    },
+    "LeaseDuration": {
+      "type": "string",
+      "enum": [
+        "infinite",
+        "fixed"
+      ],
+      "x-ms-enum": {
+        "name": "LeaseDurationType",
+        "modelAsString": false
+      }
+    },
+    "LeaseState": {
+      "type": "string",
+      "enum": [
+        "available",
+        "leased",
+        "expired",
+        "breaking",
+        "broken"
+      ],
+      "x-ms-enum": {
+        "name": "LeaseStateType",
+        "modelAsString": false
+      }
+    },
+    "LeaseStatus": {
+      "type": "string",
+      "enum": [
+        "locked",
+        "unlocked"
+      ],
+      "x-ms-enum": {
+        "name": "LeaseStatusType",
+        "modelAsString": false
+      }
+    },
+    "StorageError": {
+      "type": "object",
+      "properties": {
+        "Code": {
+          "type": "string"
+        },
+        "Message": {
+          "type": "string"
+        }
+      }
+    },
+    "AccessPolicy": {
+      "type": "object",
+      "required": [
+        "Start",
+        "Expiry",
+        "Permission"
+      ],
+      "description": "An Access policy",
+      "properties": {
+        "Start": {
+          "description": "the date-time the policy is active",
+          "type": "string",
+          "format": "date-time"
+        },
+        "Expiry": {
+          "description": "the date-time the policy expires",
+          "type": "string",
+          "format": "date-time"
+        },
+        "Permission": {
+          "description": "the permissions for the acl policy",
+          "type": "string"
+        }
+      }
+    },
+    "AccessTier": {
+      "type": "string",
+      "enum": [
+        "P4",
+        "P6",
+        "P10",
+        "P20",
+        "P30",
+        "P40",
+        "P50",
+        "Hot",
+        "Cool",
+        "Archive"
+      ],
+      "x-ms-enum": {
+        "name": "AccessTier",
+        "modelAsString": true
+      }
+    },
+    "ArchiveStatus": {
+      "type": "string",
+      "enum": [
+        "rehydrate-pending-to-hot",
+        "rehydrate-pending-to-cool"
+      ],
+      "x-ms-enum": {
+        "name": "ArchiveStatus",
+        "modelAsString": true
+      }
+    },
+    "BlobItem": {
+      "xml": {
+        "name": "Blob"
+      },
+      "description": "An Azure Storage blob",
+      "type": "object",
+      "required": [
+        "Name",
+        "Deleted",
+        "Snapshot",
+        "VersionId",
+        "Properties"
+      ],
+      "properties": {
+        "Name": {
+          "type": "string"
+        },
+        "Deleted": {
+          "type": "boolean"
+        },
+        "Snapshot": {
+          "type": "string"
+        },
+        "VersionId": {
+          "type": "string"
+        },
+        "Properties": {
+          "$ref": "#/definitions/BlobProperties"
+        },
+        "Metadata": {
+          "$ref": "#/definitions/BlobMetadata"
+        }
+      }
+    },
+    "BlobProperties": {
+      "xml": {
+        "name": "Properties"
+      },
+      "description": "Properties of a blob",
+      "type": "object",
+      "required": [
+        "Etag",
+        "Last-Modified"
+      ],
+      "properties": {
+        "Creation-Time": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        },
+        "Last-Modified": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        },
+        "Etag": {
+          "type": "string",
+          "format": "etag"
+        },
+        "Content-Length": {
+          "type": "integer",
+          "format": "int64",
+          "description": "Size in bytes"
+        },
+        "Content-Type": {
+          "type": "string"
+        },
+        "Content-Encoding": {
+          "type": "string"
+        },
+        "Content-Language": {
+          "type": "string"
+        },
+        "Content-MD5": {
+          "type": "string",
+          "format": "byte"
+        },
+        "Content-Disposition": {
+          "type": "string"
+        },
+        "Cache-Control": {
+          "type": "string"
+        },
+        "x-ms-blob-sequence-number": {
+          "x-ms-client-name": "blobSequenceNumber",
+          "type": "integer",
+          "format": "int64"
+        },
+        "BlobType": {
+          "type": "string",
+          "enum": [
+            "BlockBlob",
+            "PageBlob",
+            "AppendBlob"
+          ],
+          "x-ms-enum": {
+            "name": "BlobType",
+            "modelAsString": false
+          }
+        },
+        "LeaseStatus": {
+          "$ref": "#/definitions/LeaseStatus"
+        },
+        "LeaseState": {
+          "$ref": "#/definitions/LeaseState"
+        },
+        "LeaseDuration": {
+          "$ref": "#/definitions/LeaseDuration"
+        },
+        "CopyId": {
+          "type": "string"
+        },
+        "CopyStatus": {
+          "$ref": "#/definitions/CopyStatus"
+        },
+        "CopySource": {
+          "type": "string"
+        },
+        "CopyProgress": {
+          "type": "string"
+        },
+        "CopyCompletionTime": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        },
+        "CopyStatusDescription": {
+          "type": "string"
+        },
+        "ServerEncrypted": {
+          "type": "boolean"
+        },
+        "IncrementalCopy": {
+          "type": "boolean"
+        },
+        "DestinationSnapshot": {
+          "type": "string"
+        },
+        "DeletedTime": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        },
+        "RemainingRetentionDays": {
+          "type": "integer"
+        },
+        "AccessTier": {
+          "$ref": "#/definitions/AccessTier"
+        },
+        "AccessTierInferred": {
+          "type": "boolean"
+        },
+        "ArchiveStatus": {
+          "$ref": "#/definitions/ArchiveStatus"
+        },
+        "CustomerProvidedKeySha256": {
+          "type": "string"
+        },
+        "AccessTierChangeTime": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        }
+      }
+    },
+    "ListBlobsFlatSegmentResponse": {
+      "xml": {
+        "name": "EnumerationResults"
+      },
+      "description": "An enumeration of blobs",
+      "type": "object",
+      "required": [
+        "ServiceEndpoint",
+        "ContainerName",
+        "Prefix",
+        "Marker",
+        "MaxResults",
+        "Delimiter",
+        "Segment",
+        "NextMarker"
+      ],
+      "properties": {
+        "ServiceEndpoint": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "ContainerName": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "Prefix": {
+          "type": "string"
+        },
+        "Marker": {
+          "type": "string"
+        },
+        "MaxResults": {
+          "type": "integer"
+        },
+        "Delimiter": {
+          "type": "string"
+        },
+        "Segment": {
+          "$ref": "#/definitions/BlobFlatListSegment"
+        },
+        "NextMarker": {
+          "type": "string"
+        }
+      }
+    },
+    "ListBlobsHierarchySegmentResponse": {
+      "xml": {
+        "name": "EnumerationResults"
+      },
+      "description": "An enumeration of blobs",
+      "type": "object",
+      "required": [
+        "ServiceEndpoint",
+        "ContainerName",
+        "Prefix",
+        "Marker",
+        "MaxResults",
+        "Delimiter",
+        "Segment",
+        "NextMarker"
+      ],
+      "properties": {
+        "ServiceEndpoint": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "ContainerName": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "Prefix": {
+          "type": "string"
+        },
+        "Marker": {
+          "type": "string"
+        },
+        "MaxResults": {
+          "type": "integer"
+        },
+        "Delimiter": {
+          "type": "string"
+        },
+        "Segment": {
+          "$ref": "#/definitions/BlobHierarchyListSegment"
+        },
+        "NextMarker": {
+          "type": "string"
+        }
+      }
+    },
+    "BlobFlatListSegment": {
+      "xml": {
+        "name": "Blobs"
+      },
+      "required": [
+        "BlobItems"
+      ],
+      "type": "object",
+      "properties": {
+        "BlobItems": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/BlobItem"
+          }
+        }
+      }
+    },
+    "BlobHierarchyListSegment": {
+      "xml": {
+        "name": "Blobs"
+      },
+      "type": "object",
+      "required": [
+        "BlobItems"
+      ],
+      "properties": {
+        "BlobPrefixes": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/BlobPrefix"
+          }
+        },
+        "BlobItems": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/BlobItem"
+          }
+        }
+      }
+    },
+    "BlobPrefix": {
+      "type": "object",
+      "required": [
+        "Name"
+      ],
+      "properties": {
+        "Name": {
+          "type": "string"
+        }
+      }
+    },
+    "Block": {
+      "type": "object",
+      "required": [
+        "Name",
+        "Size"
+      ],
+      "description": "Represents a single block in a block blob.  It describes the block's ID and size.",
+      "properties": {
+        "Name": {
+          "description": "The base64 encoded block ID.",
+          "type": "string"
+        },
+        "Size": {
+          "description": "The block size in bytes.",
+          "type": "integer"
+        }
+      }
+    },
+    "BlockList": {
+      "type": "object",
+      "properties": {
+        "CommittedBlocks": {
+          "xml": {
+            "wrapped": true
+          },
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/Block"
+          }
+        },
+        "UncommittedBlocks": {
+          "xml": {
+            "wrapped": true
+          },
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/Block"
+          }
+        }
+      }
+    },
+    "BlockLookupList": {
+      "type": "object",
+      "properties": {
+        "Committed": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "xml": {
+              "name": "Committed"
+            }
+          }
+        },
+        "Uncommitted": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "xml": {
+              "name": "Uncommitted"
+            }
+          }
+        },
+        "Latest": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "xml": {
+              "name": "Latest"
+            }
+          }
+        }
+      },
+      "xml": {
+        "name": "BlockList"
+      }
+    },
+    "ContainerItem": {
+      "xml": {
+        "name": "Container"
+      },
+      "type": "object",
+      "required": [
+        "Name",
+        "Properties"
+      ],
+      "description": "An Azure Storage container",
+      "properties": {
+        "Name": {
+          "type": "string"
+        },
+        "Properties": {
+          "$ref": "#/definitions/ContainerProperties"
+        },
+        "Metadata": {
+          "$ref": "#/definitions/ContainerMetadata"
+        }
+      }
+    },
+    "ContainerProperties": {
+      "type": "object",
+      "required": [
+        "Last-Modified",
+        "Etag"
+      ],
+      "description": "Properties of a container",
+      "properties": {
+        "Last-Modified": {
+          "type": "string",
+          "format": "date-time-rfc1123"
+        },
+        "Etag": {
+          "type": "string",
+          "format": "etag"
+        },
+        "LeaseStatus": {
+          "$ref": "#/definitions/LeaseStatus"
+        },
+        "LeaseState": {
+          "$ref": "#/definitions/LeaseState"
+        },
+        "LeaseDuration": {
+          "$ref": "#/definitions/LeaseDuration"
+        },
+        "PublicAccess": {
+          "$ref": "#/definitions/PublicAccessType"
+        },
+        "HasImmutabilityPolicy": {
+          "type": "boolean"
+        },
+        "HasLegalHold": {
+          "type": "boolean"
+        }
+      }
+    },
+    "ListContainersSegmentResponse": {
+      "xml": {
+        "name": "EnumerationResults"
+      },
+      "description": "An enumeration of containers",
+      "type": "object",
+      "required": [
+        "ServiceEndpoint",
+        "Prefix",
+        "MaxResults",
+        "NextMarker",
+        "ContainerItems"
+      ],
+      "properties": {
+        "ServiceEndpoint": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "Prefix": {
+          "type": "string"
+        },
+        "Marker": {
+          "type": "string"
+        },
+        "MaxResults": {
+          "type": "integer"
+        },
+        "ContainerItems": {
+          "xml": {
+            "wrapped": true,
+            "name": "Containers"
+          },
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/ContainerItem"
+          }
+        },
+        "NextMarker": {
+          "type": "string"
+        }
+      }
+    },
+    "CorsRule": {
+      "description": "CORS is an HTTP feature that enables a web application running under one domain to access resources in another domain. Web browsers implement a security restriction known as same-origin policy that prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain (the origin domain) to call APIs in another domain",
+      "type": "object",
+      "required": [
+        "AllowedOrigins",
+        "AllowedMethods",
+        "AllowedHeaders",
+        "ExposedHeaders",
+        "MaxAgeInSeconds"
+      ],
+      "properties": {
+        "AllowedOrigins": {
+          "description": "The origin domains that are permitted to make a request against the storage service via CORS. The origin domain is the domain from which the request originates. Note that the origin must be an exact case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' to allow all origin domains to make requests via CORS.",
+          "type": "string"
+        },
+        "AllowedMethods": {
+          "description": "The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated)",
+          "type": "string"
+        },
+        "AllowedHeaders": {
+          "description": "the request headers that the origin domain may specify on the CORS request.",
+          "type": "string"
+        },
+        "ExposedHeaders": {
+          "description": "The response headers that may be sent in the response to the CORS request and exposed by the browser to the request issuer",
+          "type": "string"
+        },
+        "MaxAgeInSeconds": {
+          "description": "The maximum amount time that a browser should cache the preflight OPTIONS request.",
+          "type": "integer",
+          "minimum": 0
+        }
+      }
+    },
+    "ErrorCode": {
+      "description": "Error codes returned by the service",
+      "type": "string",
+      "enum": [
+        "AccountAlreadyExists",
+        "AccountBeingCreated",
+        "AccountIsDisabled",
+        "AuthenticationFailed",
+        "AuthorizationFailure",
+        "ConditionHeadersNotSupported",
+        "ConditionNotMet",
+        "EmptyMetadataKey",
+        "InsufficientAccountPermissions",
+        "InternalError",
+        "InvalidAuthenticationInfo",
+        "InvalidHeaderValue",
+        "InvalidHttpVerb",
+        "InvalidInput",
+        "InvalidMd5",
+        "InvalidMetadata",
+        "InvalidQueryParameterValue",
+        "InvalidRange",
+        "InvalidResourceName",
+        "InvalidUri",
+        "InvalidXmlDocument",
+        "InvalidXmlNodeValue",
+        "Md5Mismatch",
+        "MetadataTooLarge",
+        "MissingContentLengthHeader",
+        "MissingRequiredQueryParameter",
+        "MissingRequiredHeader",
+        "MissingRequiredXmlNode",
+        "MultipleConditionHeadersNotSupported",
+        "OperationTimedOut",
+        "OutOfRangeInput",
+        "OutOfRangeQueryParameterValue",
+        "RequestBodyTooLarge",
+        "ResourceTypeMismatch",
+        "RequestUrlFailedToParse",
+        "ResourceAlreadyExists",
+        "ResourceNotFound",
+        "ServerBusy",
+        "UnsupportedHeader",
+        "UnsupportedXmlNode",
+        "UnsupportedQueryParameter",
+        "UnsupportedHttpVerb",
+        "AppendPositionConditionNotMet",
+        "BlobAlreadyExists",
+        "BlobNotFound",
+        "BlobOverwritten",
+        "BlobTierInadequateForContentLength",
+        "BlockCountExceedsLimit",
+        "BlockListTooLong",
+        "CannotChangeToLowerTier",
+        "CannotVerifyCopySource",
+        "ContainerAlreadyExists",
+        "ContainerBeingDeleted",
+        "ContainerDisabled",
+        "ContainerNotFound",
+        "ContentLengthLargerThanTierLimit",
+        "CopyAcrossAccountsNotSupported",
+        "CopyIdMismatch",
+        "FeatureVersionMismatch",
+        "IncrementalCopyBlobMismatch",
+        "IncrementalCopyOfEralierVersionSnapshotNotAllowed",
+        "IncrementalCopySourceMustBeSnapshot",
+        "InfiniteLeaseDurationRequired",
+        "InvalidBlobOrBlock",
+        "InvalidBlobTier",
+        "InvalidBlobType",
+        "InvalidBlockId",
+        "InvalidBlockList",
+        "InvalidOperation",
+        "InvalidPageRange",
+        "InvalidSourceBlobType",
+        "InvalidSourceBlobUrl",
+        "InvalidVersionForPageBlobOperation",
+        "LeaseAlreadyPresent",
+        "LeaseAlreadyBroken",
+        "LeaseIdMismatchWithBlobOperation",
+        "LeaseIdMismatchWithContainerOperation",
+        "LeaseIdMismatchWithLeaseOperation",
+        "LeaseIdMissing",
+        "LeaseIsBreakingAndCannotBeAcquired",
+        "LeaseIsBreakingAndCannotBeChanged",
+        "LeaseIsBrokenAndCannotBeRenewed",
+        "LeaseLost",
+        "LeaseNotPresentWithBlobOperation",
+        "LeaseNotPresentWithContainerOperation",
+        "LeaseNotPresentWithLeaseOperation",
+        "MaxBlobSizeConditionNotMet",
+        "NoPendingCopyOperation",
+        "OperationNotAllowedOnIncrementalCopyBlob",
+        "PendingCopyOperation",
+        "PreviousSnapshotCannotBeNewer",
+        "PreviousSnapshotNotFound",
+        "PreviousSnapshotOperationNotSupported",
+        "SequenceNumberConditionNotMet",
+        "SequenceNumberIncrementTooLarge",
+        "SnapshotCountExceeded",
+        "SnaphotOperationRateExceeded",
+        "SnapshotsPresent",
+        "SourceConditionNotMet",
+        "SystemInUse",
+        "TargetConditionNotMet",
+        "UnauthorizedBlobOverwrite",
+        "BlobBeingRehydrated",
+        "BlobArchived",
+        "BlobNotArchived"
+      ],
+      "x-ms-enum": {
+        "name": "StorageErrorCode",
+        "modelAsString": true
+      }
+    },
+    "GeoReplication": {
+      "description": "Geo-Replication information for the Secondary Storage Service",
+      "type": "object",
+      "required": [
+        "Status",
+        "LastSyncTime"
+      ],
+      "properties": {
+        "Status": {
+          "description": "The status of the secondary location",
+          "type": "string",
+          "enum": [
+            "live",
+            "bootstrap",
+            "unavailable"
+          ],
+          "x-ms-enum": {
+            "name": "GeoReplicationStatusType",
+            "modelAsString": true
+          }
+        },
+        "LastSyncTime": {
+          "description": "A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to be available for read operations at the secondary. Primary writes after this point in time may or may not be available for reads.",
+          "type": "string",
+          "format": "date-time-rfc1123"
+        }
+      }
+    },
+    "Logging": {
+      "description": "Azure Analytics Logging settings.",
+      "type": "object",
+      "required": [
+        "Version",
+        "Delete",
+        "Read",
+        "Write",
+        "RetentionPolicy"
+      ],
+      "properties": {
+        "Version": {
+          "description": "The version of Storage Analytics to configure.",
+          "type": "string"
+        },
+        "Delete": {
+          "description": "Indicates whether all delete requests should be logged.",
+          "type": "boolean"
+        },
+        "Read": {
+          "description": "Indicates whether all read requests should be logged.",
+          "type": "boolean"
+        },
+        "Write": {
+          "description": "Indicates whether all write requests should be logged.",
+          "type": "boolean"
+        },
+        "RetentionPolicy": {
+          "$ref": "#/definitions/RetentionPolicy"
+        }
+      }
+    },
+    "ContainerMetadata": {
+      "type": "object",
+      "xml": {
+        "name": "Metadata"
+      },
+      "additionalProperties": {
+        "type": "string"
+      }
+    },
+    "BlobMetadata": {
+      "type": "object",
+      "xml": {
+        "name": "Metadata"
+      },
+      "properties": {
+        "Encrypted": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        }
+      },
+      "additionalProperties": {
+        "type": "string"
+      }
+    },
+    "Metrics": {
+      "description": "a summary of request statistics grouped by API in hour or minute aggregates for blobs",
+      "required": [
+        "Enabled"
+      ],
+      "properties": {
+        "Version": {
+          "description": "The version of Storage Analytics to configure.",
+          "type": "string"
+        },
+        "Enabled": {
+          "description": "Indicates whether metrics are enabled for the Blob service.",
+          "type": "boolean"
+        },
+        "IncludeAPIs": {
+          "description": "Indicates whether metrics should generate summary statistics for called API operations.",
+          "type": "boolean"
+        },
+        "RetentionPolicy": {
+          "$ref": "#/definitions/RetentionPolicy"
+        }
+      }
+    },
+    "PageList": {
+      "description": "the list of pages",
+      "type": "object",
+      "properties": {
+        "PageRange": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/PageRange"
+          }
+        },
+        "ClearRange": {
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/ClearRange"
+          }
+        }
+      }
+    },
+    "PageRange": {
+      "type": "object",
+      "required": [
+        "Start",
+        "End"
+      ],
+      "properties": {
+        "Start": {
+          "type": "integer",
+          "format": "int64",
+          "xml": {
+            "name": "Start"
+          }
+        },
+        "End": {
+          "type": "integer",
+          "format": "int64",
+          "xml": {
+            "name": "End"
+          }
+        }
+      },
+      "xml": {
+        "name": "PageRange"
+      }
+    },
+    "ClearRange": {
+      "type": "object",
+      "required": [
+        "Start",
+        "End"
+      ],
+      "properties": {
+        "Start": {
+          "type": "integer",
+          "format": "int64",
+          "xml": {
+            "name": "Start"
+          }
+        },
+        "End": {
+          "type": "integer",
+          "format": "int64",
+          "xml": {
+            "name": "End"
+          }
+        }
+      },
+      "xml": {
+        "name": "ClearRange"
+      }
+    },
+    "RetentionPolicy": {
+      "description": "the retention policy which determines how long the associated data should persist",
+      "type": "object",
+      "required": [
+        "Enabled"
+      ],
+      "properties": {
+        "Enabled": {
+          "description": "Indicates whether a retention policy is enabled for the storage service",
+          "type": "boolean"
+        },
+        "Days": {
+          "description": "Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this value will be deleted",
+          "type": "integer",
+          "minimum": 1
+        }
+      }
+    },
+    "SignedIdentifier": {
+      "description": "signed identifier",
+      "type": "object",
+      "required": [
+        "Id",
+        "AccessPolicy"
+      ],
+      "properties": {
+        "Id": {
+          "type": "string",
+          "description": "a unique id"
+        },
+        "AccessPolicy": {
+          "$ref": "#/definitions/AccessPolicy"
+        }
+      }
+    },
+    "SignedIdentifiers": {
+      "description": "a collection of signed identifiers",
+      "type": "array",
+      "items": {
+        "$ref": "#/definitions/SignedIdentifier"
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "SignedIdentifiers"
+      }
+    },
+    "StaticWebsite": {
+      "description": "The properties that enable an account to host a static website",
+      "type": "object",
+      "required": [
+        "Enabled"
+      ],
+      "properties": {
+        "Enabled": {
+          "description": "Indicates whether this account is hosting a static website",
+          "type": "boolean"
+        },
+        "IndexDocument": {
+          "description": "The default name of the index page under each directory",
+          "type": "string"
+        },
+        "ErrorDocument404Path": {
+          "description": "The absolute path of the custom 404 page",
+          "type": "string"
+        }
+      }
+    },
+    "StorageServiceProperties": {
+      "description": "Storage Service Properties.",
+      "type": "object",
+      "properties": {
+        "Logging": {
+          "$ref": "#/definitions/Logging"
+        },
+        "HourMetrics": {
+          "$ref": "#/definitions/Metrics"
+        },
+        "MinuteMetrics": {
+          "$ref": "#/definitions/Metrics"
+        },
+        "Cors": {
+          "description": "The set of CORS rules.",
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/CorsRule"
+          },
+          "xml": {
+            "wrapped": true
+          }
+        },
+        "DefaultServiceVersion": {
+          "description": "The default version to use for requests to the Blob service if an incoming request's version is not specified. Possible values include version 2008-10-27 and all more recent versions",
+          "type": "string"
+        },
+        "DeleteRetentionPolicy": {
+          "$ref": "#/definitions/RetentionPolicy"
+        },
+        "StaticWebsite": {
+          "$ref": "#/definitions/StaticWebsite"
+        }
+      }
+    },
+    "StorageServiceStats": {
+      "description": "Stats for the storage service.",
+      "type": "object",
+      "properties": {
+        "GeoReplication": {
+          "$ref": "#/definitions/GeoReplication"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "Url": {
+      "name": "url",
+      "description": "The URL of the service account, container, or blob that is the targe of the desired operation.",
+      "required": true,
+      "type": "string",
+      "in": "path",
+      "x-ms-skip-url-encoding": true
+    },
+    "ApiVersionParameter": {
+      "name": "x-ms-version",
+      "x-ms-client-name": "version",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "description": "Specifies the version of the operation to use for this request.",
+      "enum": [
+        "2018-11-09"
+      ]
+    },
+    "Blob": {
+      "name": "blob",
+      "in": "path",
+      "required": true,
+      "type": "string",
+      "pattern": "^[a-zA-Z0-9]+(?:/[a-zA-Z0-9]+)*(?:\\.[a-zA-Z0-9]+){0,1}$",
+      "minLength": 1,
+      "maxLength": 1024,
+      "x-ms-parameter-location": "client",
+      "description": "The blob name."
+    },
+    "BlobCacheControl": {
+      "name": "x-ms-blob-cache-control",
+      "x-ms-client-name": "blobCacheControl",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. Sets the blob's cache control. If specified, this property is stored with the blob and returned with a read request."
+    },
+    "BlobConditionAppendPos": {
+      "name": "x-ms-blob-condition-appendpos",
+      "x-ms-client-name": "appendPosition",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "append-position-access-conditions"
+      },
+      "description": "Optional conditional header, used only for the Append Block operation. A number indicating the byte offset to compare. Append Block will succeed only if the append position is equal to this number. If it is not, the request will fail with the AppendPositionConditionNotMet error (HTTP status code 412 - Precondition Failed)."
+    },
+    "BlobConditionMaxSize": {
+      "name": "x-ms-blob-condition-maxsize",
+      "x-ms-client-name": "maxSize",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "append-position-access-conditions"
+      },
+      "description": "Optional conditional header. The max length in bytes permitted for the append blob. If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than the value specified in this header, the request will fail with MaxBlobSizeConditionNotMet error (HTTP status code 412 - Precondition Failed)."
+    },
+    "BlobPublicAccess": {
+      "name": "x-ms-blob-public-access",
+      "x-ms-client-name": "access",
+      "in": "header",
+      "required": false,
+      "x-ms-parameter-location": "method",
+      "description": "Specifies whether data in the container may be accessed publicly and the level of access",
+      "type": "string",
+      "enum": [
+        "container",
+        "blob"
+      ],
+      "x-ms-enum": {
+        "name": "PublicAccessType",
+        "modelAsString": true
+      }
+    },
+    "AccessTier": {
+      "name": "x-ms-access-tier",
+      "x-ms-client-name": "tier",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "enum": [
+        "P4",
+        "P6",
+        "P10",
+        "P20",
+        "P30",
+        "P40",
+        "P50",
+        "Hot",
+        "Cool",
+        "Archive"
+      ],
+      "x-ms-enum": {
+        "name": "AccessTier",
+        "modelAsString": true
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Indicates the tier to be set on the blob."
+    },
+    "BlobContentDisposition": {
+      "name": "x-ms-blob-content-disposition",
+      "x-ms-client-name": "blobContentDisposition",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. Sets the blob's Content-Disposition header."
+    },
+    "BlobContentEncoding": {
+      "name": "x-ms-blob-content-encoding",
+      "x-ms-client-name": "blobContentEncoding",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. Sets the blob's content encoding. If specified, this property is stored with the blob and returned with a read request."
+    },
+    "BlobContentLanguage": {
+      "name": "x-ms-blob-content-language",
+      "x-ms-client-name": "blobContentLanguage",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. Set the blob's content language. If specified, this property is stored with the blob and returned with a read request."
+    },
+    "BlobContentLengthOptional": {
+      "name": "x-ms-blob-content-length",
+      "x-ms-client-name": "blobContentLength",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "description": "This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte boundary."
+    },
+    "BlobContentLengthRequired": {
+      "name": "x-ms-blob-content-length",
+      "x-ms-client-name": "blobContentLength",
+      "in": "header",
+      "required": true,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "description": "This header specifies the maximum size for the page blob, up to 1 TB. The page blob size must be aligned to a 512-byte boundary."
+    },
+    "BlobContentMD5": {
+      "name": "x-ms-blob-content-md5",
+      "x-ms-client-name": "blobContentMD5",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "byte",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. An MD5 hash of the blob content. Note that this hash is not validated, as the hashes for the individual blocks were validated when each was uploaded."
+    },
+    "BlobContentType": {
+      "name": "x-ms-blob-content-type",
+      "x-ms-client-name": "blobContentType",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "blob-HTTP-headers"
+      },
+      "description": "Optional. Sets the blob's content type. If specified, this property is stored with the blob and returned with a read request."
+    },
+    "BlobSequenceNumber": {
+      "name": "x-ms-blob-sequence-number",
+      "x-ms-client-name": "blobSequenceNumber",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "default": 0,
+      "x-ms-parameter-location": "method",
+      "description": "Set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The value of the sequence number must be between 0 and 2^63 - 1."
+    },
+    "BlockId": {
+      "name": "blockid",
+      "x-ms-client-name": "blockId",
+      "in": "query",
+      "type": "string",
+      "required": true,
+      "x-ms-parameter-location": "method",
+      "description": "A valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified for the blockid parameter must be the same size for each block."
+    },
+    "BlockListType": {
+      "name": "blocklisttype",
+      "x-ms-client-name": "listType",
+      "in": "query",
+      "required": true,
+      "default": "committed",
+      "x-ms-parameter-location": "method",
+      "description": "Specifies whether to return the list of committed blocks, the list of uncommitted blocks, or both lists together.",
+      "type": "string",
+      "enum": [
+        "committed",
+        "uncommitted",
+        "all"
+      ],
+      "x-ms-enum": {
+        "name": "BlockListType",
+        "modelAsString": false
+      }
+    },
+    "Body": {
+      "name": "body",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "type": "object",
+        "format": "file"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Initial data"
+    },
+    "CacheControl": {
+      "name": "Cache-Control",
+      "x-ms-client-name": "cacheControl",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Cache control for given resource"
+    },
+    "ContainerAcl": {
+      "name": "containerAcl",
+      "in": "body",
+      "schema": {
+        "$ref": "#/definitions/SignedIdentifiers"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "the acls for the container"
+    },
+    "CopyId": {
+      "name": "copyid",
+      "x-ms-client-name": "copyId",
+      "in": "query",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "The copy identifier provided in the x-ms-copy-id header of the original Copy Blob operation."
+    },
+    "ClientRequestId": {
+      "name": "x-ms-client-request-id",
+      "x-ms-client-name": "requestId",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled."
+    },
+    "ContainerName": {
+      "name": "containerName",
+      "in": "path",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "client",
+      "description": "The container name."
+    },
+    "ContentCrc64": {
+      "name": "x-ms-content-crc64",
+      "x-ms-client-name": "transactionalContentCrc64",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "byte",
+      "x-ms-parameter-location": "method",
+      "description": "Specify the transactional crc64 for the body, to be validated by the service."
+    },
+    "ContentLength": {
+      "name": "Content-Length",
+      "in": "header",
+      "required": true,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "description": "The length of the request."
+    },
+    "ContentMD5": {
+      "name": "Content-MD5",
+      "x-ms-client-name": "transactionalContentMD5",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "byte",
+      "x-ms-parameter-location": "method",
+      "description": "Specify the transactional md5 for the body, to be validated by the service."
+    },
+    "CopySource": {
+      "name": "x-ms-copy-source",
+      "x-ms-client-name": "copySource",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "format": "url",
+      "x-ms-parameter-location": "method",
+      "description": "Specifies the name of the source page blob snapshot. This value is a URL of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would appear in a request URI. The source blob must either be public or must be authenticated via a shared access signature."
+    },
+    "DeleteSnapshots": {
+      "name": "x-ms-delete-snapshots",
+      "x-ms-client-name": "deleteSnapshots",
+      "description": "Required if the blob has associated snapshots. Specify one of the following two options: include: Delete the base blob and all of its snapshots. only: Delete only the blob's snapshots and not the blob itself",
+      "x-ms-parameter-location": "method",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "enum": [
+        "include",
+        "only"
+      ],
+      "x-ms-enum": {
+        "name": "DeleteSnapshotsOptionType",
+        "modelAsString": false
+      }
+    },
+    "Delimiter": {
+      "name": "delimiter",
+      "description": "When the request includes this parameter, the operation returns a BlobPrefix element in the response body that acts as a placeholder for all blobs whose names begin with the same substring up to the appearance of the delimiter character. The delimiter may be a single character or a string.",
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "in": "query",
+      "required": true
+    },
+    "EncryptionKey": {
+      "name": "x-ms-encryption-key",
+      "x-ms-client-name": "EncryptionKey",
+      "type": "string",
+      "in": "query",
+      "required": false,
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Specifies the encryption key to use to encrypt the data provided in the request. If not specified, encryption is performed with the root account encryption key.  For more information, see Encryption at Rest for Azure Storage Services."
+    },
+    "EncryptionKeySha256": {
+      "name": "x-ms-encryption-key-sha256",
+      "x-ms-client-name": "encryptionKeySha256",
+      "type": "string",
+      "in": "query",
+      "required": false,
+      "x-ms-parameter-location": "method",
+      "description": "The SHA-256 hash of the provided encryption key. Must be provided if the x-ms-encryption-key header is provided."
+    },
+    "EncryptionAlgorithm": {
+      "name": "x-ms-encryption-algorithm",
+      "x-ms-client-name": "EncryptionAlgorithm",
+      "type": "string",
+      "in": "query",
+      "required": false,
+      "enum": [
+        "AES256"
+      ],
+      "x-ms-enum": {
+        "name": "EncryptionAlgorithmType",
+        "modelAsString": false
+      },
+      "x-ms-parameter-location": "method",
+      "description": "The algorithm used to produce the encryption key hash. Currently, the only accepted value is \"AES256\". Must be provided if the x-ms-encryption-key header is provided."
+    },
+    "GetRangeContentMD5": {
+      "name": "x-ms-range-get-content-md5",
+      "x-ms-client-name": "rangeGetContentMD5",
+      "in": "header",
+      "required": false,
+      "type": "boolean",
+      "x-ms-parameter-location": "method",
+      "description": "When set to true and specified together with the Range, the service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB in size."
+    },
+    "IfMatch": {
+      "name": "If-Match",
+      "x-ms-client-name": "ifMatch",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "etag",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "modified-access-conditions"
+      },
+      "description": "Specify an ETag value to operate only on blobs with a matching value."
+    },
+    "IfModifiedSince": {
+      "name": "If-Modified-Since",
+      "x-ms-client-name": "ifModifiedSince",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "date-time-rfc1123",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "modified-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has been modified since the specified date/time."
+    },
+    "IfNoneMatch": {
+      "name": "If-None-Match",
+      "x-ms-client-name": "ifNoneMatch",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "etag",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "modified-access-conditions"
+      },
+      "description": "Specify an ETag value to operate only on blobs without a matching value."
+    },
+    "IfUnmodifiedSince": {
+      "name": "If-Unmodified-Since",
+      "x-ms-client-name": "ifUnmodifiedSince",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "date-time-rfc1123",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "modified-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has not been modified since the specified date/time."
+    },
+    "IfSequenceNumberEqualTo": {
+      "name": "x-ms-if-sequence-number-eq",
+      "x-ms-client-name": "ifSequenceNumberEqualTo",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "sequence-number-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has the specified sequence number."
+    },
+    "IfSequenceNumberLessThan": {
+      "name": "x-ms-if-sequence-number-lt",
+      "x-ms-client-name": "ifSequenceNumberLessThan",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "sequence-number-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has a sequence number less than the specified."
+    },
+    "IfSequenceNumberLessThanOrEqualTo": {
+      "name": "x-ms-if-sequence-number-le",
+      "x-ms-client-name": "ifSequenceNumberLessThanOrEqualTo",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "sequence-number-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has a sequence number less than or equal to the specified."
+    },
+    "KeyInfo": {
+      "name": "KeyInfo",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "$ref": "#/definitions/KeyInfo"
+      }
+    },
+    "ListBlobsInclude": {
+      "name": "include",
+      "in": "query",
+      "required": false,
+      "type": "array",
+      "collectionFormat": "csv",
+      "items": {
+        "type": "string",
+        "enum": [
+          "copy",
+          "deleted",
+          "metadata",
+          "snapshots",
+          "uncommittedblobs"
+        ],
+        "x-ms-enum": {
+          "name": "ListBlobsIncludeItem",
+          "modelAsString": false
+        }
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Include this parameter to specify one or more datasets to include in the response."
+    },
+    "ListContainersInclude": {
+      "name": "include",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "enum": [
+        "metadata"
+      ],
+      "x-ms-enum": {
+        "name": "ListContainersIncludeType",
+        "modelAsString": false
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Include this parameter to specify that the container's metadata be returned as part of the response body."
+    },
+    "LeaseBreakPeriod": {
+      "name": "x-ms-lease-break-period",
+      "x-ms-client-name": "breakPeriod",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "x-ms-parameter-location": "method",
+      "description": "For a break operation, proposed duration the lease should continue before it is broken, in seconds, between 0 and 60. This break period is only used if it is shorter than the time remaining on the lease. If longer, the time remaining on the lease is used. A new lease will not be available before the break period has expired, but the lease may be held for longer than the break period. If this header does not appear with a break operation, a fixed-duration lease breaks after the remaining lease period elapses, and an infinite lease breaks immediately."
+    },
+    "LeaseDuration": {
+      "name": "x-ms-lease-duration",
+      "x-ms-client-name": "duration",
+      "in": "header",
+      "required": false,
+      "type": "integer",
+      "x-ms-parameter-location": "method",
+      "description": "Specifies the duration of the lease, in seconds, or negative one (-1) for a lease that never expires. A non-infinite lease can be between 15 and 60 seconds. A lease duration cannot be changed using renew or change."
+    },
+    "LeaseIdOptional": {
+      "name": "x-ms-lease-id",
+      "x-ms-client-name": "leaseId",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "lease-access-conditions"
+      },
+      "description": "If specified, the operation only succeeds if the resource's lease is active and matches this ID."
+    },
+    "LeaseIdRequired": {
+      "name": "x-ms-lease-id",
+      "x-ms-client-name": "leaseId",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Specifies the current lease ID on the resource."
+    },
+    "Marker": {
+      "name": "marker",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "description": "A string value that identifies the portion of the list of containers to be returned with the next listing operation. The operation returns the NextMarker value within the response body if the listing operation did not return all containers remaining to be listed with the current page. The NextMarker value can be used as the value for the marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the client.",
+      "x-ms-parameter-location": "method"
+    },
+    "MaxResults": {
+      "name": "maxresults",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 1,
+      "x-ms-parameter-location": "method",
+      "description": "Specifies the maximum number of containers to return. If the request does not specify maxresults, or specifies a value greater than 5000, the server will return up to 5000 items. Note that if the listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder of the results. For this reason, it is possible that the service will return fewer results than specified by maxresults, or than the default of 5000."
+    },
+    "Metadata": {
+      "name": "x-ms-meta",
+      "x-ms-client-name": "metadata",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are specified, the operation will copy the metadata from the source blob or file to the destination blob. If one or more name-value pairs are specified, the destination blob is created with the specified metadata, and metadata is not copied from the source blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more information.",
+      "x-ms-header-collection-prefix": "x-ms-meta-"
+    },
+    "Prefix": {
+      "name": "prefix",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "description": "Filters the results to return only containers whose name begins with the specified prefix.",
+      "x-ms-parameter-location": "method"
+    },
+    "PrevSnapshot": {
+      "name": "prevsnapshot",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Optional in version 2015-07-08 and newer. The prevsnapshot parameter is a DateTime value that specifies that the response will contain only pages that were changed between target blob and previous snapshot. Changed pages include both updated and cleared pages. The target blob may be a snapshot, as long as the snapshot specified by prevsnapshot is the older of the two. Note that incremental snapshots are currently supported only for blobs created on or after January 1, 2016."
+    },
+    "ProposedLeaseIdOptional": {
+      "name": "x-ms-proposed-lease-id",
+      "x-ms-client-name": "proposedLeaseId",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string formats."
+    },
+    "ProposedLeaseIdRequired": {
+      "name": "x-ms-proposed-lease-id",
+      "x-ms-client-name": "proposedLeaseId",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Proposed lease ID, in a GUID string format. The Blob service returns 400 (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor (String) for a list of valid GUID string formats."
+    },
+    "Range": {
+      "name": "x-ms-range",
+      "x-ms-client-name": "range",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Return only the bytes of the blob in the specified range."
+    },
+    "RangeRequiredPutPageFromUrl": {
+      "name": "x-ms-range",
+      "x-ms-client-name": "range",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "The range of bytes to which the source range would be written. The range should be 512 aligned and range-end is required."
+    },
+    "SequenceNumberAction": {
+      "name": "x-ms-sequence-number-action",
+      "x-ms-client-name": "sequenceNumberAction",
+      "in": "header",
+      "required": true,
+      "x-ms-parameter-location": "method",
+      "description": "Required if the x-ms-blob-sequence-number header is set for the request. This property applies to page blobs only. This property indicates how the service should modify the blob's sequence number",
+      "type": "string",
+      "enum": [
+        "max",
+        "update",
+        "increment"
+      ],
+      "x-ms-enum": {
+        "name": "SequenceNumberActionType",
+        "modelAsString": false
+      }
+    },
+    "Snapshot": {
+      "name": "snapshot",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "The snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to retrieve. For more information on working with blob snapshots, see Creating a Snapshot of a Blob."
+    },
+    "SourceContentMD5": {
+      "name": "x-ms-source-content-md5",
+      "x-ms-client-name": "sourceContentMD5",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "byte",
+      "x-ms-parameter-location": "method",
+      "description": "Specify the md5 calculated for the range of bytes that must be read from the copy source."
+    },
+    "SourceRange": {
+      "name": "x-ms-source-range",
+      "x-ms-client-name": "sourceRange",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Bytes of source data in the specified range."
+      },
+      "SourceRangeRequiredPutPageFromUrl": {
+        "name": "x-ms-source-range",
+        "x-ms-client-name": "sourceRange",
+        "in": "header",
+        "required": true,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "description": "Bytes of source data in the specified range. The length of this range should match the ContentLength header and x-ms-range/Range destination range header."
+    },
+    "SourceIfMatch": {
+      "name": "x-ms-source-if-match",
+      "x-ms-client-name": "sourceIfMatch",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "etag",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "source-modified-access-conditions"
+      },
+      "description": "Specify an ETag value to operate only on blobs with a matching value."
+    },
+    "SourceIfModifiedSince": {
+      "name": "x-ms-source-if-modified-since",
+      "x-ms-client-name": "sourceIfModifiedSince",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "date-time-rfc1123",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "source-modified-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has been modified since the specified date/time."
+    },
+    "SourceIfNoneMatch": {
+      "name": "x-ms-source-if-none-match",
+      "x-ms-client-name": "sourceIfNoneMatch",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "etag",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "source-modified-access-conditions"
+      },
+      "description": "Specify an ETag value to operate only on blobs without a matching value."
+    },
+    "SourceIfUnmodifiedSince": {
+      "name": "x-ms-source-if-unmodified-since",
+      "x-ms-client-name": "sourceIfUnmodifiedSince",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "format": "date-time-rfc1123",
+      "x-ms-parameter-location": "method",
+      "x-ms-parameter-grouping": {
+        "name": "source-modified-access-conditions"
+      },
+      "description": "Specify this header value to operate only on a blob if it has not been modified since the specified date/time."
+    },
+      "SourceLeaseId": {
+        "name": "x-ms-source-lease-id",
+        "x-ms-client-name": "sourceLeaseId",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "description": "A lease ID for the source path. If specified, the source path must have an active lease and the leaase ID must match."
+      },
+    "SourceUrl": {
+      "name": "x-ms-copy-source",
+      "x-ms-client-name": "sourceUrl",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "format": "url",
+      "x-ms-parameter-location": "method",
+      "description": "Specify a URL to the copy source."
+    },
+    "StorageServiceProperties": {
+      "name": "StorageServiceProperties",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "$ref": "#/definitions/StorageServiceProperties"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "The StorageService properties."
+    },
+    "Timeout": {
+      "name": "timeout",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 0,
+      "x-ms-parameter-location": "method",
+      "description": "The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Blob Service Operations."
+      },
+      "VersionId": {
+        "name": "versionid",
+        "x-ms-client-name": "versionId",
+        "in": "query",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "description": "The version ID parameter is an opaque DateTime value that, when present, specifies the blob version to retrieve."
+      },
+      "XMsCacheControl": {
+        "name": "x-ms-cache-control",
+        "x-ms-client-name": "cacheControl",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "x-ms-parameter-grouping": {
+          "name": "directory-http-headers"
+        },
+        "description": "Cache control for given resource"
+      },
+      "XMsContentType": {
+        "name": "x-ms-content-type",
+        "x-ms-client-name": "contentType",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "x-ms-parameter-grouping": {
+          "name": "directory-http-headers"
+        },
+        "description": "Content type for given resource"
+      },
+      "XMsContentEncoding": {
+        "name": "x-ms-content-encoding",
+        "x-ms-client-name": "contentEncoding",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "x-ms-parameter-grouping": {
+          "name": "directory-http-headers"
+        },
+        "description": "Content encoding for given resource"
+      },
+      "XMsContentLanguage": {
+        "name": "x-ms-content-language",
+        "x-ms-client-name": "contentLanguage",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "x-ms-parameter-grouping": {
+          "name": "directory-http-headers"
+        },
+        "description": "Content language for given resource"
+      },
+      "XMsContentDisposition": {
+        "name": "x-ms-content-disposition",
+        "x-ms-client-name": "contentDisposition",
+        "in": "header",
+        "required": false,
+        "type": "string",
+        "x-ms-parameter-location": "method",
+        "x-ms-parameter-grouping": {
+          "name": "directory-http-headers"
+        },
+        "description": "Content disposition for given resource"
+    }
+  }
+}
\ No newline at end of file
diff --git a/storage/client/file/swagger/file.json b/storage/client/file/swagger/file.json
new file mode 100644
index 0000000000000..06240e4359346
--- /dev/null
+++ b/storage/client/file/swagger/file.json
@@ -0,0 +1,3616 @@
+{
+    "swagger": "2.0",
+    "info": {
+        "title": "Azure File Storage",
+        "version": "2018-11-09",
+        "x-ms-code-generation-settings": {
+            "header": "MIT",
+            "strictSpecAdherence": false
+        }
+    },
+    "x-ms-parameterized-host": {
+        "hostTemplate": "{url}",
+        "useSchemePrefix": false,
+        "positionInOperation": "first",
+        "parameters": [{
+            "$ref": "#/parameters/Url"
+        }]
+    },
+    "securityDefinitions": {
+        "File_shared_key": {
+            "type": "apiKey",
+            "name": "Authorization",
+            "in": "header"
+        }
+    },
+    "schemes": [
+        "https"
+    ],
+    "consumes": [
+        "application/xml"
+    ],
+    "produces": [
+        "application/xml"
+    ],
+    "paths": {
+
+    },
+    "x-ms-paths": {
+        "/?restype=service&comp=properties": {
+            "put": {
+                "tags": [
+                    "service"
+                ],
+                "operationId": "Service_SetProperties",
+                "description": "Sets properties for a storage account's File service endpoint, including properties for Storage Analytics metrics and CORS (Cross-Origin Resource Sharing) rules.",
+                "parameters": [{
+                        "$ref": "#/parameters/StorageServiceProperties"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "202": {
+                        "description": "Success (Accepted)",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "get": {
+                "tags": [
+                    "service"
+                ],
+                "operationId": "Service_GetProperties",
+                "description": "Gets the properties of a storage account's File service, including properties for Storage Analytics metrics and CORS (Cross-Origin Resource Sharing) rules.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageServiceProperties"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "service"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "properties"
+                    ]
+                }
+            ]
+        },
+        "/?comp=list": {
+            "get": {
+                "tags": [
+                    "service"
+                ],
+                "operationId": "Service_ListSharesSegment",
+                "description": "The List Shares Segment operation returns a list of the shares and share snapshots under the specified account.",
+                "parameters": [{
+                        "$ref": "#/parameters/Prefix"
+                    },
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/MaxResults"
+                    },
+                    {
+                        "$ref": "#/parameters/ListSharesInclude"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/ListSharesResponse"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                },
+                "x-ms-pageable": {
+                    "nextLinkName": "NextMarker"
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "list"
+                ]
+            }]
+        },
+        "/{shareName}?restype=share": {
+            "put": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_Create",
+                "description": "Creates a new share under the specified account. If the share with the same name already exists, the operation fails.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareQuota"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "201": {
+                        "description": "Success, Share created.",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the share, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties or metadata updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "get": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_GetProperties",
+                "description": "Returns all user-defined metadata and system properties for the specified share or share snapshot. The data returned does not include the share's list of files.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "x-ms-meta": {
+                                "type": "string",
+                                "description": "A set of name-value pairs that contain the user-defined metadata of the share.",
+                                "x-ms-client-name": "Metadata",
+                                "x-ms-header-collection-prefix": "x-ms-meta-"
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-share-quota": {
+                                "x-ms-client-name": "Quota",
+                                "type": "integer",
+                                "format": "int64",
+                                "description": "Returns the current share quota in GB."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "delete": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_Delete",
+                "description": "Operation marks the specified share or share snapshot for deletion. The share or share snapshot and any files contained within it are later deleted during garbage collection.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "$ref": "#/parameters/DeleteSnapshots"
+                    }
+                ],
+                "responses": {
+                    "202": {
+                        "description": "Accepted",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "restype",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "share"
+                ]
+            }]
+        },
+        "/{shareName}?restype=share&comp=snapshot": {
+            "put": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_CreateSnapshot",
+                "description": "Creates a read-only snapshot of a share.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "201": {
+                        "description": "Success, Share snapshot created.",
+                        "headers": {
+                            "x-ms-snapshot": {
+                                "x-ms-client-name": "Snapshot",
+                                "type": "string",
+                                "description": "This header is a DateTime value that uniquely identifies the share snapshot. The value of this header may be used in subsequent requests to access the share snapshot. This value is opaque."
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the share snapshot, in quotes. A share snapshot cannot be modified, so the ETag of a given share snapshot never changes. However, if new metadata was supplied with the Snapshot Share request then the ETag of the share snapshot differs from that of the base share. If no metadata was specified with the request, the ETag of the share snapshot is identical to that of the base share at the time the share snapshot was taken."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. A share snapshot cannot be modified, so the last modified time of a given share snapshot never changes. However, if new metadata was supplied with the Snapshot Share request then the last modified time of the share snapshot differs from that of the base share. If no metadata was specified with the request, the last modified time of the share snapshot is identical to that of the base share at the time the share snapshot was taken."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "share"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "snapshot"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}?restype=share&comp=properties": {
+            "put": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_SetQuota",
+                "description": "Sets quota for the specified share.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareQuota"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "share"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "properties"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}?restype=share&comp=metadata": {
+            "put": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_SetMetadata",
+                "description": "Sets one or more user-defined name-value pairs for the specified share.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "share"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "metadata"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}?restype=share&comp=acl": {
+            "get": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_GetAccessPolicy",
+                "description": "Returns information about stored access policies specified on the share.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/SignedIdentifiers"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "put": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_SetAccessPolicy",
+                "description": "Sets a stored access policy for use with shared access signatures.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareAcl"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "share"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "acl"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}?restype=share&comp=stats": {
+            "get": {
+                "tags": [
+                    "share"
+                ],
+                "operationId": "Share_GetStatistics",
+                "description": "Retrieves statistics related to the share.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the share or its properties updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/ShareStats"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "share"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "stats"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}/{directory}?restype=directory": {
+            "put": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_Create",
+                "description": "Creates a new directory under the specified share or parent directory.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "201": {
+                        "description": "Success, Directory created.",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the directory, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the directory or its properties updates the last modified time. Operations on files do not affect the last modified time of the directory."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "get": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_GetProperties",
+                "description": "Returns all system properties for the specified directory, and can also be used to check the existence of a directory. The data returned does not include the files in the directory or any subdirectories.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "x-ms-meta": {
+                                "type": "string",
+                                "description": "A set of name-value pairs that contain metadata for the directory.",
+                                "x-ms-client-name": "Metadata",
+                                "x-ms-header-collection-prefix": "x-ms-meta-"
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the Directory was last modified. Operations on files within the directory do not affect the last modified time of the directory."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the directory metadata is completely encrypted using the specified algorithm. Otherwise, the value is set to false."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "delete": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_Delete",
+                "description": "Removes the specified empty directory. Note that the directory must be empty before it can be deleted.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "202": {
+                        "description": "Success (Accepted).",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "restype",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "directory"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}?restype=directory&comp=metadata": {
+            "put": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_SetMetadata",
+                "description": "Updates user defined metadata for the specified directory.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success (OK).",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the directory, in quotes."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "directory"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "metadata"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}/{directory}?restype=directory&comp=list": {
+            "get": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_ListFilesAndDirectoriesSegment",
+                "description": "Returns a list of files or directories under the specified share or directory. It lists the contents only for a single level of the directory hierarchy.",
+                "parameters": [
+                    {
+                        "$ref": "#/parameters/Prefix"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/MaxResults"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "Specifies the format in which the results are returned. Currently this value is 'application/xml'."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/ListFilesAndDirectoriesSegmentResponse"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                },
+                "x-ms-pageable": {
+                    "nextLinkName": "NextMarker"
+                }
+            },
+            "parameters": [{
+                    "name": "restype",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "directory"
+                    ]
+                },
+                {
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "list"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}/{directory}?comp=listhandles": {
+            "get":{
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_ListHandles",
+                "description": "Lists handles for directory.",
+                "parameters":[
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/MaxResults"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Recursive"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "Specifies the format in which the results are returned. Currently this value is 'application/xml'."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/ListHandlesResponse"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "listhandles"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}/{directory}?comp=forceclosehandles": {
+            "put": {
+                "tags": [
+                    "directory"
+                ],
+                "operationId": "Directory_ForceCloseHandles",
+                "description": "Closes all handles open for given directory.",
+                "parameters": [
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/HandleId"
+                    },
+                    {
+                        "$ref": "#/parameters/Recursive"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-marker": {
+                                "x-ms-client-name": "marker",
+                                "type": "string",
+                                "description": "A string describing next handle to be closed. It is returned when more handles need to be closed to complete the request."
+                            },
+                            "x-ms-number-of-handles-closed": {
+                                "x-ms-client-name": "numberOfHandlesClosed",
+                                "type": "integer",
+                                "description": "Contains count of number of handles closed."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "forceclosehandles"
+                ]
+            }
+        ]
+        },
+        "/{shareName}/{directory}/{fileName}": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_Create",
+                "description": "Creates a new file or replaces a file. Note it only initializes the file with no content.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "name": "x-ms-content-length",
+                        "x-ms-client-name": "fileContentLength",
+                        "in": "header",
+                        "description": "Specifies the maximum size for the file, up to 1 TB.",
+                        "required": true,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "$ref": "#/parameters/FileType"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentType"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentEncoding"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentLanguage"
+                    },
+                    {
+                        "$ref": "#/parameters/FileCacheControl"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentMD5"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentDisposition"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    }
+                ],
+                "responses": {
+                    "201": {
+                        "description": "Success, File created.",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the file, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the share was last modified. Any operation that modifies the directory or its properties updates the last modified time. Operations on files do not affect the last modified time of the directory."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "get": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_Download",
+                "description": "Reads or downloads a file from the system, including its metadata and properties.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "$ref": "#/parameters/Range"
+                    },
+                    {
+                        "$ref": "#/parameters/GetRangeContentMD5"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Succeeded to read the entire file.",
+                        "headers": {
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the file was last modified. Any operation that modifies the file or its properties updates the last modified time."
+                            },
+                            "x-ms-meta": {
+                                "type": "string",
+                                "description": "A set of name-value pairs associated with this file as user-defined metadata.",
+                                "x-ms-client-name": "Metadata",
+                                "x-ms-header-collection-prefix": "x-ms-meta-"
+                            },
+                            "Content-Length": {
+                                "type": "integer",
+                                "format": "int64",
+                                "description": "The number of bytes present in the response body."
+                            },
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "The content type specified for the file. The default content type is 'application/octet-stream'"
+                            },
+                            "Content-Range": {
+                                "type": "string",
+                                "description": "Indicates the range of bytes returned if the client requested a subset of the file by setting the Range request header."
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Content-MD5": {
+                                "type": "string",
+                                "format": "byte",
+                                "description": "If the file has an MD5 hash and the request is to read the full file, this response header is returned so that the client can check for message content integrity. If the request is to read a specified range and the 'x-ms-range-get-content-md5' is set to true, then the request returns an MD5 hash for the range, as long as the range size is less than or equal to 4 MB. If neither of these sets of conditions is true, then no value is returned for the 'Content-MD5' header."
+                            },
+                            "Content-Encoding": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the Content-Encoding request header."
+                            },
+                            "Cache-Control": {
+                                "type": "string",
+                                "description": "Returned if it was previously specified for the file."
+                            },
+                            "Content-Disposition": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the 'x-ms-content-disposition' header and specifies how to process the response."
+                            },
+                            "Content-Language": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the Content-Language request header."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Accept-Ranges": {
+                                "type": "string",
+                                "description": "Indicates that the service supports requests for partial file content."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-copy-completion-time": {
+                                "x-ms-client-name": "CopyCompletionTime",
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Conclusion time of the last attempted Copy File operation where this file was the destination file. This value can specify the time of a completed, aborted, or failed copy attempt."
+                            },
+                            "x-ms-copy-status-description": {
+                                "x-ms-client-name": "CopyStatusDescription",
+                                "type": "string",
+                                "description": "Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal or non-fatal copy operation failure."
+                            },
+                            "x-ms-copy-id": {
+                                "x-ms-client-name": "CopyId",
+                                "type": "string",
+                                "description": "String identifier for the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-progress": {
+                                "x-ms-client-name": "CopyProgress",
+                                "type": "string",
+                                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy File operation where this file was the destination file. Can show between 0 and Content-Length bytes copied."
+                            },
+                            "x-ms-copy-source": {
+                                "x-ms-client-name": "CopySource",
+                                "type": "string",
+                                "description": "URL up to 2KB in length that specifies the source file used in the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-status": {
+                                "x-ms-client-name": "CopyStatus",
+                                "description": "State of the copy operation identified by 'x-ms-copy-id'.",
+                                "type": "string",
+                                "enum": [
+                                    "pending",
+                                    "success",
+                                    "aborted",
+                                    "failed"
+                                ],
+                                "x-ms-enum": {
+                                    "name": "CopyStatusType",
+                                    "modelAsString": false
+                                }
+                            },
+                            "x-ms-content-md5": {
+                                "x-ms-client-name": "FileContentMD5",
+                                "type": "string",
+                                "format": "byte",
+                                "description": "If the file has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole file's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range."
+                            },
+                            "x-ms-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the file data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the file is unencrypted, or if only parts of the file/application metadata are encrypted)."
+                            }
+                        },
+                        "schema": {
+                            "type": "object",
+                            "format": "file"
+                        }
+                    },
+                    "206": {
+                        "description": "Succeeded to read a specified range of the file.",
+                        "headers": {
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the file was last modified. Any operation that modifies the file or its properties updates the last modified time."
+                            },
+                            "x-ms-meta": {
+                                "type": "string",
+                                "description": "A set of name-value pairs associated with this file as user-defined metadata.",
+                                "x-ms-client-name": "Metadata",
+                                "x-ms-header-collection-prefix": "x-ms-meta-"
+                            },
+                            "Content-Length": {
+                                "type": "integer",
+                                "format": "int64",
+                                "description": "The number of bytes present in the response body."
+                            },
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "The content type specified for the file. The default content type is 'application/octet-stream'"
+                            },
+                            "Content-Range": {
+                                "type": "string",
+                                "description": "Indicates the range of bytes returned if the client requested a subset of the file by setting the Range request header."
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Content-MD5": {
+                                "type": "string",
+                                "format": "byte",
+                                "description": "If the file has an MD5 hash and the request is to read the full file, this response header is returned so that the client can check for message content integrity. If the request is to read a specified range and the 'x-ms-range-get-content-md5' is set to true, then the request returns an MD5 hash for the range, as long as the range size is less than or equal to 4 MB. If neither of these sets of conditions is true, then no value is returned for the 'Content-MD5' header."
+                            },
+                            "Content-Encoding": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the Content-Encoding request header."
+                            },
+                            "Cache-Control": {
+                                "type": "string",
+                                "description": "Returned if it was previously specified for the file."
+                            },
+                            "Content-Disposition": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the 'x-ms-content-disposition' header and specifies how to process the response."
+                            },
+                            "Content-Language": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the Content-Language request header."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Accept-Ranges": {
+                                "type": "string",
+                                "description": "Indicates that the service supports requests for partial file content."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-copy-completion-time": {
+                                "x-ms-client-name": "CopyCompletionTime",
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Conclusion time of the last attempted Copy File operation where this file was the destination file. This value can specify the time of a completed, aborted, or failed copy attempt."
+                            },
+                            "x-ms-copy-status-description": {
+                                "x-ms-client-name": "CopyStatusDescription",
+                                "type": "string",
+                                "description": "Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal or non-fatal copy operation failure."
+                            },
+                            "x-ms-copy-id": {
+                                "x-ms-client-name": "CopyId",
+                                "type": "string",
+                                "description": "String identifier for the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-progress": {
+                                "x-ms-client-name": "CopyProgress",
+                                "type": "string",
+                                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy File operation where this file was the destination file. Can show between 0 and Content-Length bytes copied."
+                            },
+                            "x-ms-copy-source": {
+                                "x-ms-client-name": "CopySource",
+                                "type": "string",
+                                "description": "URL up to 2KB in length that specifies the source file used in the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-status": {
+                                "x-ms-client-name": "CopyStatus",
+                                "description": "State of the copy operation identified by 'x-ms-copy-id'.",
+                                "type": "string",
+                                "enum": [
+                                    "pending",
+                                    "success",
+                                    "aborted",
+                                    "failed"
+                                ],
+                                "x-ms-enum": {
+                                    "name": "CopyStatusType",
+                                    "modelAsString": false
+                                }
+                            },
+                            "x-ms-content-md5": {
+                                "x-ms-client-name": "FileContentMD5",
+                                "type": "string",
+                                "format": "byte",
+                                "description": "If the file has a MD5 hash, and if request contains range header (Range or x-ms-range), this response header is returned with the value of the whole file's MD5 value. This value may or may not be equal to the value returned in Content-MD5 header, with the latter calculated from the requested range."
+                            },
+                            "x-ms-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the file data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the file is unencrypted, or if only parts of the file/application metadata are encrypted)."
+                            }
+                        },
+                        "schema": {
+                            "type": "object",
+                            "format": "file"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "head": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_GetProperties",
+                "description": "Returns all user-defined metadata, standard HTTP properties, and system properties for the file. It does not return the content of the file.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the file was last modified. The date format follows RFC 1123. Any operation that modifies the file or its properties updates the last modified time."
+                            },
+                            "x-ms-meta": {
+                                "type": "string",
+                                "description": "A set of name-value pairs associated with this file as user-defined metadata.",
+                                "x-ms-client-name": "Metadata",
+                                "x-ms-header-collection-prefix": "x-ms-meta-"
+                            },
+                            "x-ms-type": {
+                                "x-ms-client-name": "FileType",
+                                "description": "Returns the type File. Reserved for future use.",
+                                "type": "string",
+                                "enum": [
+                                    "File"
+                                ]
+                            },
+                            "Content-Length": {
+                                "type": "integer",
+                                "format": "int64",
+                                "description": "The size of the file in bytes. This header returns the value of the 'x-ms-content-length' header that is stored with the file."
+                            },
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "The content type specified for the file. The default content type is 'application/octet-stream'"
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value that you can use to perform operations conditionally, in quotes."
+                            },
+                            "Content-MD5": {
+                                "type": "string",
+                                "format": "byte",
+                                "description": "If the Content-MD5 header has been set for the file, the Content-MD5 response header is returned so that the client can check for message content integrity."
+                            },
+                            "Content-Encoding": {
+                                "type": "string",
+                                "description": "If the Content-Encoding request header has previously been set for the file, the Content-Encoding value is returned in this header."
+                            },
+                            "Cache-Control": {
+                                "type": "string",
+                                "description": "If the Cache-Control request header has previously been set for the file, the Cache-Control value is returned in this header."
+                            },
+                            "Content-Disposition": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the 'x-ms-content-disposition' header and specifies how to process the response."
+                            },
+                            "Content-Language": {
+                                "type": "string",
+                                "description": "Returns the value that was specified for the Content-Language request header."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-copy-completion-time": {
+                                "x-ms-client-name": "CopyCompletionTime",
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Conclusion time of the last attempted Copy File operation where this file was the destination file. This value can specify the time of a completed, aborted, or failed copy attempt."
+                            },
+                            "x-ms-copy-status-description": {
+                                "x-ms-client-name": "CopyStatusDescription",
+                                "type": "string",
+                                "description": "Only appears when x-ms-copy-status is failed or pending. Describes cause of fatal or non-fatal copy operation failure."
+                            },
+                            "x-ms-copy-id": {
+                                "x-ms-client-name": "CopyId",
+                                "type": "string",
+                                "description": "String identifier for the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-progress": {
+                                "x-ms-client-name": "CopyProgress",
+                                "type": "string",
+                                "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy File operation where this file was the destination file. Can show between 0 and Content-Length bytes copied."
+                            },
+                            "x-ms-copy-source": {
+                                "x-ms-client-name": "CopySource",
+                                "type": "string",
+                                "description": "URL up to 2KB in length that specifies the source file used in the last attempted Copy File operation where this file was the destination file."
+                            },
+                            "x-ms-copy-status": {
+                                "x-ms-client-name": "CopyStatus",
+                                "description": "State of the copy operation identified by 'x-ms-copy-id'.",
+                                "type": "string",
+                                "enum": [
+                                    "pending",
+                                    "success",
+                                    "aborted",
+                                    "failed"
+                                ],
+                                "x-ms-enum": {
+                                    "name": "CopyStatusType",
+                                    "modelAsString": false
+                                }
+                            },
+                            "x-ms-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the file data and application metadata are completely encrypted using the specified algorithm. Otherwise, the value is set to false (when the file is unencrypted, or if only parts of the file/application metadata are encrypted)."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        }
+                    }
+                }
+            },
+            "delete": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_Delete",
+                "description": "removes the file from the storage account.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "202": {
+                        "description": "Success (Accepted).",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [
+
+            ]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=properties": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_SetHTTPHeaders",
+                "description": "Sets HTTP headers on the file.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "name": "x-ms-content-length",
+                        "x-ms-client-name": "fileContentLength",
+                        "in": "header",
+                        "description": "Resizes a file to the specified size. If the specified byte value is less than the current size of the file, then all ranges above the specified byte value are cleared.",
+                        "required": false,
+                        "type": "integer",
+                        "format": "int64"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentType"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentEncoding"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentLanguage"
+                    },
+                    {
+                        "$ref": "#/parameters/FileCacheControl"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentMD5"
+                    },
+                    {
+                        "$ref": "#/parameters/FileContentDisposition"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the file, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the directory was last modified. Any operation that modifies the directory or its properties updates the last modified time. Operations on files do not affect the last modified time of the directory."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "properties"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=metadata": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_SetMetadata",
+                "description": "Updates user-defined metadata for the specified file.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success (OK).",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the file, in quotes."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "metadata"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=range": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_UploadRange",
+                "description": "Upload a range of bytes to a file.",
+                "consumes": [
+                    "application/octet-stream"
+                ],
+                "parameters": [{
+                        "$ref": "#/parameters/OptionalBody"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "name": "x-ms-range",
+                        "x-ms-client-name": "range",
+                        "in": "header",
+                        "description": "Specifies the range of bytes to be written. Both the start and end of the range must be specified. For an update operation, the range can be up to 4 MB in size. For a clear operation, the range can be up to the value of the file's full size. The File service accepts only a single byte range for the Range and 'x-ms-range' headers, and the byte range must be specified in the following format: bytes=startByte-endByte.",
+                        "required": true,
+                        "type": "string"
+                    },
+                    {
+                        "name": "x-ms-write",
+                        "x-ms-client-name": "FileRangeWrite",
+                        "in": "header",
+                        "description": "Specify one of the following options: - Update: Writes the bytes specified by the request body into the specified range. The Range and Content-Length headers must match to perform the update. - Clear: Clears the specified range and releases the space used in storage for that range. To clear a range, set the Content-Length header to zero, and set the Range header to a value that indicates the range to clear, up to maximum file size.",
+                        "required": true,
+                        "type": "string",
+                        "enum": [
+                            "update",
+                            "clear"
+                        ],
+                        "default": "update",
+                        "x-ms-enum": {
+                            "name": "FileRangeWriteType",
+                            "modelAsString": false
+                        }
+                    },
+                    {
+                        "$ref": "#/parameters/ContentLength"
+                    },
+                    {
+                        "$ref": "#/parameters/ContentMD5"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "201": {
+                        "description": "Success (Created).",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the file, in quotes."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date and time the directory was last modified. Any operation that modifies the share or its properties or metadata updates the last modified time. Operations on files do not affect the last modified time of the share."
+                            },
+                            "Content-MD5": {
+                                "type": "string",
+                                "format": "byte",
+                                "description": "This header is returned so that the client can check for message content integrity. The value of this header is computed by the File service; it is not necessarily the same value as may have been specified in the request headers."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-request-server-encrypted": {
+                                "x-ms-client-name": "IsServerEncrypted",
+                                "type": "boolean",
+                                "description": "The value of this header is set to true if the contents of the request are successfully encrypted using the specified algorithm, and false otherwise."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "range"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=rangelist": {
+            "get": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_GetRangeList",
+                "description": "Returns the list of valid ranges for a file.",
+                "parameters": [{
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "name": "x-ms-range",
+                        "x-ms-client-name": "range",
+                        "in": "header",
+                        "description": "Specifies the range of bytes over which to list ranges, inclusively.",
+                        "required": false,
+                        "type": "string"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "The date/time that the file was last modified. Any operation that modifies the file, including an update of the file's metadata or properties, changes the file's last modified time."
+                            },
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "The ETag contains a value which represents the version of the file, in quotes."
+                            },
+                            "x-ms-content-length": {
+                                "x-ms-client-name": "FileContentLength",
+                                "type": "integer",
+                                "format": "int64",
+                                "description": "The size of the file in bytes."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/RangeList"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "rangelist"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=copy": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_StartCopy",
+                "description": "Copies a blob or file to a destination file within the storage account.",
+                "parameters": [{
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    },
+                    {
+                        "$ref": "#/parameters/Metadata"
+                    },
+                    {
+                        "$ref": "#/parameters/CopySource"
+                    }
+                ],
+                "responses": {
+                    "202": {
+                        "description": "The copy file has been accepted with the specified copy status.",
+                        "headers": {
+                            "ETag": {
+                                "type": "string",
+                                "format": "etag",
+                                "description": "If the copy is completed, contains the ETag of the destination file. If the copy is not complete, contains the ETag of the empty file created at the start of the copy."
+                            },
+                            "Last-Modified": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "Returns the date/time that the copy operation to the destination file completed."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-copy-id": {
+                                "x-ms-client-name": "CopyId",
+                                "type": "string",
+                                "description": "String identifier for this copy operation. Use with Get File or Get File Properties to check the status of this copy operation, or pass to Abort Copy File to abort a pending copy."
+                            },
+                            "x-ms-copy-status": {
+                                "x-ms-client-name": "CopyStatus",
+                                "description": "State of the copy operation identified by x-ms-copy-id.",
+                                "type": "string",
+                                "enum": [
+                                    "pending",
+                                    "success",
+                                    "aborted",
+                                    "failed"
+                                ],
+                                "x-ms-enum": {
+                                    "name": "CopyStatusType",
+                                    "modelAsString": false
+                                }
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [
+
+            ]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=copy©id={CopyId}": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_AbortCopy",
+                "description": "Aborts a pending Copy File operation, and leaves a destination file with zero length and full metadata.",
+                "parameters": [{
+                        "$ref": "#/parameters/CopyId"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/CopyActionAbort"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "204": {
+                        "description": "The delete request was accepted and the file will be deleted.",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "copy"
+                ]
+            }]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=listhandles": {
+            "get":{
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_ListHandles",
+                "description": "Lists handles for file",
+                "parameters":[
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/MaxResults"
+                    },
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "Content-Type": {
+                                "type": "string",
+                                "description": "Specifies the format in which the results are returned. Currently this value is 'application/xml'."
+                            },
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/ListHandlesResponse"
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                    "name": "comp",
+                    "in": "query",
+                    "required": true,
+                    "type": "string",
+                    "enum": [
+                        "listhandles"
+                    ]
+                }
+            ]
+        },
+        "/{shareName}/{directory}/{fileName}?comp=forceclosehandles": {
+            "put": {
+                "tags": [
+                    "file"
+                ],
+                "operationId": "File_ForceCloseHandles",
+                "description": "Closes all handles open for given file",
+                "parameters": [
+                    {
+                        "$ref": "#/parameters/Timeout"
+                    },
+                    {
+                        "$ref": "#/parameters/Marker"
+                    },
+                    {
+                        "$ref": "#/parameters/ShareSnapshot"
+                    },
+                    {
+						"$ref": "#/parameters/HandleId"
+					},
+                    {
+                        "$ref": "#/parameters/ApiVersionParameter"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "Success.",
+                        "headers": {
+                            "x-ms-request-id": {
+                                "x-ms-client-name": "RequestId",
+                                "type": "string",
+                                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+                            },
+                            "x-ms-version": {
+                                "x-ms-client-name": "Version",
+                                "type": "string",
+                                "description": "Indicates the version of the File service used to execute the request."
+                            },
+                            "Date": {
+                                "type": "string",
+                                "format": "date-time-rfc1123",
+                                "description": "A UTC date/time value generated by the service that indicates the time at which the response was initiated."
+                            },
+                            "x-ms-marker": {
+                                "x-ms-client-name": "marker",
+                                "type": "string",
+                                "description": "A string describing next handle to be closed. It is returned when more handles need to be closed to complete the request."
+                            },
+                            "x-ms-number-of-handles-closed": {
+                                "x-ms-client-name": "numberOfHandlesClosed",
+                                "type": "integer",
+                                "description": "Contains count of number of handles closed."
+                            }
+                        }
+                    },
+                    "default": {
+                        "description": "Failure",
+                        "headers": {
+                            "x-ms-error-code": {
+                                "x-ms-client-name": "ErrorCode",
+                                "type": "string"
+                            }
+                        },
+                        "schema": {
+                            "$ref": "#/definitions/StorageError"
+                        }
+                    }
+                }
+            },
+            "parameters": [{
+                "name": "comp",
+                "in": "query",
+                "required": true,
+                "type": "string",
+                "enum": [
+                    "forceclosehandles"
+                ]
+            }
+        ]
+        }
+    },
+    "definitions": {
+        "AccessPolicy": {
+            "description": "An Access policy.",
+            "type": "object",
+            "properties": {
+                "Start": {
+                    "description": "The date-time the policy is active.",
+                    "type": "string",
+                    "format": "date-time"
+                },
+                "Expiry": {
+                    "description": "The date-time the policy expires.",
+                    "type": "string",
+                    "format": "date-time"
+                },
+                "Permission": {
+                    "description": "The permissions for the ACL policy.",
+                    "type": "string"
+                }
+            }
+        },
+        "CorsRule": {
+            "description": "CORS is an HTTP feature that enables a web application running under one domain to access resources in another domain. Web browsers implement a security restriction known as same-origin policy that prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain (the origin domain) to call APIs in another domain.",
+            "type": "object",
+            "required": [
+                "AllowedOrigins",
+                "AllowedMethods",
+                "AllowedHeaders",
+                "ExposedHeaders",
+                "MaxAgeInSeconds"
+            ],
+            "properties": {
+                "AllowedOrigins": {
+                    "description": "The origin domains that are permitted to make a request against the storage service via CORS. The origin domain is the domain from which the request originates. Note that the origin must be an exact case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' to allow all origin domains to make requests via CORS.",
+                    "type": "string"
+                },
+                "AllowedMethods": {
+                    "description": "The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated)",
+                    "type": "string"
+                },
+                "AllowedHeaders": {
+                    "description": "The request headers that the origin domain may specify on the CORS request.",
+                    "type": "string"
+                },
+                "ExposedHeaders": {
+                    "description": "The response headers that may be sent in the response to the CORS request and exposed by the browser to the request issuer.",
+                    "type": "string"
+                },
+                "MaxAgeInSeconds": {
+                    "description": "The maximum amount time that a browser should cache the preflight OPTIONS request.",
+                    "type": "integer",
+                    "minimum": 0
+                }
+            }
+        },
+        "ErrorCode": {
+            "description": "Error codes returned by the service",
+            "type": "string",
+            "enum": [
+                "AccountAlreadyExists",
+                "AccountBeingCreated",
+                "AccountIsDisabled",
+                "AuthenticationFailed",
+                "AuthorizationFailure",
+                "ConditionHeadersNotSupported",
+                "ConditionNotMet",
+                "EmptyMetadataKey",
+                "InsufficientAccountPermissions",
+                "InternalError",
+                "InvalidAuthenticationInfo",
+                "InvalidHeaderValue",
+                "InvalidHttpVerb",
+                "InvalidInput",
+                "InvalidMd5",
+                "InvalidMetadata",
+                "InvalidQueryParameterValue",
+                "InvalidRange",
+                "InvalidResourceName",
+                "InvalidUri",
+                "InvalidXmlDocument",
+                "InvalidXmlNodeValue",
+                "Md5Mismatch",
+                "MetadataTooLarge",
+                "MissingContentLengthHeader",
+                "MissingRequiredQueryParameter",
+                "MissingRequiredHeader",
+                "MissingRequiredXmlNode",
+                "MultipleConditionHeadersNotSupported",
+                "OperationTimedOut",
+                "OutOfRangeInput",
+                "OutOfRangeQueryParameterValue",
+                "RequestBodyTooLarge",
+                "ResourceTypeMismatch",
+                "RequestUrlFailedToParse",
+                "ResourceAlreadyExists",
+                "ResourceNotFound",
+                "ServerBusy",
+                "UnsupportedHeader",
+                "UnsupportedXmlNode",
+                "UnsupportedQueryParameter",
+                "UnsupportedHttpVerb",
+                "CannotDeleteFileOrDirectory",
+                "ClientCacheFlushDelay",
+                "DeletePending",
+                "DirectoryNotEmpty",
+                "FileLockConflict",
+                "InvalidFileOrDirectoryPathName",
+                "ParentNotFound",
+                "ReadOnlyAttribute",
+                "ShareAlreadyExists",
+                "ShareBeingDeleted",
+                "ShareDisabled",
+                "ShareNotFound",
+                "SharingViolation",
+                "ShareSnapshotInProgress",
+                "ShareSnapshotCountExceeded",
+                "ShareSnapshotOperationNotSupported",
+                "ShareHasSnapshots",
+                "ContainerQuotaDowngradeNotAllowed"
+            ],
+            "x-ms-enum": {
+                "name": "StorageErrorCode",
+                "modelAsString": true
+            }
+        },
+        "FilesAndDirectoriesListSegment": {
+            "description": "Abstract for entries that can be listed from Directory.",
+            "type": "object",
+            "required": [
+                "DirectoryItems",
+                "FileItems"
+            ],
+            "properties": {
+                "DirectoryItems": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/DirectoryItem"
+                    }
+                },
+                "FileItems": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/FileItem"
+                    }
+                }
+            },
+            "xml": {
+                "name": "Entries"
+            }
+        },
+        "DirectoryItem": {
+            "xml": {
+                "name": "Directory"
+            },
+            "description": "A listed directory item.",
+            "type": "object",
+            "required": [
+                "Name"
+            ],
+            "properties": {
+                "Name": {
+                    "type": "string"
+                }
+            }
+        },
+        "FileItem": {
+            "xml": {
+                "name": "File"
+            },
+            "description": "A listed file item.",
+            "type": "object",
+            "required": [
+                "Name",
+                "Properties"
+            ],
+            "properties": {
+                "Name": {
+                    "type": "string"
+                },
+                "Properties": {
+                    "$ref": "#/definitions/FileProperty"
+                }
+            }
+        },
+        "FileProperty": {
+            "description": "File properties.",
+            "type": "object",
+            "required": [
+                "Content-Length"
+            ],
+            "properties": {
+                "Content-Length": {
+                    "description": "Content length of the file. This value may not be up-to-date since an SMB client may have modified the file locally. The value of Content-Length may not reflect that fact until the handle is closed or the op-lock is broken. To retrieve current property values, call Get File Properties.",
+                    "type": "integer",
+                    "format": "int64"
+                }
+            }
+        },
+        "HandleItem" : {
+            "xml": {
+                "name": "Handle"
+            },
+            "description": "A listed Azure Storage handle item.",
+            "type": "object",
+            "required": [
+                "HandleId",
+                "Path",
+                "FileId",
+                "SessionId",
+                "ClientIp",
+                "OpenTime"
+            ],
+            "properties": {
+                "HandleId": {
+                    "type": "string",
+                    "description": "XSMB service handle ID"
+                },
+                "Path": {
+                    "type": "string",
+                    "description": "File or directory name including full path starting from share root"
+                },
+                "FileId": {
+                    "type": "string",
+                    "description": "FileId uniquely identifies the file or directory."
+                },
+                "ParentId": {
+                    "type": "string",
+                    "description": "ParentId uniquely identifies the parent directory of the object."
+                },
+                "SessionId": {
+                    "type": "string",
+                    "description": "SMB session ID in context of which the file handle was opened"
+                },
+                "ClientIp": {
+                    "type": "string",
+                    "description": "Client IP that opened the handle"
+                },
+                "OpenTime": {
+                    "type": "string",
+                    "format": "date-time-rfc1123",
+                    "description": "Time when the session that previously opened the handle has last been reconnected. (UTC)"
+                },
+                "LastReconnectTime": {
+                    "type": "string",
+                    "format": "date-time-rfc1123",
+                    "description": "Time handle was last connected to (UTC)"
+                }
+            }
+        },
+        "ListFilesAndDirectoriesSegmentResponse": {
+            "xml": {
+                "name": "EnumerationResults"
+            },
+            "description": "An enumeration of directories and files.",
+            "type": "object",
+            "required": [
+                "ServiceEndpoint",
+                "ShareName",
+                "DirectoryPath",
+                "Prefix",
+                "NextMarker",
+                "Segment"
+            ],
+            "properties": {
+                "ServiceEndpoint": {
+                    "type": "string",
+                    "xml": {
+                        "attribute": true
+                    }
+                },
+                "ShareName": {
+                    "type": "string",
+                    "xml": {
+                        "attribute": true
+                    }
+                },
+                "ShareSnapshot": {
+                    "type": "string",
+                    "xml": {
+                        "attribute": true
+                    }
+                },
+                "DirectoryPath": {
+                    "type": "string",
+                    "xml": {
+                        "attribute": true
+                    }
+                },
+                "Prefix": {
+                    "type": "string"
+                },
+                "Marker": {
+                    "type": "string"
+                },
+                "MaxResults": {
+                    "type": "integer"
+                },
+                "Segment": {
+                    "$ref": "#/definitions/FilesAndDirectoriesListSegment"
+                },
+                "NextMarker": {
+                    "type": "string"
+                }
+            }
+        },
+        "ListHandlesResponse": {
+            "xml": {
+                "name": "EnumerationResults"
+            },
+            "description": "An enumeration of handles.",
+            "type": "object",
+            "required": [
+                "NextMarker"
+            ],
+            "properties": {
+                "HandleList": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/HandleItem"
+                    },
+                    "xml": {
+                        "name": "Entries",
+                        "wrapped": true
+                    }
+                },
+                "NextMarker": {
+                    "type": "string"
+                }
+            }
+        },
+        "ListSharesResponse": {
+            "xml": {
+                "name": "EnumerationResults"
+            },
+            "description": "An enumeration of shares.",
+            "type": "object",
+            "required": [
+                "ServiceEndpoint",
+                "NextMarker"
+            ],
+            "properties": {
+                "ServiceEndpoint": {
+                    "type": "string",
+                    "xml": {
+                        "attribute": true
+                    }
+                },
+                "Prefix": {
+                    "type": "string"
+                },
+                "Marker": {
+                    "type": "string"
+                },
+                "MaxResults": {
+                    "type": "integer"
+                },
+                "ShareItems": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/ShareItem"
+                    },
+                    "xml": {
+                        "name": "Shares",
+                        "wrapped": true
+                    }
+                },
+                "NextMarker": {
+                    "type": "string"
+                }
+            }
+        },
+        "Metadata": {
+            "type": "object",
+            "additionalProperties": {
+                "type": "string"
+            }
+        },
+        "Metrics": {
+            "description": "Storage Analytics metrics for file service.",
+            "required": [
+                "Version",
+                "Enabled"
+            ],
+            "properties": {
+                "Version": {
+                    "description": "The version of Storage Analytics to configure.",
+                    "type": "string"
+                },
+                "Enabled": {
+                    "description": "Indicates whether metrics are enabled for the File service.",
+                    "type": "boolean"
+                },
+                "IncludeAPIs": {
+                    "description": "Indicates whether metrics should generate summary statistics for called API operations.",
+                    "type": "boolean"
+                },
+                "RetentionPolicy": {
+                    "$ref": "#/definitions/RetentionPolicy"
+                }
+            }
+        },
+        "Range": {
+            "description": "An Azure Storage file range.",
+            "type": "object",
+            "required": [
+                "Start",
+                "End"
+            ],
+            "properties": {
+                "Start": {
+                    "type": "integer",
+                    "format": "int64",
+                    "description": "Start of the range."
+                },
+                "End": {
+                    "type": "integer",
+                    "format": "int64",
+                    "description": "End of the range."
+                }
+            },
+            "xml": {
+                "name": "Range"
+            }
+        },
+        "RangeList": {
+            "description": "A list of non-overlapping valid ranges, sorted by increasing address range.",
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/Range"
+            },
+            "xml": {
+                "wrapped": true,
+                "name": "Ranges"
+            }
+        },
+        "StorageError": {
+            "type": "object",
+            "properties": {
+                "Message": {
+                    "type": "string"
+                }
+            }
+        },
+        "RetentionPolicy": {
+            "description": "The retention policy.",
+            "type": "object",
+            "required": [
+                "Enabled"
+            ],
+            "properties": {
+                "Enabled": {
+                    "description": "Indicates whether a retention policy is enabled for the File service. If false, metrics data is retained, and the user is responsible for deleting it.",
+                    "type": "boolean"
+                },
+                "Days": {
+                    "description": "Indicates the number of days that metrics data should be retained. All data older than this value will be deleted. Metrics data is deleted on a best-effort basis after the retention period expires.",
+                    "type": "integer",
+                    "minimum": 1,
+                    "maximum": 365
+                }
+            }
+        },
+        "ShareItem": {
+            "xml": {
+                "name": "Share"
+            },
+            "description": "A listed Azure Storage share item.",
+            "type": "object",
+            "required": [
+                "Name",
+                "Properties"
+            ],
+            "properties": {
+                "Name": {
+                    "type": "string"
+                },
+                "Snapshot": {
+                    "type": "string"
+                },
+                "Properties": {
+                    "$ref": "#/definitions/ShareProperties"
+                },
+                "Metadata": {
+                    "$ref": "#/definitions/Metadata"
+                }
+            }
+        },
+        "ShareProperties": {
+            "description": "Properties of a share.",
+            "type": "object",
+            "required": [
+                "Last-Modified",
+                "Etag",
+                "Quota"
+            ],
+            "properties": {
+                "Last-Modified": {
+                    "type": "string",
+                    "format": "date-time-rfc1123"
+                },
+                "Etag": {
+                    "type": "string",
+                    "format": "etag"
+                },
+                "Quota": {
+                    "type": "integer",
+                    "format": "int64",
+                }
+            }
+        },
+        "ShareStats": {
+            "description": "Stats for the share.",
+            "type": "object",
+            "required": [
+                "ShareUsageBytes"
+            ],
+            "properties": {
+                "ShareUsageBytes": {
+                    "description": "The approximate size of the data stored in bytes, rounded up to the nearest gigabyte. Note that this value may not include all recently created or recently resized files.",
+                    "type": "integer"
+                }
+            }
+        },
+        "SignedIdentifier": {
+            "description": "Signed identifier.",
+            "type": "object",
+            "required": [
+                "Id"
+            ],
+            "properties": {
+                "Id": {
+                    "type": "string",
+                    "description": "A unique id."
+                },
+                "AccessPolicy": {
+                    "description": "The access policy.",
+                    "$ref": "#/definitions/AccessPolicy"
+                }
+            }
+        },
+        "SignedIdentifiers": {
+            "description": "A collection of signed identifiers.",
+            "type": "array",
+            "items": {
+                "$ref": "#/definitions/SignedIdentifier",
+                "xml": {
+                    "name": "SignedIdentifier"
+                }
+            },
+            "xml": {
+                "wrapped": true,
+                "name": "SignedIdentifiers"
+            }
+        },
+        "StorageServiceProperties": {
+            "description": "Storage service properties.",
+            "type": "object",
+            "properties": {
+                "HourMetrics": {
+                    "description": "A summary of request statistics grouped by API in hourly aggregates for files.",
+                    "$ref": "#/definitions/Metrics"
+                },
+                "MinuteMetrics": {
+                    "description": "A summary of request statistics grouped by API in minute aggregates for files.",
+                    "$ref": "#/definitions/Metrics"
+                },
+                "Cors": {
+                    "description": "The set of CORS rules.",
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/CorsRule"
+                    },
+                    "xml": {
+                        "wrapped": true
+                    }
+                }
+            }
+        }
+    },
+    "parameters": {
+        "ApiVersionParameter": {
+            "name": "x-ms-version",
+            "x-ms-client-name": "version",
+            "in": "header",
+            "description": "Specifies the version of the operation to use for this request.",
+            "required": true,
+            "type": "string",
+            "enum": [
+                "2018-11-09"
+            ]
+        },
+        "ContentLength": {
+            "name": "Content-Length",
+            "x-ms-client-name": "contentLength",
+            "in": "header",
+            "description": "Specifies the number of bytes being transmitted in the request body. When the x-ms-write header is set to clear, the value of this header must be set to zero.",
+            "required": true,
+            "type": "integer",
+            "format": "int64",
+            "x-ms-parameter-location": "method"
+        },
+        "ContentMD5": {
+            "name": "Content-MD5",
+            "x-ms-client-name": "contentMD5",
+            "in": "header",
+            "description": "An MD5 hash of the content. This hash is used to verify the integrity of the data during transport. When the Content-MD5 header is specified, the File service compares the hash of the content that has arrived with the header value that was sent. If the two hashes do not match, the operation will fail with error code 400 (Bad Request).",
+            "required": false,
+            "type": "string",
+            "format": "byte",
+            "x-ms-parameter-location": "method"
+        },
+        "CopyActionAbort": {
+            "name": "x-ms-copy-action",
+            "x-ms-client-name": "copyActionAbortConstant",
+            "in": "header",
+            "required": true,
+            "type": "string",
+            "enum": [
+                "abort"
+            ],
+            "x-ms-parameter-location": "method"
+        },
+        "CopyId": {
+            "name": "copyid",
+            "x-ms-client-name": "copyId",
+            "in": "query",
+            "required": true,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "description": "The copy identifier provided in the x-ms-copy-id header of the original Copy File operation."
+        },
+        "CopySource": {
+            "name": "x-ms-copy-source",
+            "x-ms-client-name": "copySource",
+            "in": "header",
+            "required": true,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "description": "Specifies the URL of the source file or blob, up to 2 KB in length. To copy a file to another file within the same storage account, you may use Shared Key to authenticate the source file. If you are copying a file from another storage account, or if you are copying a blob from the same storage account or another storage account, then you must authenticate the source file or blob using a shared access signature. If the source is a public blob, no authentication is required to perform the copy operation. A file in a share snapshot can also be specified as a copy source."
+        },
+        "DeleteSnapshots": {
+            "name": "x-ms-delete-snapshots",
+            "x-ms-client-name": "deleteSnapshots",
+            "description": "Specifies the option include to delete the base share and all of its snapshots.",
+            "in": "header",
+            "required": false,
+            "type": "string",
+            "enum": [
+                "include"
+            ],
+            "x-ms-enum": {
+                "name": "DeleteSnapshotsOptionType",
+                "modelAsString": false
+            },
+            "x-ms-parameter-location": "method"
+        },
+        "FileCacheControl": {
+            "name": "x-ms-cache-control",
+            "x-ms-client-name": "fileCacheControl",
+            "description": "Sets the file's cache control. The File service stores this value but does not use or modify it.",
+            "in": "header",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileContentDisposition": {
+            "name": "x-ms-content-disposition",
+            "x-ms-client-name": "fileContentDisposition",
+            "description": "Sets the file's Content-Disposition header.",
+            "in": "header",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileContentEncoding": {
+            "name": "x-ms-content-encoding",
+            "x-ms-client-name": "fileContentEncoding",
+            "in": "header",
+            "description": "Specifies which content encodings have been applied to the file.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileContentLanguage": {
+            "name": "x-ms-content-language",
+            "x-ms-client-name": "fileContentLanguage",
+            "in": "header",
+            "description": "Specifies the natural languages used by this resource.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileContentMD5": {
+            "name": "x-ms-content-md5",
+            "x-ms-client-name": "fileContentMD5",
+            "in": "header",
+            "description": "Sets the file's MD5 hash.",
+            "required": false,
+            "type": "string",
+            "format": "byte",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileContentType": {
+            "name": "x-ms-content-type",
+            "x-ms-client-name": "fileContentType",
+            "in": "header",
+            "description": "Sets the MIME content type of the file. The default type is 'application/octet-stream'.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-parameter-grouping": {
+                "name": "file-HTTP-headers"
+            }
+        },
+        "FileType": {
+            "name": "x-ms-type",
+            "x-ms-client-name": "fileTypeConstant",
+            "in": "header",
+            "required": true,
+            "description": "Dummy constant parameter, file type can only be file.",
+            "type": "string",
+            "enum": [
+                "file"
+            ],
+            "x-ms-parameter-location": "method"
+        },
+        "GetRangeContentMD5": {
+            "name": "x-ms-range-get-content-md5",
+            "x-ms-client-name": "rangeGetContentMD5",
+            "in": "header",
+            "required": false,
+            "type": "boolean",
+            "x-ms-parameter-location": "method",
+            "description": "When this header is set to true and specified together with the Range header, the service returns the MD5 hash for the range, as long as the range is less than or equal to 4 MB in size."
+        },
+        "HandleId": {
+            "name": "x-ms-handle-id",
+            "x-ms-client-name": "handleId",
+            "in": "header",
+            "description": "Specifies handle ID opened on the file or directory to be closed. Asterix (‘*’) is a wildcard that specifies all handles.",
+            "required": true,
+            "type": "string",
+            "x-ms-parameter-location": "method"
+        },
+        "ListSharesInclude": {
+            "name": "include",
+            "in": "query",
+            "description": "Include this parameter to specify one or more datasets to include in the response.",
+            "required": false,
+            "type": "array",
+            "collectionFormat": "csv",
+            "items": {
+                "type": "string",
+                "enum": [
+                    "snapshots",
+                    "metadata"
+                ],
+                "x-ms-enum": {
+                    "name": "ListSharesIncludeType",
+                    "modelAsString": false
+                }
+            },
+            "x-ms-parameter-location": "method"
+        },
+        "Marker": {
+            "name": "marker",
+            "in": "query",
+            "description": "A string value that identifies the portion of the list to be returned with the next list operation. The operation returns a marker value within the response body if the list returned was not complete. The marker value may then be used in a subsequent call to request the next set of list items. The marker value is opaque to the client.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method"
+        },
+        "MaxResults": {
+            "name": "maxresults",
+            "in": "query",
+            "description": "Specifies the maximum number of entries to return. If the request does not specify maxresults, or specifies a value greater than 5,000, the server will return up to 5,000 items.",
+            "required": false,
+            "type": "integer",
+            "minimum": 1,
+            "x-ms-parameter-location": "method"
+        },
+        "Metadata": {
+            "name": "x-ms-meta",
+            "x-ms-client-name": "metadata",
+            "in": "header",
+            "description": "A name-value pair to associate with a file storage object.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method",
+            "x-ms-header-collection-prefix": "x-ms-meta-"
+        },
+        "OptionalBody": {
+            "name": "optionalbody",
+            "in": "body",
+            "description": "Initial data.",
+            "required": false,
+            "schema": {
+                "type": "object",
+                "format": "file"
+            },
+            "x-ms-parameter-location": "method"
+        },
+        "Prefix": {
+            "name": "prefix",
+            "in": "query",
+            "description": "Filters the results to return only entries whose name begins with the specified prefix.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method"
+        },
+        "Range": {
+            "name": "x-ms-range",
+            "x-ms-client-name": "range",
+            "in": "header",
+            "description": "Return file data only from the specified byte range.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method"
+        },
+        "Recursive": {
+            "name": "x-ms-recursive",
+            "x-ms-client-name": "recursive",
+            "in": "header",
+            "description": "Specifies operation should apply to the directory specified in the URI, its files, its subdirectories and their files.",
+            "required": false,
+            "type": "boolean",
+            "x-ms-parameter-location": "method"
+        },
+        "Url": {
+            "name": "url",
+            "in": "path",
+            "description": "The URL of the service account, share, directory or file that is the target of the desired operation.",
+            "required": true,
+            "type": "string",
+            "x-ms-skip-url-encoding": true
+        },
+        "ShareAcl": {
+            "name": "shareAcl",
+            "in": "body",
+            "description": "The ACL for the share.",
+            "schema": {
+                "$ref": "#/definitions/SignedIdentifiers"
+            },
+            "x-ms-parameter-location": "method"
+        },
+        "ShareQuota": {
+            "name": "x-ms-share-quota",
+            "x-ms-client-name": "quota",
+            "in": "header",
+            "description": "Specifies the maximum size of the share, in gigabytes.",
+            "required": false,
+            "type": "integer",
+            "format": "int64",
+            "minimum": 1,
+            "x-ms-parameter-location": "method"
+        },
+        "ShareSnapshot": {
+            "name": "sharesnapshot",
+            "in": "query",
+            "description": "The snapshot parameter is an opaque DateTime value that, when present, specifies the share snapshot to query.",
+            "required": false,
+            "type": "string",
+            "x-ms-parameter-location": "method"
+        },
+        "StorageServiceProperties": {
+            "name": "StorageServiceProperties",
+            "in": "body",
+            "description": "The StorageService properties.",
+            "required": true,
+            "schema": {
+                "$ref": "#/definitions/StorageServiceProperties"
+            },
+            "x-ms-parameter-location": "method"
+        },
+        "Timeout": {
+            "name": "timeout",
+            "in": "query",
+            "description": "The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for File Service Operations.",
+            "required": false,
+            "type": "integer",
+            "minimum": 0,
+            "x-ms-parameter-location": "method"
+        }
+    }
+}
\ No newline at end of file
diff --git a/storage/client/queue/swagger/queue.json b/storage/client/queue/swagger/queue.json
new file mode 100644
index 0000000000000..06155a07afed3
--- /dev/null
+++ b/storage/client/queue/swagger/queue.json
@@ -0,0 +1,1856 @@
+{
+  "swagger": "2.0",
+  "info": {
+    "title": "Azure Queue Storage",
+    "version": "2018-03-28",
+    "x-ms-code-generation-settings": {
+      "header": "MIT",
+      "strictSpecAdherence": false
+    }
+  },
+  "x-ms-parameterized-host": {
+    "hostTemplate": "{url}",
+    "useSchemePrefix": false,
+    "positionInOperation": "first",
+    "parameters": [
+      {
+        "$ref": "#/parameters/Url"
+      }
+    ]
+  },
+  "securityDefinitions": {
+    "queue_shared_key": {
+      "type": "apiKey",
+      "name": "Authorization",
+      "in": "header"
+    }
+  },
+  "schemes": [
+    "https"
+  ],
+  "consumes": [
+    "application/xml"
+  ],
+  "produces": [
+    "application/xml"
+  ],
+  "paths": {},
+  "x-ms-paths": {
+    "/?restype=service&comp=properties": {
+      "put": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_SetProperties",
+        "description": "Sets properties for a storage account's Queue service endpoint, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules",
+        "parameters": [
+          {
+            "$ref": "#/parameters/StorageServiceProperties"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "202": {
+            "description": "Success (Accepted)",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetProperties",
+        "description": "gets the properties of a storage account's Queue service, including properties for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageServiceProperties"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "service"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "properties"
+          ]
+        }
+      ]
+    },
+    "/?restype=service&comp=stats": {
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_GetStatistics",
+        "description": "Retrieves statistics related to replication for the Queue service. It is only available on the secondary location endpoint when read-access geo-redundant replication is enabled for the storage account.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageServiceStats"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "restype",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "service"
+          ]
+        },
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "stats"
+          ]
+        }
+      ]
+    },
+    "/?comp=list": {
+      "get": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Service_ListQueuesSegment",
+        "description": "The List Queues Segment operation returns a list of the queues under the specified account",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Prefix"
+          },
+          {
+            "$ref": "#/parameters/Marker"
+          },
+          {
+            "$ref": "#/parameters/MaxResults"
+          },
+          {
+            "$ref": "#/parameters/ListQueuesInclude"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/ListQueuesSegmentResponse"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        },
+        "x-ms-pageable": {
+          "nextLinkName": "NextMarker"
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "list"
+          ]
+        }
+      ]
+    },
+    "/{queueName}": {
+      "put": {
+        "tags": [
+          "service"
+        ],
+        "operationId": "Queue_Create",
+        "description": "creates a new queue under the given account.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "Success, queue created.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "204": {
+            "description": "Success, queue created.",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "queue"
+        ],
+        "operationId": "Queue_Delete",
+        "description": "operation permanently deletes the specified queue",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    },
+    "/{queueName}?comp=metadata": {
+      "get": {
+        "tags": [
+          "queue"
+        ],
+        "operationId": "Queue_GetProperties",
+        "description": "Retrieves user-defined metadata and queue properties on the specified queue. Metadata is associated with the queue as name-values pairs.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success.",
+            "headers": {
+              "x-ms-meta": {
+                "type": "string",
+                "x-ms-client-name": "Metadata",
+                "x-ms-header-collection-prefix": "x-ms-meta-"
+              },
+              "x-ms-approximate-messages-count": {
+                "type": "integer",
+                "x-ms-client-name": "ApproximateMessagesCount",
+                "description": "The approximate number of messages in the queue. This number is not lower than the actual number of messages in the queue, but could be higher."
+              },
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "queue"
+        ],
+        "operationId": "Queue_SetMetadata",
+        "description": "sets user-defined metadata on the specified queue. Metadata is associated with the queue as name-value pairs.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/Metadata"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "metadata"
+          ]
+        }
+      ]
+    },
+    "/{queueName}?comp=acl": {
+      "get": {
+        "tags": [
+          "queue"
+        ],
+        "operationId": "Queue_GetAccessPolicy",
+        "description": "returns details about any stored access policies specified on the queue that may be used with Shared Access Signatures.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Success",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/SignedIdentifiers"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "put": {
+        "tags": [
+          "queue"
+        ],
+        "operationId": "Queue_SetAccessPolicy",
+        "description": "sets stored access policies for the queue that may be used with Shared Access Signatures",
+        "parameters": [
+          {
+            "$ref": "#/parameters/QueueAcl"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "comp",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "acl"
+          ]
+        }
+      ]
+    },
+    "/{queueName}/messages": {
+      "get": {
+        "tags": [
+          "message"
+        ],
+        "operationId": "Messages_Dequeue",
+        "description": "The Dequeue operation retrieves one or more messages from the front of the queue.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/NumOfMessages"
+          },
+          {
+            "$ref": "#/parameters/VisibilityTimeout"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/DequeuedMessagesList"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "delete": {
+        "tags": [
+          "message"
+        ],
+        "operationId": "Messages_Clear",
+        "description": "The Clear operation deletes all messages from the specified queue.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    },
+    "/{queueName}/messages?visibilitytimeout={visibilityTimeout}&messagettl={messageTimeToLive}": {
+      "post": {
+        "tags": [
+          "message"
+        ],
+        "operationId": "Messages_Enqueue",
+        "description": "The Enqueue operation adds a new message to the back of the message queue. A visibility timeout can also be specified to make the message invisible until the visibility timeout expires. A message must be in a format that can be included in an XML request with UTF-8 encoding. The encoded message can be up to 64 KB in size for versions 2011-08-18 and newer, or 8 KB in size for previous versions.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/QueueMessage"
+          },
+          {
+            "$ref": "#/parameters/VisibilityTimeout"
+          },
+          {
+            "$ref": "#/parameters/MessageTTL"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "Created",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/EnqueuedMessageList"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    },
+    "/{queueName}/messages?peekonly=true": {
+      "get": {
+        "tags": [
+          "message"
+        ],
+        "operationId": "Messages_Peek",
+        "description": "The Peek operation retrieves one or more messages from the front of the queue, but does not alter the visibility of the message.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/NumOfMessages"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "OK",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/PeekedMessagesList"
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": [
+        {
+          "name": "peekonly",
+          "in": "query",
+          "required": true,
+          "type": "string",
+          "enum": [
+            "true"
+          ]
+        }
+      ]
+    },
+    "/{queueName}/messages/{messageid}?popreceipt={popReceipt}&visibilitytimeout={visibilityTimeout}": {
+      "put": {
+        "tags": [
+          "messageId"
+        ],
+        "operationId": "MessageId_Update",
+        "description": "The Update operation was introduced with version 2011-08-18 of the Queue service API. The Update Message operation updates the visibility timeout of a message. You can also use this operation to update the contents of a message. A message must be in a format that can be included in an XML request with UTF-8 encoding, and the encoded message can be up to 64KB in size.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/QueueMessage"
+          },
+          {
+            "$ref": "#/parameters/PopReceipt"
+          },
+          {
+            "$ref": "#/parameters/VisibilityTimeoutRequired"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              },
+              "x-ms-popreceipt": {
+                "x-ms-client-name": "PopReceipt",
+                "type": "string",
+                "description": "The pop receipt of the queue message."
+              },
+              "x-ms-time-next-visible": {
+                "x-ms-client-name": "TimeNextVisible",
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "A UTC date/time value that represents when the message will be visible on the queue."
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    },
+    "/{queueName}/messages/{messageid}?popreceipt={popReceipt}": {
+      "delete": {
+        "tags": [
+          "messageId"
+        ],
+        "operationId": "MessageId_Delete",
+        "description": "The Delete operation deletes the specified message.",
+        "parameters": [
+          {
+            "$ref": "#/parameters/PopReceipt"
+          },
+          {
+            "$ref": "#/parameters/Timeout"
+          },
+          {
+            "$ref": "#/parameters/ApiVersionParameter"
+          },
+          {
+            "$ref": "#/parameters/ClientRequestId"
+          }
+        ],
+        "responses": {
+          "204": {
+            "description": "No Content",
+            "headers": {
+              "x-ms-request-id": {
+                "x-ms-client-name": "RequestId",
+                "type": "string",
+                "description": "This header uniquely identifies the request that was made and can be used for troubleshooting the request."
+              },
+              "x-ms-version": {
+                "x-ms-client-name": "Version",
+                "type": "string",
+                "description": "Indicates the version of the Queue service used to execute the request. This header is returned for requests made against version 2009-09-19 and above."
+              },
+              "Date": {
+                "type": "string",
+                "format": "date-time-rfc1123",
+                "description": "UTC date/time value generated by the service that indicates the time at which the response was initiated"
+              }
+            }
+          },
+          "default": {
+            "description": "Failure",
+            "headers": {
+              "x-ms-error-code": {
+                "x-ms-client-name": "ErrorCode",
+                "type": "string"
+              }
+            },
+            "schema": {
+              "$ref": "#/definitions/StorageError"
+            }
+          }
+        }
+      },
+      "parameters": []
+    }
+  },
+  "definitions": {
+    "AccessPolicy": {
+      "type": "object",
+      "required": [
+        "Start",
+        "Expiry",
+        "Permission"
+      ],
+      "description": "An Access policy",
+      "properties": {
+        "Start": {
+          "description": "the date-time the policy is active",
+          "type": "string",
+          "format": "date-time"
+        },
+        "Expiry": {
+          "description": "the date-time the policy expires",
+          "type": "string",
+          "format": "date-time"
+        },
+        "Permission": {
+          "description": "the permissions for the acl policy",
+          "type": "string"
+        }
+      }
+    },
+    "ListQueuesSegmentResponse": {
+      "xml": {
+        "name": "EnumerationResults"
+      },
+      "description": "The object returned when calling List Queues on a Queue Service.",
+      "type": "object",
+      "required": [
+        "ServiceEndpoint",
+        "Prefix",
+        "MaxResults",
+        "NextMarker"
+      ],
+      "properties": {
+        "ServiceEndpoint": {
+          "type": "string",
+          "xml": {
+            "attribute": true
+          }
+        },
+        "Prefix": {
+          "type": "string"
+        },
+        "Marker": {
+          "type": "string"
+        },
+        "MaxResults": {
+          "type": "integer"
+        },
+        "QueueItems": {
+          "xml": {
+            "wrapped": true,
+            "name": "Queues"
+          },
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/QueueItem"
+          }
+        },
+        "NextMarker": {
+          "type": "string"
+        }
+      }
+    },
+    "CorsRule": {
+      "description": "CORS is an HTTP feature that enables a web application running under one domain to access resources in another domain. Web browsers implement a security restriction known as same-origin policy that prevents a web page from calling APIs in a different domain; CORS provides a secure way to allow one domain (the origin domain) to call APIs in another domain",
+      "type": "object",
+      "required": [
+        "AllowedOrigins",
+        "AllowedMethods",
+        "AllowedHeaders",
+        "ExposedHeaders",
+        "MaxAgeInSeconds"
+      ],
+      "properties": {
+        "AllowedOrigins": {
+          "description": "The origin domains that are permitted to make a request against the storage service via CORS. The origin domain is the domain from which the request originates. Note that the origin must be an exact case-sensitive match with the origin that the user age sends to the service. You can also use the wildcard character '*' to allow all origin domains to make requests via CORS.",
+          "type": "string"
+        },
+        "AllowedMethods": {
+          "description": "The methods (HTTP request verbs) that the origin domain may use for a CORS request. (comma separated)",
+          "type": "string"
+        },
+        "AllowedHeaders": {
+          "description": "the request headers that the origin domain may specify on the CORS request.",
+          "type": "string"
+        },
+        "ExposedHeaders": {
+          "description": "The response headers that may be sent in the response to the CORS request and exposed by the browser to the request issuer",
+          "type": "string"
+        },
+        "MaxAgeInSeconds": {
+          "description": "The maximum amount time that a browser should cache the preflight OPTIONS request.",
+          "type": "integer",
+          "minimum": 0
+        }
+      }
+    },
+    "ErrorCode": {
+      "description": "Error codes returned by the service",
+      "type": "string",
+      "enum": [
+        "AccountAlreadyExists",
+        "AccountBeingCreated",
+        "AccountIsDisabled",
+        "AuthenticationFailed",
+        "AuthorizationFailure",
+        "ConditionHeadersNotSupported",
+        "ConditionNotMet",
+        "EmptyMetadataKey",
+        "InsufficientAccountPermissions",
+        "InternalError",
+        "InvalidAuthenticationInfo",
+        "InvalidHeaderValue",
+        "InvalidHttpVerb",
+        "InvalidInput",
+        "InvalidMd5",
+        "InvalidMetadata",
+        "InvalidQueryParameterValue",
+        "InvalidRange",
+        "InvalidResourceName",
+        "InvalidUri",
+        "InvalidXmlDocument",
+        "InvalidXmlNodeValue",
+        "Md5Mismatch",
+        "MetadataTooLarge",
+        "MissingContentLengthHeader",
+        "MissingRequiredQueryParameter",
+        "MissingRequiredHeader",
+        "MissingRequiredXmlNode",
+        "MultipleConditionHeadersNotSupported",
+        "OperationTimedOut",
+        "OutOfRangeInput",
+        "OutOfRangeQueryParameterValue",
+        "RequestBodyTooLarge",
+        "ResourceTypeMismatch",
+        "RequestUrlFailedToParse",
+        "ResourceAlreadyExists",
+        "ResourceNotFound",
+        "ServerBusy",
+        "UnsupportedHeader",
+        "UnsupportedXmlNode",
+        "UnsupportedQueryParameter",
+        "UnsupportedHttpVerb",
+        "InvalidMarker",
+        "MessageNotFound",
+        "MessageTooLarge",
+        "PopReceiptMismatch",
+        "QueueAlreadyExists",
+        "QueueBeingDeleted",
+        "QueueDisabled",
+        "QueueNotEmpty",
+        "QueueNotFound"
+      ],
+      "x-ms-enum": {
+        "name": "StorageErrorCode",
+        "modelAsString": true
+      }
+    },
+    "GeoReplication": {
+      "type": "object",
+      "required": [
+        "Status",
+        "LastSyncTime"
+      ],
+      "properties": {
+        "Status": {
+          "description": "The status of the secondary location",
+          "type": "string",
+          "enum": [
+            "live",
+            "bootstrap",
+            "unavailable"
+          ],
+          "x-ms-enum": {
+            "name": "GeoReplicationStatusType",
+            "modelAsString": true
+          }
+        },
+        "LastSyncTime": {
+          "description": "A GMT date/time value, to the second. All primary writes preceding this value are guaranteed to be available for read operations at the secondary. Primary writes after this point in time may or may not be available for reads.",
+          "type": "string",
+          "format": "date-time-rfc1123"
+        }
+      }
+    },
+    "Logging": {
+      "description": "Azure Analytics Logging settings.",
+      "type": "object",
+      "required": [
+        "Version",
+        "Delete",
+        "Read",
+        "Write",
+        "RetentionPolicy"
+      ],
+      "properties": {
+        "Version": {
+          "description": "The version of Storage Analytics to configure.",
+          "type": "string"
+        },
+        "Delete": {
+          "description": "Indicates whether all delete requests should be logged.",
+          "type": "boolean"
+        },
+        "Read": {
+          "description": "Indicates whether all read requests should be logged.",
+          "type": "boolean"
+        },
+        "Write": {
+          "description": "Indicates whether all write requests should be logged.",
+          "type": "boolean"
+        },
+        "RetentionPolicy": {
+          "$ref": "#/definitions/RetentionPolicy"
+        }
+      }
+    },
+    "Metadata": {
+      "type": "object",
+      "additionalProperties": {
+        "type": "string"
+      }
+    },
+    "StorageError": {
+      "type": "object",
+      "properties": {
+        "Message": {
+          "type": "string"
+        }
+      }
+    },
+    "Metrics": {
+      "description": "",
+      "required": [
+        "Enabled"
+      ],
+      "properties": {
+        "Version": {
+          "description": "The version of Storage Analytics to configure.",
+          "type": "string"
+        },
+        "Enabled": {
+          "description": "Indicates whether metrics are enabled for the Queue service.",
+          "type": "boolean"
+        },
+        "IncludeAPIs": {
+          "description": "Indicates whether metrics should generate summary statistics for called API operations.",
+          "type": "boolean"
+        },
+        "RetentionPolicy": {
+          "$ref": "#/definitions/RetentionPolicy"
+        }
+      }
+    },
+    "QueueItem": {
+      "description": "An Azure Storage Queue.",
+      "type": "object",
+      "required": [
+        "Name"
+      ],
+      "properties": {
+        "Name": {
+          "type": "string",
+          "description": "The name of the Queue."
+        },
+        "Metadata": {
+          "$ref": "#/definitions/Metadata"
+        }
+      },
+      "xml": {
+        "name": "Queue"
+      }
+    },
+    "QueueMessage": {
+      "description": "A Message object which can be stored in a Queue",
+      "type": "object",
+      "required": [
+        "MessageText"
+      ],
+      "properties": {
+        "MessageText": {
+          "type": "string",
+          "description": "The content of the message"
+        }
+      }
+    },
+    "DequeuedMessage": {
+      "description": "The object returned in the QueueMessageList array when calling Get Messages on a Queue.",
+      "type": "object",
+      "required": [
+        "MessageId",
+        "InsertionTime",
+        "ExpirationTime",
+        "PopReceipt",
+        "TimeNextVisible",
+        "DequeueCount",
+        "MessageText"
+      ],
+      "properties": {
+        "MessageId": {
+          "type": "string",
+          "description": "The Id of the Message."
+        },
+        "InsertionTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time the Message was inserted into the Queue."
+        },
+        "ExpirationTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time that the Message will expire and be automatically deleted."
+        },
+        "PopReceipt": {
+          "type": "string",
+          "description": "This value is required to delete the Message. If deletion fails using this popreceipt then the message has been dequeued by another client."
+        },
+        "TimeNextVisible": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time that the message will again become visible in the Queue."
+        },
+        "DequeueCount": {
+          "type": "integer",
+          "format": "int64",
+          "description": "The number of times the message has been dequeued."
+        },
+        "MessageText": {
+          "type": "string",
+          "description": "The content of the Message."
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessage"
+      }
+    },
+    "PeekedMessageItem": {
+      "description": "The object returned in the QueueMessageList array when calling Peek Messages on a Queue",
+      "type": "object",
+      "required": [
+        "MessageId",
+        "InsertionTime",
+        "ExpirationTime",
+        "DequeueCount",
+        "MessageText"
+      ],
+      "properties": {
+        "MessageId": {
+          "type": "string",
+          "description": "The Id of the Message."
+        },
+        "InsertionTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time the Message was inserted into the Queue."
+        },
+        "ExpirationTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time that the Message will expire and be automatically deleted."
+        },
+        "DequeueCount": {
+          "type": "integer",
+          "format": "int64",
+          "description": "The number of times the message has been dequeued."
+        },
+        "MessageText": {
+          "type": "string",
+          "description": "The content of the Message."
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessage"
+      }
+    },
+    "EnqueuedMessage": {
+      "description": "The object returned in the QueueMessageList array when calling Put Message on a Queue",
+      "type": "object",
+      "required": [
+        "MessageId",
+        "InsertionTime",
+        "ExpirationTime",
+        "PopReceipt",
+        "TimeNextVisible"
+      ],
+      "properties": {
+        "MessageId": {
+          "type": "string",
+          "description": "The Id of the Message."
+        },
+        "InsertionTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time the Message was inserted into the Queue."
+        },
+        "ExpirationTime": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time that the Message will expire and be automatically deleted."
+        },
+        "PopReceipt": {
+          "type": "string",
+          "description": "This value is required to delete the Message. If deletion fails using this popreceipt then the message has been dequeued by another client."
+        },
+        "TimeNextVisible": {
+          "type": "string",
+          "format": "date-time-rfc1123",
+          "description": "The time that the message will again become visible in the Queue."
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessage"
+      }
+    },
+    "DequeuedMessagesList": {
+      "description": "The object returned when calling Get Messages on a Queue",
+      "type": "array",
+      "items": {
+        "$ref": "#/definitions/DequeuedMessage",
+        "xml": {
+          "name": "QueueMessage"
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessagesList"
+      }
+    },
+    "PeekedMessagesList": {
+      "description": "The object returned when calling Peek Messages on a Queue",
+      "type": "array",
+      "items": {
+        "$ref": "#/definitions/PeekedMessageItem",
+        "xml": {
+          "name": "QueueMessage"
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessagesList"
+      }
+    },
+    "EnqueuedMessageList": {
+      "description": "The object returned when calling Put Message on a Queue",
+      "type": "array",
+      "items": {
+        "$ref": "#/definitions/EnqueuedMessage",
+        "xml": {
+          "name": "QueueMessage"
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "QueueMessagesList"
+      }
+    },
+    "RetentionPolicy": {
+      "description": "the retention policy",
+      "type": "object",
+      "required": [
+        "Enabled"
+      ],
+      "properties": {
+        "Enabled": {
+          "description": "Indicates whether a retention policy is enabled for the storage service",
+          "type": "boolean"
+        },
+        "Days": {
+          "description": "Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this value will be deleted",
+          "type": "integer",
+          "minimum": 1
+        }
+      }
+    },
+    "SignedIdentifier": {
+      "description": "signed identifier",
+      "type": "object",
+      "required": [
+        "Id",
+        "AccessPolicy"
+      ],
+      "properties": {
+        "Id": {
+          "type": "string",
+          "description": "a unique id"
+        },
+        "AccessPolicy": {
+          "description": "The access policy",
+          "$ref": "#/definitions/AccessPolicy"
+        }
+      }
+    },
+    "SignedIdentifiers": {
+      "description": "a collection of signed identifiers",
+      "type": "array",
+      "items": {
+        "$ref": "#/definitions/SignedIdentifier",
+        "xml": {
+          "name": "SignedIdentifier"
+        }
+      },
+      "xml": {
+        "wrapped": true,
+        "name": "SignedIdentifiers"
+      }
+    },
+    "StorageServiceProperties": {
+      "description": "Storage Service Properties.",
+      "type": "object",
+      "properties": {
+        "Logging": {
+          "description": "Azure Analytics Logging settings",
+          "$ref": "#/definitions/Logging"
+        },
+        "HourMetrics": {
+          "description": "A summary of request statistics grouped by API in hourly aggregates for queues",
+          "$ref": "#/definitions/Metrics"
+        },
+        "MinuteMetrics": {
+          "description": "a summary of request statistics grouped by API in minute aggregates for queues",
+          "$ref": "#/definitions/Metrics"
+        },
+        "Cors": {
+          "description": "The set of CORS rules.",
+          "type": "array",
+          "items": {
+            "$ref": "#/definitions/CorsRule",
+            "xml": {
+              "name": "CorsRule"
+            }
+          },
+          "xml": {
+            "wrapped": true
+          }
+        }
+      }
+    },
+    "StorageServiceStats": {
+      "description": "Stats for the storage service.",
+      "type": "object",
+      "properties": {
+        "GeoReplication": {
+          "description": "Geo-Replication information for the Secondary Storage Service",
+          "$ref": "#/definitions/GeoReplication"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "Url": {
+      "name": "url",
+      "description": "The URL of the service account, queue or message that is the targe of the desired operation.",
+      "required": true,
+      "type": "string",
+      "in": "path",
+      "x-ms-skip-url-encoding": true
+    },
+    "ApiVersionParameter": {
+      "name": "x-ms-version",
+      "x-ms-client-name": "version",
+      "in": "header",
+      "required": true,
+      "type": "string",
+      "description": "Specifies the version of the operation to use for this request.",
+      "enum": [
+        "2018-03-28"
+      ]
+    },
+    "Body": {
+      "name": "body",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "type": "object",
+        "format": "file"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Initial data"
+    },
+    "QueueAcl": {
+      "name": "queueAcl",
+      "in": "body",
+      "schema": {
+        "$ref": "#/definitions/SignedIdentifiers"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "the acls for the queue"
+    },
+    "ClientRequestId": {
+      "name": "x-ms-client-request-id",
+      "x-ms-client-name": "requestId",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled."
+    },
+    "ContentLength": {
+      "name": "Content-Length",
+      "in": "header",
+      "required": true,
+      "type": "integer",
+      "format": "int64",
+      "x-ms-parameter-location": "method",
+      "description": "The length of the request."
+    },
+    "ListQueuesInclude": {
+      "name": "include", 
+      "in": "query", 
+      "required": false, 
+      "type": "array",
+      "collectionFormat": "csv",
+      "items": {
+      "type": "string", 
+      "enum": [ 
+        "metadata" 
+      ], 
+      "x-ms-enum": { 
+        "name": "ListQueuesIncludeType", 
+        "modelAsString": false 
+        }
+      },
+      "x-ms-parameter-location": "method",
+      "description": "Include this parameter to specify that the queues's metadata be returned as part of the response body."
+    },
+    "Marker": {
+      "name": "marker",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "description": "A string value that identifies the portion of the list of queues to be returned with the next listing operation. The operation returns the NextMarker value within the response body if the listing operation did not return all queues remaining to be listed with the current page. The NextMarker value can be used as the value for the marker parameter in a subsequent call to request the next page of list items. The marker value is opaque to the client.",
+      "x-ms-parameter-location": "method"
+    },
+    "MaxResults": {
+      "name": "maxresults",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 1,
+      "x-ms-parameter-location": "method",
+      "description": "Specifies the maximum number of queues to return. If the request does not specify maxresults, or specifies a value greater than 5000, the server will return up to 5000 items. Note that if the listing operation crosses a partition boundary, then the service will return a continuation token for retrieving the remainder of the results. For this reason, it is possible that the service will return fewer results than specified by maxresults, or than the default of 5000."
+    },
+    "MessageId": {
+      "name": "messageid",
+      "in": "path",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "The container name."
+    },
+    "MessageTTL": {
+      "name": "messagettl",
+      "x-ms-client-name": "MessageTimeToLive",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": -1,
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Specifies the time-to-live interval for the message, in seconds. Prior to version 2017-07-29, the maximum time-to-live allowed is 7 days. For version 2017-07-29 or later, the maximum time-to-live can be any positive number, as well as -1 indicating that the message does not expire. If this parameter is omitted, the default time-to-live is 7 days."
+    },
+    "Metadata": {
+      "name": "x-ms-meta",
+      "x-ms-client-name": "metadata",
+      "in": "header",
+      "required": false,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Include this parameter to specify that the queue's metadata be returned as part of the response body. Note that metadata requested with this parameter must be stored in accordance with the naming restrictions imposed by the 2009-09-19 version of the Queue service. Beginning with this version, all metadata names must adhere to the naming conventions for C# identifiers.",
+      "x-ms-header-collection-prefix": "x-ms-meta-"
+    },
+    "NumOfMessages": {
+      "name": "numofmessages",
+      "x-ms-client-name": "numberOfMessages",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 1,
+      "x-ms-parameter-location": "method",
+      "description": "Optional. A nonzero integer value that specifies the number of messages to retrieve from the queue, up to a maximum of 32. If fewer are visible, the visible messages are returned. By default, a single message is retrieved from the queue with this operation."
+    },
+    "PopReceipt": {
+      "name": "popreceipt",
+      "x-ms-client-name": "popReceipt",
+      "in": "query",
+      "required": true,
+      "x-ms-parameter-location": "method",
+      "description": "Required. Specifies the valid pop receipt value returned from an earlier call to the Get Messages or Update Message operation.",
+      "type": "string"
+    },
+    "Prefix": {
+      "name": "prefix",
+      "in": "query",
+      "required": false,
+      "type": "string",
+      "description": "Filters the results to return only queues whose name begins with the specified prefix.",
+      "x-ms-parameter-location": "method"
+    },
+    "QueueMessage": {
+      "name": "QueueMessage",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "$ref": "#/definitions/QueueMessage"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "A Message object which can be stored in a Queue"
+    },
+    "QueueName": {
+      "name": "queueName",
+      "in": "path",
+      "required": true,
+      "type": "string",
+      "x-ms-parameter-location": "method",
+      "description": "The queue name."
+    },
+    "StorageServiceProperties": {
+      "name": "StorageServiceProperties",
+      "in": "body",
+      "required": true,
+      "schema": {
+        "$ref": "#/definitions/StorageServiceProperties"
+      },
+      "x-ms-parameter-location": "method",
+      "description": "The StorageService properties."
+    },
+    "Timeout": {
+      "name": "timeout",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 0,
+      "x-ms-parameter-location": "method",
+      "description": "The The timeout parameter is expressed in seconds. For more information, see Setting Timeouts for Queue Service Operations."
+    },
+    "VisibilityTimeout": {
+      "name": "visibilitytimeout",
+      "in": "query",
+      "required": false,
+      "type": "integer",
+      "minimum": 0,
+      "maximum": 604800,
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Specifies the new visibility timeout value, in seconds, relative to server time. The default value is 30 seconds. A specified value must be larger than or equal to 1 second, and cannot be larger than 7 days, or larger than 2 hours on REST protocol versions prior to version 2011-08-18. The visibility timeout of a message can be set to a value later than the expiry time."
+    },
+    "VisibilityTimeoutRequired": {
+      "name": "visibilitytimeout",
+      "in": "query",
+      "required": true,
+      "type": "integer",
+      "minimum": 0,
+      "maximum": 604800,
+      "x-ms-parameter-location": "method",
+      "description": "Optional. Specifies the new visibility timeout value, in seconds, relative to server time. The default value is 30 seconds. A specified value must be larger than or equal to 1 second, and cannot be larger than 7 days, or larger than 2 hours on REST protocol versions prior to version 2011-08-18. The visibility timeout of a message can be set to a value later than the expiry time."
+    }
+  }
+}
\ No newline at end of file