Integrate extensible enum (#1275)

* Integrate extensible enum

* Resolve review comments
This commit is contained in:
Kan Tang 2021-01-06 21:46:44 +08:00 committed by GitHub
parent a0fded0c56
commit 535c77c9ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 452 additions and 796 deletions

View File

@ -18,6 +18,7 @@
- Renamed all functions and structures that could retrieve partial query results from the server to have `SinglePage` suffix instead of `Segment` suffix.
- `ReadFileResult` now have `ContentRange` as string.
- `ReadFileOptions` now have `Azure::Core::Http::Range Range` instead of `Content-Length` and `Offset`.
- Replace scoped enums that don't support bitwise operations with extensible enum.
## 12.0.0-beta.5 (2020-11-13)

View File

@ -49,6 +49,7 @@ set(
src/datalake_file_system_client.cpp
src/datalake_path_client.cpp
src/datalake_responses.cpp
src/datalake_rest_client.cpp
src/datalake_sas_builder.cpp
src/datalake_service_client.cpp
src/datalake_utilities.cpp

View File

@ -147,8 +147,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake { nam
std::string ETag;
Core::DateTime LastModified;
Azure::Core::Nullable<std::string> LeaseDuration;
LeaseStateType LeaseState = LeaseStateType::Unknown;
LeaseStatusType LeaseStatus = LeaseStatusType::Unknown;
LeaseStateType LeaseState;
LeaseStatusType LeaseStatus;
Storage::Metadata Metadata;
Core::DateTime CreatedOn;
Azure::Core::Nullable<Core::DateTime> ExpiresOn;

View File

@ -107,34 +107,68 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
std::string ContentType;
Storage::ContentHash ContentHash;
};
// The value must be "filesystem" for all filesystem operations.
enum class FileSystemResourceType
{
Filesystem,
Unknown
};
class FileSystemResourceType {
public:
FileSystemResourceType() = default;
explicit FileSystemResourceType(std::string value) : m_value(std::move(value)) {}
bool operator==(const FileSystemResourceType& other) const
{
return m_value == other.m_value;
}
bool operator!=(const FileSystemResourceType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static FileSystemResourceType Filesystem;
private:
std::string m_value;
}; // extensible enum FileSystemResourceType
// Mode "set" sets POSIX access control rights on files and directories, "modify" modifies one
// or more POSIX access control rights that pre-exist on files and directories, "remove"
// removes one or more POSIX access control rights that were present earlier on files and
// directories
enum class PathSetAccessControlRecursiveMode
{
Set,
Modify,
Remove,
Unknown
};
class PathSetAccessControlRecursiveMode {
public:
PathSetAccessControlRecursiveMode() = default;
explicit PathSetAccessControlRecursiveMode(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathSetAccessControlRecursiveMode& other) const
{
return m_value == other.m_value;
}
bool operator!=(const PathSetAccessControlRecursiveMode& other) const
{
return !(*this == other);
}
const std::string& Get() const { return m_value; }
const static PathSetAccessControlRecursiveMode Set;
const static PathSetAccessControlRecursiveMode Modify;
const static PathSetAccessControlRecursiveMode Remove;
private:
std::string m_value;
}; // extensible enum PathSetAccessControlRecursiveMode
// Required. Indicates mode of the expiry time
enum class PathExpiryOptions
{
NeverExpire,
RelativeToCreation,
RelativeToNow,
Absolute,
Unknown
};
class PathExpiryOptions {
public:
PathExpiryOptions() = default;
explicit PathExpiryOptions(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathExpiryOptions& other) const { return m_value == other.m_value; }
bool operator!=(const PathExpiryOptions& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PathExpiryOptions NeverExpire;
const static PathExpiryOptions RelativeToCreation;
const static PathExpiryOptions RelativeToNow;
const static PathExpiryOptions Absolute;
private:
std::string m_value;
}; // extensible enum PathExpiryOptions
struct AclFailedEntry
{
@ -181,29 +215,53 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
};
// The value must be "account" for all account operations.
enum class AccountResourceType
{
Account,
Unknown
};
class AccountResourceType {
public:
AccountResourceType() = default;
explicit AccountResourceType(std::string value) : m_value(std::move(value)) {}
bool operator==(const AccountResourceType& other) const { return m_value == other.m_value; }
bool operator!=(const AccountResourceType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static AccountResourceType Account;
private:
std::string m_value;
}; // extensible enum AccountResourceType
// Required only for Create File and Create Directory. The value must be "file" or "directory".
enum class PathResourceType
{
Directory,
File,
Unknown
};
class PathResourceType {
public:
PathResourceType() = default;
explicit PathResourceType(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathResourceType& other) const { return m_value == other.m_value; }
bool operator!=(const PathResourceType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PathResourceType Directory;
const static PathResourceType File;
private:
std::string m_value;
}; // extensible enum PathResourceType
// Optional. Valid only when namespace is enabled. This parameter determines the behavior of the
// rename operation. The value must be "legacy" or "posix", and the default value will be
// "posix".
enum class PathRenameMode
{
Legacy,
Posix,
Unknown
};
class PathRenameMode {
public:
PathRenameMode() = default;
explicit PathRenameMode(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathRenameMode& other) const { return m_value == other.m_value; }
bool operator!=(const PathRenameMode& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PathRenameMode Legacy;
const static PathRenameMode Posix;
private:
std::string m_value;
}; // extensible enum PathRenameMode
// There are five lease actions: "acquire", "break", "change", "renew", and "release". Use
// "acquire" and specify the "x-ms-proposed-lease-id" and "x-ms-lease-duration" to acquire a new
@ -214,45 +272,80 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
// lease ID in "x-ms-lease-id" and the new lease ID in "x-ms-proposed-lease-id" to change the
// lease ID of an active lease. Use "renew" and specify the "x-ms-lease-id" to renew an existing
// lease. Use "release" and specify the "x-ms-lease-id" to release a lease.
enum class PathLeaseAction
{
Acquire,
Break,
Change,
Renew,
Release,
Unknown
};
class PathLeaseAction {
public:
PathLeaseAction() = default;
explicit PathLeaseAction(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathLeaseAction& other) const { return m_value == other.m_value; }
bool operator!=(const PathLeaseAction& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PathLeaseAction Acquire;
const static PathLeaseAction Break;
const static PathLeaseAction Change;
const static PathLeaseAction Renew;
const static PathLeaseAction Release;
private:
std::string m_value;
}; // extensible enum PathLeaseAction
// Optional. If the value is "getStatus" only the system defined properties for the path are
// returned. If the value is "getAccessControl" the access control list is returned in the
// response headers (Hierarchical Namespace must be enabled for the account), otherwise the
// properties are returned.
enum class PathGetPropertiesAction
{
GetAccessControl,
GetStatus,
Unknown
};
class PathGetPropertiesAction {
public:
PathGetPropertiesAction() = default;
explicit PathGetPropertiesAction(std::string value) : m_value(std::move(value)) {}
bool operator==(const PathGetPropertiesAction& other) const
{
return m_value == other.m_value;
}
bool operator!=(const PathGetPropertiesAction& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PathGetPropertiesAction GetAccessControl;
const static PathGetPropertiesAction GetStatus;
private:
std::string m_value;
}; // extensible enum PathGetPropertiesAction
// Lease state of the resource.
enum class LeaseStateType
{
Available,
Leased,
Expired,
Breaking,
Broken,
Unknown
};
class LeaseStateType {
public:
LeaseStateType() = default;
explicit LeaseStateType(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseStateType& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseStateType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseStateType Available;
const static LeaseStateType Leased;
const static LeaseStateType Expired;
const static LeaseStateType Breaking;
const static LeaseStateType Broken;
private:
std::string m_value;
}; // extensible enum LeaseStateType
// The lease status of the resource.
enum class LeaseStatusType
{
Locked,
Unlocked,
Unknown
};
class LeaseStatusType {
public:
LeaseStatusType() = default;
explicit LeaseStatusType(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseStatusType& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseStatusType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseStatusType Locked;
const static LeaseStatusType Unlocked;
private:
std::string m_value;
}; // extensible enum LeaseStatusType
struct ServiceListFileSystemsResult
{
@ -367,320 +460,6 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
} // namespace Models
namespace Details {
inline std::string FileSystemResourceTypeToString(
const Models::FileSystemResourceType& fileSystemResourceType)
{
switch (fileSystemResourceType)
{
case Models::FileSystemResourceType::Filesystem:
return "filesystem";
default:
return std::string();
}
}
inline Models::FileSystemResourceType FileSystemResourceTypeFromString(
const std::string& fileSystemResourceType)
{
if (fileSystemResourceType == "filesystem")
{
return Models::FileSystemResourceType::Filesystem;
}
throw std::runtime_error(
"Cannot convert " + fileSystemResourceType + " to FileSystemResourceType");
}
inline std::string PathSetAccessControlRecursiveModeToString(
const Models::PathSetAccessControlRecursiveMode& pathSetAccessControlRecursiveMode)
{
switch (pathSetAccessControlRecursiveMode)
{
case Models::PathSetAccessControlRecursiveMode::Set:
return "set";
case Models::PathSetAccessControlRecursiveMode::Modify:
return "modify";
case Models::PathSetAccessControlRecursiveMode::Remove:
return "remove";
default:
return std::string();
}
}
inline Models::PathSetAccessControlRecursiveMode PathSetAccessControlRecursiveModeFromString(
const std::string& pathSetAccessControlRecursiveMode)
{
if (pathSetAccessControlRecursiveMode == "set")
{
return Models::PathSetAccessControlRecursiveMode::Set;
}
if (pathSetAccessControlRecursiveMode == "modify")
{
return Models::PathSetAccessControlRecursiveMode::Modify;
}
if (pathSetAccessControlRecursiveMode == "remove")
{
return Models::PathSetAccessControlRecursiveMode::Remove;
}
throw std::runtime_error(
"Cannot convert " + pathSetAccessControlRecursiveMode
+ " to PathSetAccessControlRecursiveMode");
}
inline std::string PathExpiryOptionsToString(const Models::PathExpiryOptions& pathExpiryOptions)
{
switch (pathExpiryOptions)
{
case Models::PathExpiryOptions::NeverExpire:
return "NeverExpire";
case Models::PathExpiryOptions::RelativeToCreation:
return "RelativeToCreation";
case Models::PathExpiryOptions::RelativeToNow:
return "RelativeToNow";
case Models::PathExpiryOptions::Absolute:
return "Absolute";
default:
return std::string();
}
}
inline Models::PathExpiryOptions PathExpiryOptionsFromString(
const std::string& pathExpiryOptions)
{
if (pathExpiryOptions == "NeverExpire")
{
return Models::PathExpiryOptions::NeverExpire;
}
if (pathExpiryOptions == "RelativeToCreation")
{
return Models::PathExpiryOptions::RelativeToCreation;
}
if (pathExpiryOptions == "RelativeToNow")
{
return Models::PathExpiryOptions::RelativeToNow;
}
if (pathExpiryOptions == "Absolute")
{
return Models::PathExpiryOptions::Absolute;
}
throw std::runtime_error("Cannot convert " + pathExpiryOptions + " to PathExpiryOptions");
}
inline std::string AccountResourceTypeToString(
const Models::AccountResourceType& accountResourceType)
{
switch (accountResourceType)
{
case Models::AccountResourceType::Account:
return "account";
default:
return std::string();
}
}
inline Models::AccountResourceType AccountResourceTypeFromString(
const std::string& accountResourceType)
{
if (accountResourceType == "account")
{
return Models::AccountResourceType::Account;
}
throw std::runtime_error("Cannot convert " + accountResourceType + " to AccountResourceType");
}
inline std::string PathResourceTypeToString(const Models::PathResourceType& pathResourceType)
{
switch (pathResourceType)
{
case Models::PathResourceType::Directory:
return "directory";
case Models::PathResourceType::File:
return "file";
default:
return std::string();
}
}
inline Models::PathResourceType PathResourceTypeFromString(const std::string& pathResourceType)
{
if (pathResourceType == "directory")
{
return Models::PathResourceType::Directory;
}
if (pathResourceType == "file")
{
return Models::PathResourceType::File;
}
throw std::runtime_error("Cannot convert " + pathResourceType + " to PathResourceType");
}
inline std::string PathRenameModeToString(const Models::PathRenameMode& pathRenameMode)
{
switch (pathRenameMode)
{
case Models::PathRenameMode::Legacy:
return "legacy";
case Models::PathRenameMode::Posix:
return "posix";
default:
return std::string();
}
}
inline Models::PathRenameMode PathRenameModeFromString(const std::string& pathRenameMode)
{
if (pathRenameMode == "legacy")
{
return Models::PathRenameMode::Legacy;
}
if (pathRenameMode == "posix")
{
return Models::PathRenameMode::Posix;
}
throw std::runtime_error("Cannot convert " + pathRenameMode + " to PathRenameMode");
}
inline std::string PathLeaseActionToString(const Models::PathLeaseAction& pathLeaseAction)
{
switch (pathLeaseAction)
{
case Models::PathLeaseAction::Acquire:
return "acquire";
case Models::PathLeaseAction::Break:
return "break";
case Models::PathLeaseAction::Change:
return "change";
case Models::PathLeaseAction::Renew:
return "renew";
case Models::PathLeaseAction::Release:
return "release";
default:
return std::string();
}
}
inline Models::PathLeaseAction PathLeaseActionFromString(const std::string& pathLeaseAction)
{
if (pathLeaseAction == "acquire")
{
return Models::PathLeaseAction::Acquire;
}
if (pathLeaseAction == "break")
{
return Models::PathLeaseAction::Break;
}
if (pathLeaseAction == "change")
{
return Models::PathLeaseAction::Change;
}
if (pathLeaseAction == "renew")
{
return Models::PathLeaseAction::Renew;
}
if (pathLeaseAction == "release")
{
return Models::PathLeaseAction::Release;
}
throw std::runtime_error("Cannot convert " + pathLeaseAction + " to PathLeaseAction");
}
inline std::string PathGetPropertiesActionToString(
const Models::PathGetPropertiesAction& pathGetPropertiesAction)
{
switch (pathGetPropertiesAction)
{
case Models::PathGetPropertiesAction::GetAccessControl:
return "getAccessControl";
case Models::PathGetPropertiesAction::GetStatus:
return "getStatus";
default:
return std::string();
}
}
inline Models::PathGetPropertiesAction PathGetPropertiesActionFromString(
const std::string& pathGetPropertiesAction)
{
if (pathGetPropertiesAction == "getAccessControl")
{
return Models::PathGetPropertiesAction::GetAccessControl;
}
if (pathGetPropertiesAction == "getStatus")
{
return Models::PathGetPropertiesAction::GetStatus;
}
throw std::runtime_error(
"Cannot convert " + pathGetPropertiesAction + " to PathGetPropertiesAction");
}
inline std::string LeaseStateTypeToString(const Models::LeaseStateType& leaseStateType)
{
switch (leaseStateType)
{
case Models::LeaseStateType::Available:
return "available";
case Models::LeaseStateType::Leased:
return "leased";
case Models::LeaseStateType::Expired:
return "expired";
case Models::LeaseStateType::Breaking:
return "breaking";
case Models::LeaseStateType::Broken:
return "broken";
default:
return std::string();
}
}
inline Models::LeaseStateType LeaseStateTypeFromString(const std::string& leaseStateType)
{
if (leaseStateType == "available")
{
return Models::LeaseStateType::Available;
}
if (leaseStateType == "leased")
{
return Models::LeaseStateType::Leased;
}
if (leaseStateType == "expired")
{
return Models::LeaseStateType::Expired;
}
if (leaseStateType == "breaking")
{
return Models::LeaseStateType::Breaking;
}
if (leaseStateType == "broken")
{
return Models::LeaseStateType::Broken;
}
throw std::runtime_error("Cannot convert " + leaseStateType + " to LeaseStateType");
}
inline std::string LeaseStatusTypeToString(const Models::LeaseStatusType& leaseStatusType)
{
switch (leaseStatusType)
{
case Models::LeaseStatusType::Locked:
return "locked";
case Models::LeaseStatusType::Unlocked:
return "unlocked";
default:
return std::string();
}
}
inline Models::LeaseStatusType LeaseStatusTypeFromString(const std::string& leaseStatusType)
{
if (leaseStatusType == "locked")
{
return Models::LeaseStatusType::Locked;
}
if (leaseStatusType == "unlocked")
{
return Models::LeaseStatusType::Unlocked;
}
throw std::runtime_error("Cannot convert " + leaseStatusType + " to LeaseStatusType");
}
class DataLakeRestClient {
public:
@ -805,7 +584,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
public:
struct CreateOptions
{
Models::FileSystemResourceType Resource = Models::FileSystemResourceType::Unknown;
Models::FileSystemResourceType Resource;
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -822,8 +601,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
request.AddHeader(Details::HeaderContentLength, "0");
request.GetUrl().AppendQueryParameter(
Details::QueryFileSystemResource,
Storage::Details::UrlEncodeQueryParameter(
FileSystemResourceTypeToString(createOptions.Resource)));
Storage::Details::UrlEncodeQueryParameter((createOptions.Resource.Get())));
if (createOptions.ClientRequestId.HasValue())
{
request.AddHeader(Details::HeaderRequestId, createOptions.ClientRequestId.GetValue());
@ -845,7 +623,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
struct SetPropertiesOptions
{
Models::FileSystemResourceType Resource = Models::FileSystemResourceType::Unknown;
Models::FileSystemResourceType Resource;
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -863,8 +641,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Patch, url);
request.GetUrl().AppendQueryParameter(
Details::QueryFileSystemResource,
Storage::Details::UrlEncodeQueryParameter(
FileSystemResourceTypeToString(setPropertiesOptions.Resource)));
Storage::Details::UrlEncodeQueryParameter((setPropertiesOptions.Resource.Get())));
if (setPropertiesOptions.ClientRequestId.HasValue())
{
request.AddHeader(
@ -902,7 +679,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
struct GetPropertiesOptions
{
Models::FileSystemResourceType Resource = Models::FileSystemResourceType::Unknown;
Models::FileSystemResourceType Resource;
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -917,8 +694,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Head, url);
request.GetUrl().AppendQueryParameter(
Details::QueryFileSystemResource,
Storage::Details::UrlEncodeQueryParameter(
FileSystemResourceTypeToString(getPropertiesOptions.Resource)));
Storage::Details::UrlEncodeQueryParameter((getPropertiesOptions.Resource.Get())));
if (getPropertiesOptions.ClientRequestId.HasValue())
{
request.AddHeader(
@ -937,7 +713,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
struct DeleteOptions
{
Models::FileSystemResourceType Resource = Models::FileSystemResourceType::Unknown;
Models::FileSystemResourceType Resource;
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -954,8 +730,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Delete, url);
request.GetUrl().AppendQueryParameter(
Details::QueryFileSystemResource,
Storage::Details::UrlEncodeQueryParameter(
FileSystemResourceTypeToString(deleteOptions.Resource)));
Storage::Details::UrlEncodeQueryParameter((deleteOptions.Resource.Get())));
if (deleteOptions.ClientRequestId.HasValue())
{
request.AddHeader(Details::HeaderRequestId, deleteOptions.ClientRequestId.GetValue());
@ -987,7 +762,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
struct ListPathsOptions
{
Models::FileSystemResourceType Resource = Models::FileSystemResourceType::Unknown;
Models::FileSystemResourceType Resource;
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -1007,8 +782,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter(
Details::QueryFileSystemResource,
Storage::Details::UrlEncodeQueryParameter(
FileSystemResourceTypeToString(listPathsOptions.Resource)));
Storage::Details::UrlEncodeQueryParameter((listPathsOptions.Resource.Get())));
if (listPathsOptions.ClientRequestId.HasValue())
{
request.AddHeader(
@ -1275,7 +1049,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
request.GetUrl().AppendQueryParameter(
Details::QueryPathResourceType,
Storage::Details::UrlEncodeQueryParameter(
PathResourceTypeToString(createOptions.Resource.GetValue())));
(createOptions.Resource.GetValue().Get())));
}
if (createOptions.ContinuationToken.HasValue())
{
@ -1288,8 +1062,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
request.GetUrl().AppendQueryParameter(
Details::QueryPathRenameMode,
Storage::Details::UrlEncodeQueryParameter(
PathRenameModeToString(createOptions.Mode.GetValue())));
Storage::Details::UrlEncodeQueryParameter((createOptions.Mode.GetValue().Get())));
}
if (createOptions.CacheControl.HasValue())
{
@ -1391,7 +1164,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Nullable<std::string> ClientRequestId;
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
Models::PathLeaseAction XMsLeaseAction = Models::PathLeaseAction::Unknown;
Models::PathLeaseAction XMsLeaseAction;
Azure::Core::Nullable<int32_t> XMsLeaseDuration;
Azure::Core::Nullable<int32_t> XMsLeaseBreakPeriod;
Azure::Core::Nullable<std::string> LeaseIdOptional;
@ -1422,8 +1195,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
std::to_string(leaseOptions.Timeout.GetValue())));
}
request.AddHeader(Details::HeaderVersion, leaseOptions.ApiVersionParameter);
request.AddHeader(
Details::HeaderPathLeaseAction, PathLeaseActionToString(leaseOptions.XMsLeaseAction));
request.AddHeader(Details::HeaderPathLeaseAction, (leaseOptions.XMsLeaseAction.Get()));
if (leaseOptions.XMsLeaseDuration.HasValue())
{
request.AddHeader(
@ -1509,7 +1281,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
request.GetUrl().AppendQueryParameter(
Details::QueryPathGetPropertiesAction,
Storage::Details::UrlEncodeQueryParameter(
PathGetPropertiesActionToString(getPropertiesOptions.Action.GetValue())));
(getPropertiesOptions.Action.GetValue().Get())));
}
if (getPropertiesOptions.Upn.HasValue())
{
@ -1714,8 +1486,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
Azure::Core::Nullable<int32_t> Timeout;
Azure::Core::Nullable<std::string> ContinuationToken;
Models::PathSetAccessControlRecursiveMode Mode
= Models::PathSetAccessControlRecursiveMode::Unknown;
Models::PathSetAccessControlRecursiveMode Mode;
Azure::Core::Nullable<bool> ForceFlag;
Azure::Core::Nullable<int32_t> MaxRecords;
Azure::Core::Nullable<std::string> Acl;
@ -1748,8 +1519,8 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
}
request.GetUrl().AppendQueryParameter(
Details::QueryPathSetAccessControlRecursiveMode,
Storage::Details::UrlEncodeQueryParameter(PathSetAccessControlRecursiveModeToString(
setAccessControlRecursiveOptions.Mode)));
Storage::Details::UrlEncodeQueryParameter(
(setAccessControlRecursiveOptions.Mode.Get())));
if (setAccessControlRecursiveOptions.ForceFlag.HasValue())
{
request.GetUrl().AppendQueryParameter(
@ -1982,7 +1753,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
Azure::Core::Nullable<int32_t> Timeout;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
Azure::Core::Nullable<std::string> ClientRequestId;
Models::PathExpiryOptions XMsExpiryOption = Models::PathExpiryOptions::Unknown;
Models::PathExpiryOptions XMsExpiryOption;
Azure::Core::Nullable<std::string> PathExpiryTime;
};
@ -2008,9 +1779,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
request.AddHeader(
Details::HeaderRequestId, setExpiryOptions.ClientRequestId.GetValue());
}
request.AddHeader(
Details::HeaderExpiryOptions,
PathExpiryOptionsToString(setExpiryOptions.XMsExpiryOption));
request.AddHeader(Details::HeaderExpiryOptions, (setExpiryOptions.XMsExpiryOption.Get()));
if (setExpiryOptions.PathExpiryTime.HasValue())
{
request.AddHeader(Details::HeaderExpiresOn, setExpiryOptions.PathExpiryTime.GetValue());
@ -2206,13 +1975,13 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
!= response.GetHeaders().end())
{
result.LeaseState
= LeaseStateTypeFromString(response.GetHeaders().at(Details::HeaderLeaseState));
= Models::LeaseStateType(response.GetHeaders().at(Details::HeaderLeaseState));
}
if (response.GetHeaders().find(Details::HeaderLeaseStatus)
!= response.GetHeaders().end())
{
result.LeaseStatus
= LeaseStatusTypeFromString(response.GetHeaders().at(Details::HeaderLeaseStatus));
= Models::LeaseStatusType(response.GetHeaders().at(Details::HeaderLeaseStatus));
}
return Azure::Core::Response<Models::PathGetPropertiesResult>(
std::move(result), std::move(responsePtr));

View File

@ -66,7 +66,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
return Models::LeaseStateType::Leased;
}
return Models::LeaseStateType::Unknown;
return Models::LeaseStateType();
}
Models::LeaseStatusType FromBlobLeaseStatus(Blobs::Models::BlobLeaseStatus status)
@ -79,7 +79,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
return Models::LeaseStatusType::Unlocked;
}
return Models::LeaseStatusType::Unknown;
return Models::LeaseStatusType();
}
} // namespace

View File

@ -55,7 +55,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
return Models::LeaseStateType::Leased;
}
return Models::LeaseStateType::Unknown;
return Models::LeaseStateType();
}
Models::LeaseStatusType FromBlobLeaseStatus(Blobs::Models::BlobLeaseStatus status)
@ -68,7 +68,7 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
{
return Models::LeaseStatusType::Unlocked;
}
return Models::LeaseStatusType::Unknown;
return Models::LeaseStatusType();
}
} // namespace

View File

@ -0,0 +1,45 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// SPDX-License-Identifier: MIT
#include "azure/storage/files/datalake/protocol/datalake_rest_client.hpp"
namespace Azure { namespace Storage { namespace Files { namespace DataLake { namespace Models {
const FileSystemResourceType FileSystemResourceType::Filesystem("filesystem");
const PathSetAccessControlRecursiveMode PathSetAccessControlRecursiveMode::Set("set");
const PathSetAccessControlRecursiveMode PathSetAccessControlRecursiveMode::Modify("modify");
const PathSetAccessControlRecursiveMode PathSetAccessControlRecursiveMode::Remove("remove");
const PathExpiryOptions PathExpiryOptions::NeverExpire("NeverExpire");
const PathExpiryOptions PathExpiryOptions::RelativeToCreation("RelativeToCreation");
const PathExpiryOptions PathExpiryOptions::RelativeToNow("RelativeToNow");
const PathExpiryOptions PathExpiryOptions::Absolute("Absolute");
const AccountResourceType AccountResourceType::Account("account");
const PathResourceType PathResourceType::Directory("directory");
const PathResourceType PathResourceType::File("file");
const PathRenameMode PathRenameMode::Legacy("legacy");
const PathRenameMode PathRenameMode::Posix("posix");
const PathLeaseAction PathLeaseAction::Acquire("acquire");
const PathLeaseAction PathLeaseAction::Break("break");
const PathLeaseAction PathLeaseAction::Change("change");
const PathLeaseAction PathLeaseAction::Renew("renew");
const PathLeaseAction PathLeaseAction::Release("release");
const PathGetPropertiesAction PathGetPropertiesAction::GetAccessControl("getAccessControl");
const PathGetPropertiesAction PathGetPropertiesAction::GetStatus("getStatus");
const LeaseStateType LeaseStateType::Available("available");
const LeaseStateType LeaseStateType::Leased("leased");
const LeaseStateType LeaseStateType::Expired("expired");
const LeaseStateType LeaseStateType::Breaking("breaking");
const LeaseStateType LeaseStateType::Broken("broken");
const LeaseStatusType LeaseStatusType::Locked("locked");
const LeaseStatusType LeaseStatusType::Unlocked("unlocked");
}}}}} // namespace Azure::Storage::Files::DataLake::Models

View File

@ -19,6 +19,7 @@
- Renamed all functions and structures that could retrieve partial query results from the server to have `SinglePage` suffix instead of `Segment` suffix.
- Removed `FileRange` and `ClearRange`, they are now represented with `Azure::Core::Http::Range`.
- Removed `Offset` and `Length` pair in options. They are now represented with `Azure::Core::Http::Range`.
- Replace scoped enums that don't support bitwise operations with extensible enum.
## 12.0.0-beta.5 (2020-11-13)

View File

@ -47,6 +47,7 @@ set(
src/share_client.cpp
src/share_directory_client.cpp
src/share_file_client.cpp
src/share_rest_client.cpp
src/share_sas_builder.cpp
src/share_service_client.cpp
)

View File

@ -134,30 +134,64 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::string ContentType;
Storage::ContentHash ContentHash;
};
// Specifies the option to copy file security descriptor from source file or to set it using the
// value which is defined by the header value of x-ms-file-permission or
// x-ms-file-permission-key.
enum class PermissionCopyModeType
{
Source,
Override,
Unknown
};
class PermissionCopyModeType {
public:
PermissionCopyModeType() = default;
explicit PermissionCopyModeType(std::string value) : m_value(std::move(value)) {}
bool operator==(const PermissionCopyModeType& other) const
{
return m_value == other.m_value;
}
bool operator!=(const PermissionCopyModeType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static PermissionCopyModeType Source;
const static PermissionCopyModeType Override;
private:
std::string m_value;
}; // extensible enum PermissionCopyModeType
// Specifies the option include to delete the base share and all of its snapshots.
enum class DeleteSnapshotsOptionType
{
Include,
Unknown
};
class DeleteSnapshotsOptionType {
public:
DeleteSnapshotsOptionType() = default;
explicit DeleteSnapshotsOptionType(std::string value) : m_value(std::move(value)) {}
bool operator==(const DeleteSnapshotsOptionType& other) const
{
return m_value == other.m_value;
}
bool operator!=(const DeleteSnapshotsOptionType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static DeleteSnapshotsOptionType Include;
private:
std::string m_value;
}; // extensible enum DeleteSnapshotsOptionType
// Only update is supported: - Update: Writes the bytes downloaded from the source url into the
// specified range.
enum class FileRangeWriteFromUrlType
{
Update,
Unknown
};
class FileRangeWriteFromUrlType {
public:
FileRangeWriteFromUrlType() = default;
explicit FileRangeWriteFromUrlType(std::string value) : m_value(std::move(value)) {}
bool operator==(const FileRangeWriteFromUrlType& other) const
{
return m_value == other.m_value;
}
bool operator!=(const FileRangeWriteFromUrlType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static FileRangeWriteFromUrlType Update;
private:
std::string m_value;
}; // extensible enum FileRangeWriteFromUrlType
// An Access policy.
struct AccessPolicy
@ -234,31 +268,55 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
};
// When a file or share is leased, specifies whether the lease is of infinite or fixed duration.
enum class LeaseDurationType
{
Infinite,
Fixed,
Unknown
};
class LeaseDurationType {
public:
LeaseDurationType() = default;
explicit LeaseDurationType(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseDurationType& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseDurationType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseDurationType Infinite;
const static LeaseDurationType Fixed;
private:
std::string m_value;
}; // extensible enum LeaseDurationType
// Lease state of the file or share.
enum class LeaseStateType
{
Available,
Leased,
Expired,
Breaking,
Broken,
Unknown
};
class LeaseStateType {
public:
LeaseStateType() = default;
explicit LeaseStateType(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseStateType& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseStateType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseStateType Available;
const static LeaseStateType Leased;
const static LeaseStateType Expired;
const static LeaseStateType Breaking;
const static LeaseStateType Broken;
private:
std::string m_value;
}; // extensible enum LeaseStateType
// The current lease status of the file or share.
enum class LeaseStatusType
{
Locked,
Unlocked,
Unknown
};
class LeaseStatusType {
public:
LeaseStatusType() = default;
explicit LeaseStatusType(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseStatusType& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseStatusType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseStatusType Locked;
const static LeaseStatusType Unlocked;
private:
std::string m_value;
}; // extensible enum LeaseStatusType
// An enumeration of directories and files.
struct ListFilesAndDirectoriesSinglePageResponse
@ -293,9 +351,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
Azure::Core::Nullable<Core::DateTime> NextAllowedQuotaDowngradeTime;
Azure::Core::Nullable<Core::DateTime> DeletedOn;
int32_t RemainingRetentionDays = int32_t();
Models::LeaseStatusType LeaseStatus = Models::LeaseStatusType::Unknown;
Models::LeaseStateType LeaseState = Models::LeaseStateType::Unknown;
Models::LeaseDurationType LeaseDuration = Models::LeaseDurationType::Unknown;
Models::LeaseStatusType LeaseStatus;
Models::LeaseStateType LeaseState;
Models::LeaseDurationType LeaseDuration;
};
// A listed Azure Storage share item.
@ -415,37 +473,61 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
};
// Describes what lease action to take.
enum class LeaseAction
{
Acquire,
Release,
Change,
Renew,
Break,
Unknown
};
class LeaseAction {
public:
LeaseAction() = default;
explicit LeaseAction(std::string value) : m_value(std::move(value)) {}
bool operator==(const LeaseAction& other) const { return m_value == other.m_value; }
bool operator!=(const LeaseAction& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static LeaseAction Acquire;
const static LeaseAction Release;
const static LeaseAction Change;
const static LeaseAction Renew;
const static LeaseAction Break;
private:
std::string m_value;
}; // extensible enum LeaseAction
// State of the copy operation identified by 'x-ms-copy-id'.
enum class CopyStatusType
{
Pending,
Success,
Aborted,
Failed,
Unknown
};
class CopyStatusType {
public:
CopyStatusType() = default;
explicit CopyStatusType(std::string value) : m_value(std::move(value)) {}
bool operator==(const CopyStatusType& other) const { return m_value == other.m_value; }
bool operator!=(const CopyStatusType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static CopyStatusType Pending;
const static CopyStatusType Success;
const static CopyStatusType Aborted;
const static CopyStatusType Failed;
private:
std::string m_value;
}; // extensible enum CopyStatusType
// 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.
enum class FileRangeWriteType
{
Update,
Clear,
Unknown
};
class FileRangeWriteType {
public:
FileRangeWriteType() = default;
explicit FileRangeWriteType(std::string value) : m_value(std::move(value)) {}
bool operator==(const FileRangeWriteType& other) const { return m_value == other.m_value; }
bool operator!=(const FileRangeWriteType& other) const { return !(*this == other); }
const std::string& Get() const { return m_value; }
const static FileRangeWriteType Update;
const static FileRangeWriteType Clear;
private:
std::string m_value;
}; // extensible enum FileRangeWriteType
struct ServiceSetPropertiesResult
{
@ -821,7 +903,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::string ETag;
Core::DateTime LastModified;
std::string CopyId;
CopyStatusType CopyStatus = CopyStatusType::Unknown;
CopyStatusType CopyStatus;
};
struct FileAbortCopyResult
@ -903,287 +985,6 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
} // namespace Models
namespace Details {
inline std::string PermissionCopyModeTypeToString(
const Models::PermissionCopyModeType& permissionCopyModeType)
{
switch (permissionCopyModeType)
{
case Models::PermissionCopyModeType::Source:
return "source";
case Models::PermissionCopyModeType::Override:
return "override";
default:
return std::string();
}
}
inline Models::PermissionCopyModeType PermissionCopyModeTypeFromString(
const std::string& permissionCopyModeType)
{
if (permissionCopyModeType == "source")
{
return Models::PermissionCopyModeType::Source;
}
if (permissionCopyModeType == "override")
{
return Models::PermissionCopyModeType::Override;
}
throw std::runtime_error(
"Cannot convert " + permissionCopyModeType + " to PermissionCopyModeType");
}
inline std::string DeleteSnapshotsOptionTypeToString(
const Models::DeleteSnapshotsOptionType& deleteSnapshotsOptionType)
{
switch (deleteSnapshotsOptionType)
{
case Models::DeleteSnapshotsOptionType::Include:
return "include";
default:
return std::string();
}
}
inline Models::DeleteSnapshotsOptionType DeleteSnapshotsOptionTypeFromString(
const std::string& deleteSnapshotsOptionType)
{
if (deleteSnapshotsOptionType == "include")
{
return Models::DeleteSnapshotsOptionType::Include;
}
throw std::runtime_error(
"Cannot convert " + deleteSnapshotsOptionType + " to DeleteSnapshotsOptionType");
}
inline std::string FileRangeWriteFromUrlTypeToString(
const Models::FileRangeWriteFromUrlType& fileRangeWriteFromUrlType)
{
switch (fileRangeWriteFromUrlType)
{
case Models::FileRangeWriteFromUrlType::Update:
return "update";
default:
return std::string();
}
}
inline Models::FileRangeWriteFromUrlType FileRangeWriteFromUrlTypeFromString(
const std::string& fileRangeWriteFromUrlType)
{
if (fileRangeWriteFromUrlType == "update")
{
return Models::FileRangeWriteFromUrlType::Update;
}
throw std::runtime_error(
"Cannot convert " + fileRangeWriteFromUrlType + " to FileRangeWriteFromUrlType");
}
inline std::string LeaseDurationTypeToString(const Models::LeaseDurationType& leaseDurationType)
{
switch (leaseDurationType)
{
case Models::LeaseDurationType::Infinite:
return "infinite";
case Models::LeaseDurationType::Fixed:
return "fixed";
default:
return std::string();
}
}
inline Models::LeaseDurationType LeaseDurationTypeFromString(
const std::string& leaseDurationType)
{
if (leaseDurationType == "infinite")
{
return Models::LeaseDurationType::Infinite;
}
if (leaseDurationType == "fixed")
{
return Models::LeaseDurationType::Fixed;
}
throw std::runtime_error("Cannot convert " + leaseDurationType + " to LeaseDurationType");
}
inline std::string LeaseStateTypeToString(const Models::LeaseStateType& leaseStateType)
{
switch (leaseStateType)
{
case Models::LeaseStateType::Available:
return "available";
case Models::LeaseStateType::Leased:
return "leased";
case Models::LeaseStateType::Expired:
return "expired";
case Models::LeaseStateType::Breaking:
return "breaking";
case Models::LeaseStateType::Broken:
return "broken";
default:
return std::string();
}
}
inline Models::LeaseStateType LeaseStateTypeFromString(const std::string& leaseStateType)
{
if (leaseStateType == "available")
{
return Models::LeaseStateType::Available;
}
if (leaseStateType == "leased")
{
return Models::LeaseStateType::Leased;
}
if (leaseStateType == "expired")
{
return Models::LeaseStateType::Expired;
}
if (leaseStateType == "breaking")
{
return Models::LeaseStateType::Breaking;
}
if (leaseStateType == "broken")
{
return Models::LeaseStateType::Broken;
}
throw std::runtime_error("Cannot convert " + leaseStateType + " to LeaseStateType");
}
inline std::string LeaseStatusTypeToString(const Models::LeaseStatusType& leaseStatusType)
{
switch (leaseStatusType)
{
case Models::LeaseStatusType::Locked:
return "locked";
case Models::LeaseStatusType::Unlocked:
return "unlocked";
default:
return std::string();
}
}
inline Models::LeaseStatusType LeaseStatusTypeFromString(const std::string& leaseStatusType)
{
if (leaseStatusType == "locked")
{
return Models::LeaseStatusType::Locked;
}
if (leaseStatusType == "unlocked")
{
return Models::LeaseStatusType::Unlocked;
}
throw std::runtime_error("Cannot convert " + leaseStatusType + " to LeaseStatusType");
}
inline std::string LeaseActionToString(const Models::LeaseAction& leaseAction)
{
switch (leaseAction)
{
case Models::LeaseAction::Acquire:
return "acquire";
case Models::LeaseAction::Release:
return "release";
case Models::LeaseAction::Change:
return "change";
case Models::LeaseAction::Renew:
return "renew";
case Models::LeaseAction::Break:
return "break";
default:
return std::string();
}
}
inline Models::LeaseAction LeaseActionFromString(const std::string& leaseAction)
{
if (leaseAction == "acquire")
{
return Models::LeaseAction::Acquire;
}
if (leaseAction == "release")
{
return Models::LeaseAction::Release;
}
if (leaseAction == "change")
{
return Models::LeaseAction::Change;
}
if (leaseAction == "renew")
{
return Models::LeaseAction::Renew;
}
if (leaseAction == "break")
{
return Models::LeaseAction::Break;
}
throw std::runtime_error("Cannot convert " + leaseAction + " to LeaseAction");
}
inline std::string CopyStatusTypeToString(const Models::CopyStatusType& copyStatusType)
{
switch (copyStatusType)
{
case Models::CopyStatusType::Pending:
return "pending";
case Models::CopyStatusType::Success:
return "success";
case Models::CopyStatusType::Aborted:
return "aborted";
case Models::CopyStatusType::Failed:
return "failed";
default:
return std::string();
}
}
inline Models::CopyStatusType CopyStatusTypeFromString(const std::string& copyStatusType)
{
if (copyStatusType == "pending")
{
return Models::CopyStatusType::Pending;
}
if (copyStatusType == "success")
{
return Models::CopyStatusType::Success;
}
if (copyStatusType == "aborted")
{
return Models::CopyStatusType::Aborted;
}
if (copyStatusType == "failed")
{
return Models::CopyStatusType::Failed;
}
throw std::runtime_error("Cannot convert " + copyStatusType + " to CopyStatusType");
}
inline std::string FileRangeWriteTypeToString(
const Models::FileRangeWriteType& fileRangeWriteType)
{
switch (fileRangeWriteType)
{
case Models::FileRangeWriteType::Update:
return "update";
case Models::FileRangeWriteType::Clear:
return "clear";
default:
return std::string();
}
}
inline Models::FileRangeWriteType FileRangeWriteTypeFromString(
const std::string& fileRangeWriteType)
{
if (fileRangeWriteType == "update")
{
return Models::FileRangeWriteType::Update;
}
if (fileRangeWriteType == "clear")
{
return Models::FileRangeWriteType::Clear;
}
throw std::runtime_error("Cannot convert " + fileRangeWriteType + " to FileRangeWriteType");
}
class ShareRestClient {
private:
@ -2087,7 +1888,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
static Models::LeaseStatusType LeaseStatusTypeFromXml(Storage::Details::XmlReader& reader)
{
auto result = Models::LeaseStatusType::Unknown;
Models::LeaseStatusType result;
enum class XmlTagName
{
LeaseStatus,
@ -2129,7 +1930,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
if (path.size() == 1 && path[0] == XmlTagName::LeaseStatus)
{
result = LeaseStatusTypeFromString(node.Value);
result = Models::LeaseStatusType(node.Value);
}
}
}
@ -2138,7 +1939,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
static Models::LeaseStateType LeaseStateTypeFromXml(Storage::Details::XmlReader& reader)
{
auto result = Models::LeaseStateType::Unknown;
Models::LeaseStateType result;
enum class XmlTagName
{
LeaseState,
@ -2180,7 +1981,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
if (path.size() == 1 && path[0] == XmlTagName::LeaseState)
{
result = LeaseStateTypeFromString(node.Value);
result = Models::LeaseStateType(node.Value);
}
}
}
@ -2190,7 +1991,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
static Models::LeaseDurationType LeaseDurationTypeFromXml(
Storage::Details::XmlReader& reader)
{
auto result = Models::LeaseDurationType::Unknown;
Models::LeaseDurationType result;
enum class XmlTagName
{
LeaseDuration,
@ -2232,7 +2033,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
if (path.size() == 1 && path[0] == XmlTagName::LeaseDuration)
{
result = LeaseDurationTypeFromString(node.Value);
result = Models::LeaseDurationType(node.Value);
}
}
}
@ -2772,7 +2573,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.AddHeader(
Details::HeaderDeleteSnapshots,
DeleteSnapshotsOptionTypeToString(deleteOptions.XMsDeleteSnapshots.GetValue()));
(deleteOptions.XMsDeleteSnapshots.GetValue().Get()));
}
if (deleteOptions.LeaseIdOptional.HasValue())
{
@ -3426,20 +3227,20 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
if (response.GetHeaders().find(Details::HeaderLeaseDuration)
!= response.GetHeaders().end())
{
result.LeaseDuration = LeaseDurationTypeFromString(
result.LeaseDuration = Models::LeaseDurationType(
response.GetHeaders().at(Details::HeaderLeaseDuration));
}
if (response.GetHeaders().find(Details::HeaderLeaseState)
!= response.GetHeaders().end())
{
result.LeaseState
= LeaseStateTypeFromString(response.GetHeaders().at(Details::HeaderLeaseState));
= Models::LeaseStateType(response.GetHeaders().at(Details::HeaderLeaseState));
}
if (response.GetHeaders().find(Details::HeaderLeaseStatus)
!= response.GetHeaders().end())
{
result.LeaseStatus
= LeaseStatusTypeFromString(response.GetHeaders().at(Details::HeaderLeaseStatus));
= Models::LeaseStatusType(response.GetHeaders().at(Details::HeaderLeaseStatus));
}
return Azure::Core::Response<Models::ShareGetPropertiesResult>(
std::move(result), std::move(responsePtr));
@ -5851,7 +5652,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
Azure::Core::Nullable<int32_t> Timeout;
std::string XMsRange;
Models::FileRangeWriteType XMsWrite = Models::FileRangeWriteType::Unknown;
Models::FileRangeWriteType XMsWrite;
int64_t ContentLength = int64_t();
Azure::Core::Nullable<Storage::ContentHash> ContentMd5;
std::string ApiVersionParameter = Details::DefaultServiceApiVersion;
@ -5875,9 +5676,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::to_string(uploadRangeOptions.Timeout.GetValue())));
}
request.AddHeader(Details::HeaderXMsRange, uploadRangeOptions.XMsRange);
request.AddHeader(
Details::HeaderFileRangeWrite,
FileRangeWriteTypeToString(uploadRangeOptions.XMsWrite));
request.AddHeader(Details::HeaderFileRangeWrite, (uploadRangeOptions.XMsWrite.Get()));
request.AddHeader(
Details::HeaderContentLength, std::to_string(uploadRangeOptions.ContentLength));
if (uploadRangeOptions.ContentMd5.HasValue())
@ -5901,7 +5700,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
std::string TargetRange;
std::string CopySource;
Azure::Core::Nullable<std::string> SourceRange;
Models::FileRangeWriteFromUrlType XMsWrite = Models::FileRangeWriteFromUrlType::Unknown;
Models::FileRangeWriteFromUrlType XMsWrite;
int64_t ContentLength = int64_t();
Azure::Core::Nullable<Storage::ContentHash> SourceContentCrc64;
Azure::Core::Nullable<Storage::ContentHash> SourceIfMatchCrc64;
@ -5934,8 +5733,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
Details::HeaderSourceRange, uploadRangeFromUrlOptions.SourceRange.GetValue());
}
request.AddHeader(
Details::HeaderFileRangeWriteFromUrl,
FileRangeWriteFromUrlTypeToString(uploadRangeFromUrlOptions.XMsWrite));
Details::HeaderFileRangeWriteFromUrl, (uploadRangeFromUrlOptions.XMsWrite.Get()));
request.AddHeader(
Details::HeaderContentLength,
std::to_string(uploadRangeFromUrlOptions.ContentLength));
@ -6073,8 +5871,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
{
request.AddHeader(
Details::HeaderFilePermissionCopyMode,
PermissionCopyModeTypeToString(
startCopyOptions.XMsFilePermissionCopyMode.GetValue()));
(startCopyOptions.XMsFilePermissionCopyMode.GetValue().Get()));
}
if (startCopyOptions.FileCopyIgnoreReadOnly.HasValue())
{
@ -6372,7 +6169,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
!= response.GetHeaders().end())
{
result.CopyStatus
= CopyStatusTypeFromString(response.GetHeaders().at(Details::HeaderCopyStatus));
= Models::CopyStatusType(response.GetHeaders().at(Details::HeaderCopyStatus));
}
if (response.GetHeaders().find(Details::HeaderContentHashMd5)
!= response.GetHeaders().end())
@ -6402,20 +6199,20 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
if (response.GetHeaders().find(Details::HeaderLeaseDuration)
!= response.GetHeaders().end())
{
result.LeaseDuration = LeaseDurationTypeFromString(
result.LeaseDuration = Models::LeaseDurationType(
response.GetHeaders().at(Details::HeaderLeaseDuration));
}
if (response.GetHeaders().find(Details::HeaderLeaseState)
!= response.GetHeaders().end())
{
result.LeaseState
= LeaseStateTypeFromString(response.GetHeaders().at(Details::HeaderLeaseState));
= Models::LeaseStateType(response.GetHeaders().at(Details::HeaderLeaseState));
}
if (response.GetHeaders().find(Details::HeaderLeaseStatus)
!= response.GetHeaders().end())
{
result.LeaseStatus
= LeaseStatusTypeFromString(response.GetHeaders().at(Details::HeaderLeaseStatus));
= Models::LeaseStatusType(response.GetHeaders().at(Details::HeaderLeaseStatus));
}
return Azure::Core::Response<Models::FileDownloadResult>(
std::move(result), std::move(responsePtr));
@ -6508,7 +6305,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
!= response.GetHeaders().end())
{
result.CopyStatus
= CopyStatusTypeFromString(response.GetHeaders().at(Details::HeaderCopyStatus));
= Models::CopyStatusType(response.GetHeaders().at(Details::HeaderCopyStatus));
}
if (response.GetHeaders().find(Details::HeaderContentHashMd5)
!= response.GetHeaders().end())
@ -6538,20 +6335,20 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
if (response.GetHeaders().find(Details::HeaderLeaseDuration)
!= response.GetHeaders().end())
{
result.LeaseDuration = LeaseDurationTypeFromString(
result.LeaseDuration = Models::LeaseDurationType(
response.GetHeaders().at(Details::HeaderLeaseDuration));
}
if (response.GetHeaders().find(Details::HeaderLeaseState)
!= response.GetHeaders().end())
{
result.LeaseState
= LeaseStateTypeFromString(response.GetHeaders().at(Details::HeaderLeaseState));
= Models::LeaseStateType(response.GetHeaders().at(Details::HeaderLeaseState));
}
if (response.GetHeaders().find(Details::HeaderLeaseStatus)
!= response.GetHeaders().end())
{
result.LeaseStatus
= LeaseStatusTypeFromString(response.GetHeaders().at(Details::HeaderLeaseStatus));
= Models::LeaseStatusType(response.GetHeaders().at(Details::HeaderLeaseStatus));
}
return Azure::Core::Response<Models::FileDownloadResult>(
std::move(result), std::move(responsePtr));
@ -6654,7 +6451,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
!= response.GetHeaders().end())
{
result.CopyStatus
= CopyStatusTypeFromString(response.GetHeaders().at(Details::HeaderCopyStatus));
= Models::CopyStatusType(response.GetHeaders().at(Details::HeaderCopyStatus));
}
if (response.GetHeaders().find(Details::HeaderIsServerEncrypted)
!= response.GetHeaders().end())
@ -6678,20 +6475,20 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
if (response.GetHeaders().find(Details::HeaderLeaseDuration)
!= response.GetHeaders().end())
{
result.LeaseDuration = LeaseDurationTypeFromString(
result.LeaseDuration = Models::LeaseDurationType(
response.GetHeaders().at(Details::HeaderLeaseDuration));
}
if (response.GetHeaders().find(Details::HeaderLeaseState)
!= response.GetHeaders().end())
{
result.LeaseState
= LeaseStateTypeFromString(response.GetHeaders().at(Details::HeaderLeaseState));
= Models::LeaseStateType(response.GetHeaders().at(Details::HeaderLeaseState));
}
if (response.GetHeaders().find(Details::HeaderLeaseStatus)
!= response.GetHeaders().end())
{
result.LeaseStatus
= LeaseStatusTypeFromString(response.GetHeaders().at(Details::HeaderLeaseStatus));
= Models::LeaseStatusType(response.GetHeaders().at(Details::HeaderLeaseStatus));
}
return Azure::Core::Response<Models::FileGetPropertiesResult>(
std::move(result), std::move(responsePtr));
@ -7075,7 +6872,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
!= response.GetHeaders().end())
{
result.CopyStatus
= CopyStatusTypeFromString(response.GetHeaders().at(Details::HeaderCopyStatus));
= Models::CopyStatusType(response.GetHeaders().at(Details::HeaderCopyStatus));
}
return Azure::Core::Response<Models::FileStartCopyResult>(
std::move(result), std::move(responsePtr));

View File

@ -0,0 +1,41 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// SPDX-License-Identifier: MIT
#include "azure/storage/files/shares/protocol/share_rest_client.hpp"
namespace Azure { namespace Storage { namespace Files { namespace Shares { namespace Models {
const PermissionCopyModeType PermissionCopyModeType::Source("source");
const PermissionCopyModeType PermissionCopyModeType::Override("override");
const DeleteSnapshotsOptionType DeleteSnapshotsOptionType::Include("include");
const FileRangeWriteFromUrlType FileRangeWriteFromUrlType::Update("update");
const LeaseDurationType LeaseDurationType::Infinite("infinite");
const LeaseDurationType LeaseDurationType::Fixed("fixed");
const LeaseStateType LeaseStateType::Available("available");
const LeaseStateType LeaseStateType::Leased("leased");
const LeaseStateType LeaseStateType::Expired("expired");
const LeaseStateType LeaseStateType::Breaking("breaking");
const LeaseStateType LeaseStateType::Broken("broken");
const LeaseStatusType LeaseStatusType::Locked("locked");
const LeaseStatusType LeaseStatusType::Unlocked("unlocked");
const LeaseAction LeaseAction::Acquire("acquire");
const LeaseAction LeaseAction::Release("release");
const LeaseAction LeaseAction::Change("change");
const LeaseAction LeaseAction::Renew("renew");
const LeaseAction LeaseAction::Break("break");
const CopyStatusType CopyStatusType::Pending("pending");
const CopyStatusType CopyStatusType::Success("success");
const CopyStatusType CopyStatusType::Aborted("aborted");
const CopyStatusType CopyStatusType::Failed("failed");
const FileRangeWriteType FileRangeWriteType::Update("update");
const FileRangeWriteType FileRangeWriteType::Clear("clear");
}}}}} // namespace Azure::Storage::Files::Shares::Models