gleam-spacetraders-sdk/src/spacetraders_sdk/models/module_symbol.gleam

88 lines
3.1 KiB
Gleam

import gleam/dynamic/decode.{type Decoder}
import gleam/json.{type Json}
pub type ModuleSymbol {
ModuleMineralProcessorI
ModuleGasProcessorI
ModuleCargoHoldI
ModuleCargoHoldII
ModuleCargoHoldIII
ModuleCrewQuartersI
ModuleEnvoyQuartersI
ModulePassengerCabinI
ModuleMicroRefineryI
ModuleOreRefineryI
ModuleFuelRefineryI
ModuleScienceLabI
ModuleJumpDriveI
ModuleJumpDriveII
ModuleJumpDriveIII
ModuleWarpDriveI
ModuleWarpDriveII
ModuleWarpDriveIII
ModuleShieldGeneratorI
ModuleShieldGeneratorII
}
pub fn parse(value: String) -> Result(ModuleSymbol, Nil) {
case value {
"MODULE_MINERAL_PROCESSOR_I" -> Ok(ModuleMineralProcessorI)
"MODULE_GAS_PROCESSOR_I" -> Ok(ModuleGasProcessorI)
"MODULE_CARGO_HOLD_I" -> Ok(ModuleCargoHoldI)
"MODULE_CARGO_HOLD_II" -> Ok(ModuleCargoHoldII)
"MODULE_CARGO_HOLD_III" -> Ok(ModuleCargoHoldIII)
"MODULE_CREW_QUARTERS_I" -> Ok(ModuleCrewQuartersI)
"MODULE_ENVOY_QUARTERS_I" -> Ok(ModuleEnvoyQuartersI)
"MODULE_PASSENGER_CABIN_I" -> Ok(ModulePassengerCabinI)
"MODULE_MICRO_REFINERY_I" -> Ok(ModuleMicroRefineryI)
"MODULE_ORE_REFINERY_I" -> Ok(ModuleOreRefineryI)
"MODULE_FUEL_REFINERY_I" -> Ok(ModuleFuelRefineryI)
"MODULE_SCIENCE_LAB_I" -> Ok(ModuleScienceLabI)
"MODULE_JUMP_DRIVE_I" -> Ok(ModuleJumpDriveI)
"MODULE_JUMP_DRIVE_II" -> Ok(ModuleJumpDriveII)
"MODULE_JUMP_DRIVE_III" -> Ok(ModuleJumpDriveIII)
"MODULE_WARP_DRIVE_I" -> Ok(ModuleWarpDriveI)
"MODULE_WARP_DRIVE_II" -> Ok(ModuleWarpDriveII)
"MODULE_WARP_DRIVE_III" -> Ok(ModuleWarpDriveIII)
"MODULE_SHIELD_GENERATOR_I" -> Ok(ModuleShieldGeneratorI)
"MODULE_SHIELD_GENERATOR_II" -> Ok(ModuleShieldGeneratorII)
_ -> Error(Nil)
}
}
pub fn decoder() -> Decoder(ModuleSymbol) {
use value <- decode.then(decode.string)
case parse(value) {
Ok(module_symbol) -> decode.success(module_symbol)
Error(Nil) -> decode.failure(ModuleMineralProcessorI, "ModuleSymbol")
}
}
pub fn to_string(module_symbol: ModuleSymbol) -> String {
case module_symbol {
ModuleMineralProcessorI -> "MODULE_MINERAL_PROCESSOR_I"
ModuleGasProcessorI -> "MODULE_GAS_PROCESSOR_I"
ModuleCargoHoldI -> "MODULE_CARGO_HOLD_I"
ModuleCargoHoldII -> "MODULE_CARGO_HOLD_II"
ModuleCargoHoldIII -> "MODULE_CARGO_HOLD_III"
ModuleCrewQuartersI -> "MODULE_CREW_QUARTERS_I"
ModuleEnvoyQuartersI -> "MODULE_ENVOY_QUARTERS_I"
ModulePassengerCabinI -> "MODULE_PASSENGER_CABIN_I"
ModuleMicroRefineryI -> "MODULE_MICRO_REFINERY_I"
ModuleOreRefineryI -> "MODULE_ORE_REFINERY_I"
ModuleFuelRefineryI -> "MODULE_FUEL_REFINERY_I"
ModuleScienceLabI -> "MODULE_SCIENCE_LAB_I"
ModuleJumpDriveI -> "MODULE_JUMP_DRIVE_I"
ModuleJumpDriveII -> "MODULE_JUMP_DRIVE_II"
ModuleJumpDriveIII -> "MODULE_JUMP_DRIVE_III"
ModuleWarpDriveI -> "MODULE_WARP_DRIVE_I"
ModuleWarpDriveII -> "MODULE_WARP_DRIVE_II"
ModuleWarpDriveIII -> "MODULE_WARP_DRIVE_III"
ModuleShieldGeneratorI -> "MODULE_SHIELD_GENERATOR_I"
ModuleShieldGeneratorII -> "MODULE_SHIELD_GENERATOR_II"
}
}
pub fn encode(module_symbol: ModuleSymbol) -> Json {
json.string(to_string(module_symbol))
}