88 lines
3.1 KiB
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))
|
|
}
|