pub enum Scope {
  // Public Data
  PublicData,
  // Alliances
  AllianceReadContacts,
  // Assets
  AssetsRead,
  AssetsReadCorporation,
  // Calendar
  CalendarReadEvents,
  CalendarRespondEvents,
  // Characters
  CharacterReadAgentsResearch,
  CharacterReadBlueprints,
  CharacterReadChatChannels,
  CharacterReadContacts,
  CharacterReadCorporationRoles,
  CharacterReadFatigue,
  CharacterReadFreelanceJobs,
  CharacterReadFwStats,
  CharacterReadLoyalty,
  CharacterReadMedals,
  CharacterReadNotifications,
  CharacterReadStandings,
  CharacterReadTitles,
  CharacterWriteContacts,
  // Clones
  ClonesRead,
  ClonesReadImplants,
  // Contacts
  ContractsReadCharacter,
  ContractsReadCorporation,
  // Corporations
  CorporationsReadBlueprints,
  CorporationReadContacts,
  CorporationReadContainerLogs,
  CorporationReadMembership,
  CorporationReadDivisions,
  CorporationReadFacilities,
  CorporationReadFreelanceJobs,
  CorporationReadFwStats,
  CorporationReadMedals,
  CorporationReadProjects,
  CorporationReadStandings,
  CorporationReadStarbases,
  CorporationReadStructures,
  CorporationReadTitles,
  CorporationReadTrackMembers,
  // Fittings
  FittingsRead,
  FittingsWrite,
  // Fleets
  FleetsRead,
  FleetsWrite,
  // Industry
  IndustryReadCharacterJobs,
  IndustryReadCharacterMining,
  IndustryReadCorporationJobs,
  IndustryReadCorporationMining,
  // Killmails
  KillmailsReadCorporation,
  KillmailsRead,
  // Location
  LocationRead,
  LocationReadOnline,
  LocationReadShipType,
  // Mail
  MailOrganize,
  MailRead,
  MailSend,
  // Markets
  MarketsReadCharacterOrders,
  MarketsReadCorporationOrders,
  MarketsStructureMarkets,
  // Planets
  PlanetsManage,
  PlanetsReadCustomsOffices,
  // Search
  SearchStructures,
  // Skills
  SkillsReadQueue,
  SkillsRead,
  // UI
  UIOpenWindow,
  UIWriteWaypoint,
  // Universe
  UniverseReadStructures,
  // Wallet
  WalletReadCharacter,
  WalletReadCorporation,
  WalletReadCorporationWallets,
}

impl Scope {
  pub fn as_str(&self) -> &str {
    match self {
      Scope::PublicData => "publicData",
      Scope::AllianceReadContacts => "esi-alliances.read_contacts.v1",
      Scope::AssetsRead => "esi-assets.read_assets.v1",
      Scope::AssetsReadCorporation => "esi-assets.read_corporation_assets.v1",
      Scope::CalendarReadEvents => "esi-calendar.respond_calendar_events.v1",
      Scope::CalendarRespondEvents => "esi-calendar.read_calendar_events.v1",
      Scope::CharacterReadAgentsResearch => "esi-characters.read_agents_research.v1",
      Scope::CharacterReadBlueprints => "esi-characters.read_blueprints.v1",
      Scope::CharacterReadChatChannels => "esi-chat.read_chat_channels.v1",
      Scope::CharacterReadContacts => "esi-characters.read_contacts.v1",
      Scope::CharacterReadCorporationRoles => "esi-corporations.read_corporation_roles.v1",
      Scope::CharacterReadFatigue => "esi-characters.read_fatigue.v1",
      Scope::CharacterReadFreelanceJobs => "esi-characters.read_freelance_jobs.v1",
      Scope::CharacterReadFwStats => "esi-characters.read_fw_stats.v1",
      Scope::CharacterReadLoyalty => "esi-characters.read_loyalty.v1",
      Scope::CharacterReadMedals => "esi-characters.read_medals.v1",
      Scope::CharacterReadNotifications => "esi-characters.read_notifications.v1",
      Scope::CharacterReadStandings => "esi-characters.read_standings.v1",
      Scope::CharacterReadTitles => "esi-characters.read_titles.v1",
      Scope::CharacterWriteContacts => "esi-characters.write_contacts.v1",
      Scope::ClonesRead => "esi-clones.read_clones.v1",
      Scope::ClonesReadImplants => "esi-clones.read_implants.v1",
      Scope::ContractsReadCharacter => "esi-contracts.read_character_contracts.v1",
      Scope::ContractsReadCorporation => "esi-contracts.read_corporation_contracts.v1",
      Scope::CorporationsReadBlueprints => "esi-corporations.read_blueprints.v1",
      Scope::CorporationReadContacts => "esi-corporations.read_contacts.v1",
      Scope::CorporationReadContainerLogs => "esi-corporations.read_container_logs.v1",
      Scope::CorporationReadMembership => "esi-corporations.read_corporation_membership.v1",
      Scope::CorporationReadDivisions => "esi-corporations.read_divisions.v1",
      Scope::CorporationReadFacilities => "esi-corporations.read_facilities.v1",
      Scope::CorporationReadFreelanceJobs => "esi-corporations.read_freelance_jobs.v1",
      Scope::CorporationReadFwStats => "esi-corporations.read_fw_stats.v1",
      Scope::CorporationReadMedals => "esi-corporations.read_medals.v1",
      Scope::CorporationReadProjects => "esi-corporations.read_projects.v1",
      Scope::CorporationReadStandings => "esi-corporations.read_standings.v1",
      Scope::CorporationReadStarbases => "esi-corporations.read_starbases.v1",
      Scope::CorporationReadStructures => "esi-corporations.read_structures.v1",
      Scope::CorporationReadTitles => "esi-corporations.read_titles.v1",
      Scope::CorporationReadTrackMembers => "esi-corporations.track_members.v1",
      Scope::FittingsRead => "esi-fittings.read_fittings.v1",
      Scope::FittingsWrite => "esi-fittings.write_fittings.v1",
      Scope::FleetsRead => "esi-fleets.read_fleet.v1",
      Scope::FleetsWrite => "esi-fleets.write_fleet.v1",
      Scope::IndustryReadCharacterJobs => "esi-industry.read_character_jobs.v1",
      Scope::IndustryReadCharacterMining => "esi-industry.read_character_mining.v1",
      Scope::IndustryReadCorporationJobs => "esi-industry.read_corporation_jobs.v1",
      Scope::IndustryReadCorporationMining => "esi-industry.read_corporation_mining.v1",
      Scope::KillmailsReadCorporation => "esi-killmails.read_corporation_killmails.v1",
      Scope::KillmailsRead => "esi-killmails.read_killmails.v1",
      Scope::LocationRead => "esi-location.read_location.v1",
      Scope::LocationReadOnline => "esi-location.read_online.v1",
      Scope::LocationReadShipType => "esi-location.read_ship_type.v1",
      Scope::MailOrganize => "esi-mail.organize_mail.v1",
      Scope::MailRead => "esi-mail.read_mail.v1",
      Scope::MailSend => "esi-mail.send_mail.v1",
      Scope::MarketsReadCharacterOrders => "esi-markets.read_character_orders.v1",
      Scope::MarketsReadCorporationOrders => "esi-markets.read_corporation_orders.v1",
      Scope::MarketsStructureMarkets => "esi-markets.read_structure_markets.v1",
      Scope::PlanetsManage => "esi-planets.manage_planets.v1",
      Scope::PlanetsReadCustomsOffices => "esi-planets.read_customs_offices.v1",
      Scope::SearchStructures => "esi-search.search_structures.v1",
      Scope::SkillsReadQueue => "esi-skills.read_skillqueue.v1",
      Scope::SkillsRead => "esi-skills.read_skills.v1",
      Scope::UIOpenWindow => "esi-ui.open_window.v1",
      Scope::UIWriteWaypoint => "esi-ui.write_waypoint.v1",
      Scope::UniverseReadStructures => "esi-universe.read_structures.v1",
      Scope::WalletReadCharacter => "esi-wallet.read_character_wallet.v1",
      Scope::WalletReadCorporation => "esi-wallet.read_corporation_wallets.v1",
      Scope::WalletReadCorporationWallets => "esi-wallet.read_corporation_wallets.v1",
    }
  }

  pub fn to_string(&self) -> String {
    self.as_str().to_string()
  }

  pub fn all() -> Vec<String> {
    vec![
      Scope::PublicData.to_string(),
      Scope::AllianceReadContacts.to_string(),
      Scope::AssetsRead.to_string(),
      Scope::AssetsReadCorporation.to_string(),
      Scope::CalendarReadEvents.to_string(),
      Scope::CalendarRespondEvents.to_string(),
      Scope::CharacterReadAgentsResearch.to_string(),
      Scope::CharacterReadBlueprints.to_string(),
      Scope::CharacterReadChatChannels.to_string(),
      Scope::CharacterReadContacts.to_string(),
      Scope::CharacterReadCorporationRoles.to_string(),
      Scope::CharacterReadFatigue.to_string(),
      Scope::CharacterReadFreelanceJobs.to_string(),
      Scope::CharacterReadFwStats.to_string(),
      Scope::CharacterReadLoyalty.to_string(),
      Scope::CharacterReadMedals.to_string(),
      Scope::CharacterReadNotifications.to_string(),
      Scope::CharacterReadStandings.to_string(),
      Scope::CharacterReadTitles.to_string(),
      Scope::CharacterWriteContacts.to_string(),
      Scope::ClonesRead.to_string(),
      Scope::ClonesReadImplants.to_string(),
      Scope::ContractsReadCharacter.to_string(),
      Scope::ContractsReadCorporation.to_string(),
      Scope::CorporationsReadBlueprints.to_string(),
      Scope::CorporationReadContacts.to_string(),
      Scope::CorporationReadContainerLogs.to_string(),
      Scope::CorporationReadMembership.to_string(),
      Scope::CorporationReadDivisions.to_string(),
      Scope::CorporationReadFacilities.to_string(),
      Scope::CorporationReadFreelanceJobs.to_string(),
      Scope::CorporationReadFwStats.to_string(),
      Scope::CorporationReadMedals.to_string(),
      Scope::CorporationReadProjects.to_string(),
      Scope::CorporationReadStandings.to_string(),
      Scope::CorporationReadStarbases.to_string(),
      Scope::CorporationReadStructures.to_string(),
      Scope::CorporationReadTitles.to_string(),
      Scope::CorporationReadTrackMembers.to_string(),
      Scope::FittingsRead.to_string(),
      Scope::FittingsWrite.to_string(),
      Scope::FleetsRead.to_string(),
      Scope::FleetsWrite.to_string(),
      Scope::IndustryReadCharacterJobs.to_string(),
      Scope::IndustryReadCharacterMining.to_string(),
      Scope::IndustryReadCorporationJobs.to_string(),
      Scope::IndustryReadCorporationMining.to_string(),
      Scope::KillmailsReadCorporation.to_string(),
      Scope::KillmailsRead.to_string(),
      Scope::LocationRead.to_string(),
      Scope::LocationReadOnline.to_string(),
      Scope::LocationReadShipType.to_string(),
      Scope::MailOrganize.to_string(),
      Scope::MailRead.to_string(),
      Scope::MailSend.to_string(),
      Scope::MarketsReadCharacterOrders.to_string(),
      Scope::MarketsReadCorporationOrders.to_string(),
      Scope::MarketsStructureMarkets.to_string(),
      Scope::PlanetsManage.to_string(),
      Scope::PlanetsReadCustomsOffices.to_string(),
      Scope::SearchStructures.to_string(),
      Scope::SkillsReadQueue.to_string(),
      Scope::SkillsRead.to_string(),
      Scope::UIOpenWindow.to_string(),
      Scope::UIWriteWaypoint.to_string(),
      Scope::UniverseReadStructures.to_string(),
      Scope::WalletReadCharacter.to_string(),
      Scope::WalletReadCorporation.to_string(),
      Scope::WalletReadCorporationWallets.to_string(),
    ]
  }
}
