package domain type Unit struct { Attack int BuildTime float64 Carry int Defense int DefenseArcher int DefenseCavalry int Pop int Speed float64 } type UnitInfo struct { spear Unit sword Unit axe Unit archer Unit spy Unit light Unit marcher Unit heavy Unit ram Unit catapult Unit knight Unit snob Unit militia Unit } type NullUnitInfo = NullValue[UnitInfo] func NewUnitInfo( spear Unit, sword Unit, axe Unit, archer Unit, spy Unit, light Unit, marcher Unit, heavy Unit, ram Unit, catapult Unit, knight Unit, snob Unit, militia Unit, ) (UnitInfo, error) { return UnitInfo{ spear: spear, sword: sword, axe: axe, archer: archer, spy: spy, light: light, marcher: marcher, heavy: heavy, ram: ram, catapult: catapult, knight: knight, snob: snob, militia: militia, }, nil } func (u UnitInfo) Spear() Unit { return u.spear } func (u UnitInfo) Sword() Unit { return u.sword } func (u UnitInfo) Axe() Unit { return u.axe } func (u UnitInfo) Archer() Unit { return u.archer } func (u UnitInfo) Spy() Unit { return u.spy } func (u UnitInfo) Light() Unit { return u.light } func (u UnitInfo) Marcher() Unit { return u.marcher } func (u UnitInfo) Heavy() Unit { return u.heavy } func (u UnitInfo) Ram() Unit { return u.ram } func (u UnitInfo) Catapult() Unit { return u.catapult } func (u UnitInfo) Knight() Unit { return u.knight } func (u UnitInfo) Snob() Unit { return u.snob } func (u UnitInfo) Militia() Unit { return u.militia }