/*
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef THIRD_PARTY_ECCLESIA_LIB_REDFISH_AUTHORIZER_ENUMS_H_
#define THIRD_PARTY_ECCLESIA_LIB_REDFISH_AUTHORIZER_ENUMS_H_

#include <cstdint>
#include <string>

#include "absl/strings/string_view.h"

namespace ecclesia {

enum class ResourceEntity : int {
  // go/keep-sorted start
  kAccelerationFunction = 0,
  kAccelerationFunctionCollection,
  kAccountService,
  kActionInfo,
  kAddressPool,
  kAddressPoolCollection,
  kAggregate,
  kAggregateCollection,
  kAggregationService,
  kAggregationSource,
  kAggregationSourceCollection,
  kAllowDeny,
  kAllowDenyCollection,
  kAssembly,
  kBattery,
  kBatteryCollection,
  kBatteryMetrics,
  kBios,
  kBootOption,
  kBootOptionCollection,
  kCXLLogicalDevice,
  kCXLLogicalDeviceCollection,
  kCable,
  kCableCollection,
  kCertificate,
  kCertificateCollection,
  kCertificateLocations,
  kCertificateService,
  kChassis,
  kChassisCollection,
  kCircuit,
  kCircuitCollection,
  kComponentIntegrity,
  kComponentIntegrityCollection,
  kCompositionReservation,
  kCompositionReservationCollection,
  kCompositionService,
  kComputerSystem,
  kComputerSystemCollection,
  kConnection,
  kConnectionCollection,
  kConnectionMethod,
  kConnectionMethodCollection,
  kControl,
  kControlCollection,
  kDrive,
  kDriveCollection,
  kEndpoint,
  kEndpointCollection,
  kEndpointGroup,
  kEndpointGroupCollection,
  kEnvironmentMetrics,
  kEthernetInterface,
  kEthernetInterfaceCollection,
  kEventDestination,
  kEventDestinationCollection,
  kEventService,
  kExternalAccountProvider,
  kExternalAccountProviderCollection,
  kFabric,
  kFabricAdapter,
  kFabricAdapterCollection,
  kFabricCollection,
  kFacility,
  kFacilityCollection,
  kFan,
  kFanCollection,
  kGoogleAsicErrorCounters,
  kGoogleAsicFleetCounters,
  kGoogleAsicHbmErrors,
  kGoogleAsicHbmPcr,
  kGoogleAsicHbmPpr,
  kGoogleAsicUtilization,
  kGoogleBareMetalInstance,
  kGoogleBootTime,
  kGoogleErrorCounter,
  kGoogleErrorCounterCollection,
  kGoogleHbmOnlineRepair,
  kGoogleManagedObjectStoreMetrics,
  kGoogleNvmeMetric,
  kGooglePower,
  kGooglePowerTpu,
  kGooglePowerTpuCollection,
  kGooglePowerVCore,
  kGooglePowerVCoreCollection,
  kGoogleProcessor,
  kGoogleRasService,
  kGooglegRPCStatistics,
  kGraphicsController,
  kGraphicsControllerCollection,
  kHeater,
  kHeaterCollection,
  kHeaterMetrics,
  kHostInterface,
  kHostInterfaceCollection,
  kJob,
  kJobCollection,
  kJobService,
  kJsonSchemaFile,
  kJsonSchemaFileCollection,
  kKey,
  kKeyCollection,
  kKeyPolicy,
  kKeyPolicyCollection,
  kKeyService,
  kLogEntry,
  kLogEntryCollection,
  kLogService,
  kLogServiceCollection,
  kManager,
  kManagerAccount,
  kManagerAccountCollection,
  kManagerCollection,
  kManagerDiagnosticData,
  kManagerNetworkProtocol,
  kMediaController,
  kMediaControllerCollection,
  kMemory,
  kMemoryChunks,
  kMemoryChunksCollection,
  kMemoryCollection,
  kMemoryDomain,
  kMemoryDomainCollection,
  kMemoryMetrics,
  kMessageRegistryFile,
  kMessageRegistryFileCollection,
  kMetricDefinition,
  kMetricDefinitionCollection,
  kMetricReport,
  kMetricReportCollection,
  kMetricReportDefinition,
  kMetricReportDefinitionCollection,
  kNVMe,
  kNVMeCollection,
  kNVMeController,
  kNVMeControllerCollection,
  kNetworkAdapter,
  kNetworkAdapterCollection,
  kNetworkAdapterMetrics,
  kNetworkDeviceFunction,
  kNetworkDeviceFunctionCollection,
  kNetworkDeviceFunctionMetrics,
  kNetworkInterface,
  kNetworkInterfaceCollection,
  kNetworkPort,
  kNetworkPortCollection,
  kNvidiaDebugToken,
  kNvidiaDebugTokenService,
  kNvidiaErrorInjection,
  kNvidiaHistogram,
  kNvidiaHistogramBucket,
  kNvidiaHistogramBuckets,
  kNvidiaHistogramCollection,
  kNvidiaPowerSmoothing,
  kNvidiaPowerSmoothingPresetProfile,
  kNvidiaPowerSmoothingPresetProfileCollection,
  kNvidiaRoTImageSlot,
  kNvidiaRoTImageSlotCollection,
  kNvidiaRoTProtectedComponent,
  kNvidiaRoTProtectedComponentCollection,
  kNvidiaRoTProtectedComponentSettings,
  kNvidiaSwitchPowerMode,
  kNvidiaWorkloadPower,
  kNvidiaWorkloadPowerProfile,
  kNvidiaWorkloadPowerProfileCollection,
  kOperatingConfig,
  kOperatingConfigCollection,
  kOutlet,
  kOutletCollection,
  kOutletGroup,
  kOutletGroupCollection,
  kPCIeDevice,
  kPCIeDeviceCollection,
  kPCIeFunction,
  kPCIeFunctionCollection,
  kPCIeSlots,
  kPort,
  kPortCollection,
  kPortMetrics,
  kPortSettings,
  kPower,
  kPowerDistribution,
  kPowerDistributionCollection,
  kPowerDistributionMetrics,
  kPowerDomain,
  kPowerDomainCollection,
  kPowerEquipment,
  kPowerSubsystem,
  kPowerSupply,
  kPowerSupplyCollection,
  kPowerSupplyMetrics,
  kPrivilegeRegistry,
  kProcessor,
  kProcessorCollection,
  kProcessorMetrics,
  kResourceBlock,
  kResourceBlockCollection,
  kRole,
  kRoleCollection,
  kRootOfTrust,
  kRootOfTrustCollection,
  kRouteEntry,
  kRouteEntryCollection,
  kRouteSetEntry,
  kRouteSetEntryCollection,
  kSecureBoot,
  kSecureBootDatabase,
  kSecureBootDatabaseCollection,
  kSensor,
  kSensorCollection,
  kSerialInterface,
  kSerialInterfaceCollection,
  kServiceRoot,
  kSession,
  kSessionCollection,
  kSessionService,
  kSignature,
  kSignatureCollection,
  kSimpleStorage,
  kSimpleStorageCollection,
  kSoftwareInventory,
  kSoftwareInventoryCollection,
  kStorage,
  kStorageCollection,
  kStorageController,
  kStorageControllerCollection,
  kSwitch,
  kSwitchCollection,
  kTask,
  kTaskCollection,
  kTaskService,
  kTelemetryService,
  kThermal,
  kThermalMetrics,
  kThermalSubsystem,
  kTlBMCAllChassis,
  kTlBMCAllSensors,
  kTlBMCDebugApp,
  kTlBMCDebugEndpoint,
  kTlBMCDebugStore,
  kTlBMCMetrics,
  kTlBMCSchedulerStats,
  kTlBMCServiceRoot,
  kTriggers,
  kTriggersCollection,
  kTrustedComponent,
  kTrustedComponentCollection,
  kUSBController,
  kUSBControllerCollection,
  kUpdateService,
  kVCATEntry,
  kVCATEntryCollection,
  kVLanNetworkInterface,
  kVLanNetworkInterfaceCollection,
  kVirtualMedia,
  kVirtualMediaCollection,
  kVolume,
  kVolumeCollection,
  kZone,
  kZoneCollection,
  // go/keep-sorted end
  kUndefined,
};

enum class Operation : uint8_t {
  kDelete = 0,
  kGet,
  kHead,
  kPatch,
  kPost,
  kPut,
  kUndefined,
};

// copybara:strip_begin(g3-shared-libs)
// Returns the string representation of the given resource entity.
std::string ResourceEntityToString(ResourceEntity entity);

// Returns the string representation of the given operation.
std::string OperationToString(Operation operation);

// Returns the resource entity of the given string.
ResourceEntity StringToResourceEntity(absl::string_view resource);

// Returns the operation of the given string.
Operation StringToOperation(absl::string_view operation);
// copybara:strip_end

}  // namespace ecclesia

#endif  // THIRD_PARTY_ECCLESIA_LIB_REDFISH_AUTHORIZER_ENUMS_H_
