Files
autobrew/ingredient/ingredient.go
2026-01-06 15:02:16 +01:00

159 lines
4.1 KiB
Go

package ingredient
import (
"autobrew/utils"
"fmt"
)
type IngredientType int
const (
Base IngredientType = iota
TopShelf
BottomShelf
)
type Ingredient struct {
string
IngredientType
}
var (
// Base
Water Ingredient = Ingredient{"Water", Base}
Wine Ingredient = Ingredient{"Wine", Base}
Oil Ingredient = Ingredient{"Oil", Base}
Spirits Ingredient = Ingredient{"Spirits", Base}
// Top Shelf
Belladonna Ingredient = Ingredient{"Belladonna", TopShelf}
Chamomile Ingredient = Ingredient{"Chamomile", TopShelf}
Comfrey Ingredient = Ingredient{"Comfrey", TopShelf}
Dandelion Ingredient = Ingredient{"Dandelion", TopShelf}
ElderberryLeaves Ingredient = Ingredient{"Elderberry Leaves", TopShelf}
Eyebright Ingredient = Ingredient{"Eyebright", TopShelf}
Feverfew Ingredient = Ingredient{"Feverfew", TopShelf}
Henbane Ingredient = Ingredient{"Henbane", TopShelf}
HerbParis Ingredient = Ingredient{"Herb Paris", TopShelf}
Marigold Ingredient = Ingredient{"Marigold", TopShelf}
Mint Ingredient = Ingredient{"Mint", TopShelf}
Nettle Ingredient = Ingredient{"Nettle", TopShelf}
Poppy Ingredient = Ingredient{"Poppy", TopShelf}
Sage Ingredient = Ingredient{"Sage", TopShelf}
StJohnsWort Ingredient = Ingredient{"St. John's Wort", TopShelf}
Thistle Ingredient = Ingredient{"Thistle", TopShelf}
Valerian Ingredient = Ingredient{"Valerian", TopShelf}
Wormwood Ingredient = Ingredient{"Wormwood", TopShelf}
// Bottom Shelf
AmanitaMuscaria Ingredient = Ingredient{"Amanita Muscaria", BottomShelf}
BoarsTusk Ingredient = Ingredient{"Boar's Tusk", BottomShelf}
Cobweb Ingredient = Ingredient{"Cobweb", BottomShelf}
Charcoal Ingredient = Ingredient{"Charcoal", BottomShelf}
Ginger Ingredient = Ingredient{"Ginger", BottomShelf}
LeachedCoal Ingredient = Ingredient{"Leached Coal", BottomShelf}
Saltpetre Ingredient = Ingredient{"Saltpetre", BottomShelf}
Sulphur Ingredient = Ingredient{"Sulphur", BottomShelf}
MandrakeRoot Ingredient = Ingredient{"Mandrake Root", BottomShelf}
FreshwaterPearl Ingredient = Ingredient{"Freshwater Pearl", BottomShelf}
)
func IngredientFromString(s string) (Ingredient, error) {
s = utils.Strip(s)
switch s {
case "Water":
return Water, nil
case "Wine":
return Wine, nil
case "Oil":
return Oil, nil
case "Spirits":
return Spirits, nil
case "Belladonna":
return Belladonna, nil
case "Chamomile":
return Chamomile, nil
case "Comfrey":
return Comfrey, nil
case "Dandelion":
return Dandelion, nil
case "ElderberryLeaves":
return ElderberryLeaves, nil
case "Eyebright":
return Eyebright, nil
case "Feverfew":
return Feverfew, nil
case "Henbane":
return Henbane, nil
case "HerbParis":
return HerbParis, nil
case "Marigold":
return Marigold, nil
case "Mint":
return Mint, nil
case "Nettle":
return Nettle, nil
case "Poppy":
return Poppy, nil
case "Sage":
return Sage, nil
case "StJohnsWort":
return StJohnsWort, nil
case "Thistle":
return Thistle, nil
case "Valerian":
return Valerian, nil
case "Wormwood":
return Wormwood, nil
case "AmanitaMuscaria":
return AmanitaMuscaria, nil
case "BoarsTusk":
return BoarsTusk, nil
case "Cobweb":
return Cobweb, nil
case "Charcoal":
return Charcoal, nil
case "Ginger":
return Ginger, nil
case "LeachedCoal":
return LeachedCoal, nil
case "Saltpetre":
return Saltpetre, nil
case "Sulphur":
return Sulphur, nil
case "MandrakeRoot":
return MandrakeRoot, nil
case "FreshwaterPearl":
return FreshwaterPearl, nil
default:
return Water, fmt.Errorf("Invalid Ingredient: %s", s)
}
}
func (a *Ingredient) UnmarshalYAML(unmarshal func(any) error) error {
var s string
err := unmarshal(&s)
if err != nil {
return err
}
b, err := IngredientFromString(s)
*a = b
return nil
}
func (i Ingredient) Name() string {
return i.string
}
func (i Ingredient) IsBase() bool {
return i.IngredientType == Base
}
func (i Ingredient) BottomShelf() bool {
return i.IngredientType == BottomShelf
}