| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/storage/volume_image/options.h" |
| |
| #include <cstdlib> |
| #include <string> |
| |
| namespace storage::volume_image { |
| |
| template <> |
| std::string EnumAsString(CompressionSchema schema) { |
| switch (schema) { |
| case CompressionSchema::kNone: |
| return "COMPRESSION_SCHEMA_NONE"; |
| case CompressionSchema::kLz4: |
| return "COMPRESSION_SCHEMA_LZ4"; |
| default: |
| return "COMPRESSION_SCHEMA_UNKNOWN"; |
| } |
| } |
| |
| template <> |
| std::string EnumAsString(EncryptionType encryption) { |
| switch (encryption) { |
| case EncryptionType::kNone: |
| return "ENCRYPTION_TYPE_NONE"; |
| case EncryptionType::kZxcrypt: |
| return "ENCRYPTION_TYPE_ZXCRYPT"; |
| } |
| } |
| |
| template <> |
| std::string EnumAsString(Option option) { |
| switch (option) { |
| case Option::kNone: |
| return "OPTION_NONE"; |
| case Option::kEmpty: |
| return "OPTION_EMPTY"; |
| } |
| } |
| |
| template <> |
| std::string EnumAsString(AddressMapOption option) { |
| switch (option) { |
| case AddressMapOption::kFill: |
| return "ADDRESS_MAP_OPTION_FILL"; |
| default: |
| return "ADDRESS_MAP_OPTION_UNKNOWN"; |
| } |
| } |
| |
| template <> |
| fit::result<CompressionSchema, std::string> StringAsEnum(std::string_view compression) { |
| static const std::unordered_map<std::string_view, CompressionSchema> string_to_compression = { |
| {"COMPRESSION_SCHEMA_NONE", CompressionSchema::kNone}, |
| {"COMPRESSION_SCHEMA_LZ4", CompressionSchema::kLz4}}; |
| if (string_to_compression.find(compression) == string_to_compression.end()) { |
| std::string error = "Unknown compression scheme("; |
| error.append(compression).append(").\n"); |
| return fit::error(std::move(error)); |
| } |
| |
| return fit::ok(string_to_compression.at(compression)); |
| } |
| |
| template <> |
| fit::result<EncryptionType, std::string> StringAsEnum(std::string_view encryption) { |
| static const std::unordered_map<std::string_view, EncryptionType> string_to_encryption = { |
| {"ENCRYPTION_TYPE_NONE", EncryptionType::kNone}, |
| {"ENCRYPTION_TYPE_ZXCRYPT", EncryptionType::kZxcrypt}}; |
| if (string_to_encryption.find(encryption) == string_to_encryption.end()) { |
| std::string error = "Unknown encryption type("; |
| error.append(encryption).append(").\n"); |
| return fit::error(std::move(error)); |
| } |
| |
| return fit::ok(string_to_encryption.at(encryption)); |
| } |
| |
| template <> |
| fit::result<Option, std::string> StringAsEnum(std::string_view option) { |
| static const std::unordered_map<std::string_view, Option> string_to_option = { |
| {"OPTION_NONE", Option::kNone}, {"OPTION_EMPTY", Option::kEmpty}}; |
| if (string_to_option.find(option) == string_to_option.end()) { |
| std::string error = "Unknown option type("; |
| error.append(option).append(").\n"); |
| return fit::error(std::move(error)); |
| } |
| |
| return fit::ok(string_to_option.at(option)); |
| } |
| |
| template <> |
| fit::result<AddressMapOption, std::string> StringAsEnum(std::string_view option) { |
| static const std::unordered_map<std::string_view, AddressMapOption> string_to_option = { |
| {"ADDRESS_MAP_OPTION_FILL", AddressMapOption::kFill}}; |
| if (string_to_option.find(option) == string_to_option.end()) { |
| return fit::error("Unknown AddressMapOption type(" + std::string(option) + ").\n"); |
| } |
| |
| return fit::ok(string_to_option.at(option)); |
| } |
| |
| } // namespace storage::volume_image |