From e69d46383fd29378f5d1b3a39f92a2a67a85f1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 23 Jan 2022 23:23:36 +0100 Subject: Move enums to own file; add AgeGroup and Weapon enum --- main.go | 43 -------------------- types.go | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 43 deletions(-) create mode 100644 types.go diff --git a/main.go b/main.go index 7729ab7..395f244 100644 --- a/main.go +++ b/main.go @@ -15,49 +15,6 @@ type enguarde interface { enguarde() (string, error) } -type Gender int - -const ( - GenderM = iota - GenderF -) - -func (g Gender) String() string { - switch g { - case GenderM: - return "M" - case GenderF: - return "F" - default: - return fmt.Sprintf("U%d", g) - } -} - -func (g Gender) enguarde() (string, error) { - switch g { - case GenderM: - return "masculin", nil - case GenderF: - return "feminin", nil - default: - return "", fmt.Errorf("unknown gender value '%d'", g) - } -} - -func (g *Gender) UnmarshalCSV(content []byte) error { - c := string(content) - switch c { - case "M": - *g = GenderM - case "F": - *g = GenderF - default: - return fmt.Errorf("unknown gender value '%s'", c) - } - - return nil -} - type participant struct { LastName string `csv:"lastname"` FirstName string `csv:"firstname"` diff --git a/types.go b/types.go new file mode 100644 index 0000000..82fd8e6 --- /dev/null +++ b/types.go @@ -0,0 +1,139 @@ +package main + +import "fmt" + +type Gender int + +const ( + GenderM Gender = iota + GenderF +) + +func (g Gender) String() string { + switch g { + case GenderM: + return "M" + case GenderF: + return "F" + default: + return fmt.Sprintf("U%d", g) + } +} + +func (g Gender) enguarde() (string, error) { + switch g { + case GenderM: + return "masculin", nil + case GenderF: + return "feminin", nil + default: + return "", fmt.Errorf("unknown gender value '%d'", g) + } +} + +func GenderFromString(content string) (Gender, error) { + switch content { + case "M": + return GenderM, nil + case "F": + return GenderF, nil + default: + return 0, fmt.Errorf("unknown gender value '%s'", content) + } +} + +func (g *Gender) UnmarshalCSV(content []byte) error { + if res, err := GenderFromString(string(content)); err == nil { + *g = res + return nil + } else { + return err + } +} + +type AgeGroup int + +const ( + AgeVeteran AgeGroup = iota + AgeSenior +) + +func (a AgeGroup) String() string { + switch a { + case AgeVeteran: + return "V" + case AgeSenior: + return "S" + default: + return fmt.Sprintf("U%d", a) + } +} + +func (a AgeGroup) enguarde() (string, error) { + switch a { + case AgeVeteran: + return "veteran", nil + case AgeSenior: + return "senior", nil + default: + return "", fmt.Errorf("unknown age group value '%d'", a) + } +} + +func AgeGroupFromString(content string) (AgeGroup, error) { + switch content { + case "V": + return AgeVeteran, nil + case "S": + return AgeSenior, nil + default: + return 0, fmt.Errorf("unknown age group value '%s'", content) + } +} + +type Weapon int + +const ( + Epee Weapon = iota + Foil + Sabre +) + +func (w Weapon) String() string { + switch w { + case Epee: + return "D" + case Foil: + return "F" + case Sabre: + return "S" + default: + return fmt.Sprintf("U%d", w) + } +} + +func (w Weapon) enguarde() (string, error) { + switch w { + case Epee: + return "epee", nil + case Foil: + return "fleuret", nil + case Sabre: + return "sabre", nil + default: + return "", fmt.Errorf("unknown weapon value '%d'", w) + } +} + +func WeaponFromString(content string) (Weapon, error) { + switch content { + case "D": + return Epee, nil + case "S": + return Sabre, nil + case "F": + return Foil, nil + default: + return 0, fmt.Errorf("unknown weapon value '%s'", content) + } +} -- cgit v1.2.3