Skip to content

Commit

Permalink
changed keywords to string array
Browse files Browse the repository at this point in the history
  • Loading branch information
nlsui committed Apr 21, 2021
1 parent d9e416b commit ecf23a2
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 17 deletions.
2 changes: 1 addition & 1 deletion cardSchema.json

Large diffs are not rendered by default.

27 changes: 13 additions & 14 deletions cardobject/keyword.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package cardobject

import (
"errors"
"strings"
"strconv"

"github.com/DecentralCardGame/cardobject/jsonschema"
)

const maxKeywordLength int = 10000
const minKeywordLength int = 0

//Anthem Keyword
const Anthem = "ANTHEM"

Expand Down Expand Up @@ -49,9 +52,6 @@ const Repair = "REPAIR"
//Tribute Keyword
const Tribute = "TRIBUTE"

var possibleKeywords []string = []string{
Anthem, Arm, Arrival, Battlecry, Harm, Kill, OnConstruction, OnDeath, OnSpawn, Pay, Periodic, Produce, Repair, Tribute}

type Keywords []Keyword

func (k Keywords) Validate() error {
Expand Down Expand Up @@ -80,19 +80,18 @@ func (k Keywords) ItemName() string {
type Keyword jsonschema.BasicString

func (k Keyword) Validate() error {
return k.ValidateEnum()
return k.ValidateString()
}

func (k Keyword) ValidateEnum() error {
values := k.EnumValues()
for _, v := range values {
if v == string(k) {
return nil
}
func (k Keyword) ValidateString() error {
minLength, maxLength := k.MinMaxLength()
length := len(string(k))
if length < minLength || length > maxLength {
return errors.New("FlavourText must be between " + strconv.Itoa(minLength) + " and " + strconv.Itoa(maxLength) + " characters long")
}
return errors.New("Keyword must be one of: " + strings.Join(k.EnumValues(), ","))
return nil
}

func (k Keyword) EnumValues() []string {
return possibleKeywords
func (k Keyword) MinMaxLength() (int, int) {
return minKeywordLength, maxKeywordLength
}
2 changes: 1 addition & 1 deletion cardobject/testJsons/entityTest1.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"Entity":{"CardName":"Name","Tags":["TECHNOCRAT"],"FlavourText":"asdf","Class":{"Technology":false,"Nature":false,"Mysticism":false,"Culture":true},"CastingCost":15,"RulesText": "This could be your RulesText","Abilities":[{"ActivatedAbility":{"path":["children","Entity","children","Abilities","children","Ability","children"],"AbilityCost":{"RessourceCost":{"RessourceCostType":{"Nature":true},"CostAmount":2}}}}],"Health":0,"Attack":0}}
{"Entity":{"CardName":"Name","Tags":["TECHNOCRAT"],"FlavourText":"asdf","Class":{"Technology":false,"Nature":false,"Mysticism":false,"Culture":true},"CastingCost":15,"RulesText": "This could be your RulesText","Abilities":[{"ActivatedAbility":{"path":["children","Entity","children","Abilities","children","Ability","children"],"AbilityCost":{"RessourceCost":{"RessourceCostType":{"Nature":true},"CostAmount":2}}}}],"Health":0,"Attack":0,"Keywords":["this is some random:{\"more random\"}","look another one"]}}
2 changes: 1 addition & 1 deletion keywordedSchema.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"Card":{"$ref":"#/definitions/card"},"definitions":{"Attack":{"type":"int","name":"Attack","max":32},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"Health":{"type":"int","name":"Health","max":32},"Keyword":{"type":"enum","name":"Keyword","enum":["ANTHEM","ARM","ARRIVAL","BATTLECRY","HARM","KILL","ONCONSTRUCTION","ONDEATH","ONSPAWN","PAY","PERIODIC","PRODUCE","REPAIR","TRIBUTE"]},"Keywords":{"type":"array","name":"Keywords","description":"Add some Keywords","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"max":3,"min":1},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"RulesText":{"type":"string","name":"Rules Text","max":1000},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"Technology":{"type":"bool","name":"Technology"},"abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/ability"}},"max":3},"ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"Arrival":{"$ref":"#/definitions/arrival"},"Battlecry":{"$ref":"#/definitions/battlecry"},"OnConstruction":{"$ref":"#/definitions/onConstruction"},"OnDeath":{"$ref":"#/definitions/onDeath"},"OnSpawn":{"$ref":"#/definitions/onSpawn"},"Pay":{"$ref":"#/definitions/pay"},"Periodic":{"$ref":"#/definitions/periodic"},"Tribute":{"$ref":"#/definitions/tribute"}}},"action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText"},"anthem":{"type":"struct","name":"Anthem","description":"Build a Anthem","children":{"Tag":{"$ref":"#/definitions/Tag"}},"required":["Tag"],"interactionText":"Anthem §Tag."},"arm":{"type":"struct","name":"Arm","description":"Build a Arm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Arm §Amount."},"arrival":{"type":"struct","name":"Arrival","description":"Build a Arrival","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another entity spawns activate: §Effects."},"battlecry":{"type":"struct","name":"Battlecry","description":"Build a Battlecry","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each combat activate: §Effects."},"card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/action"},"Entity":{"$ref":"#/definitions/entity"},"Place":{"$ref":"#/definitions/place"},"Headquarter":{"$ref":"#/definitions/headquarter"}}},"effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"Anthem":{"$ref":"#/definitions/anthem"},"Arm":{"$ref":"#/definitions/arm"},"Harm":{"$ref":"#/definitions/harm"},"Kill":{"$ref":"#/definitions/kill"},"Produce":{"$ref":"#/definitions/produce"},"Repair":{"$ref":"#/definitions/repair"}}},"effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/effect"}},"max":3},"entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText"},"harm":{"type":"struct","name":"Harm","description":"Build a Harm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Harm §Amount."},"headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags §Keywords §RulesText"},"kill":{"type":"struct","name":"Kill","description":"Build a Kill","children":{},"interactionText":"Kill an entity."},"onConstruction":{"type":"struct","name":"On Construction","description":"Build a On Construction","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another places spawns activate: §Effects."},"onDeath":{"type":"struct","name":"On Death","description":"Build a On Death","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this dies activate: §Effects."},"onSpawn":{"type":"struct","name":"On Spawn","description":"Build a On Spawn","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this spawns activate: §Effects."},"pay":{"type":"struct","name":"Pay","description":"Build a Pay","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"},"Effects":{"$ref":"#/definitions/effects"}},"required":["ManaAmount","Effects"],"interactionText":"Pay §ManaAmount to activate: §Effects."},"periodic":{"type":"struct","name":"Periodic","description":"Build a Periodic","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each tick activate: §Effects."},"place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText"},"produce":{"type":"struct","name":"Produce","description":"Build a Produce","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["ManaAmount"],"interactionText":"Produce §ManaAmount mana."},"repair":{"type":"struct","name":"Repair","description":"Build a Repair","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Repair §Amount."},"tribute":{"type":"struct","name":"Tribute","description":"Build a Tribute","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"Sacrifice an entity to activate: §Effects."}}}
{"Card":{"$ref":"#/definitions/card"},"definitions":{"Attack":{"type":"int","name":"Attack","max":32},"CardName":{"type":"string","name":"Card Name","max":32,"min":1},"CastingCost":{"type":"int","name":"Casting Cost","max":32},"Class":{"type":"struct","name":"Class","description":"Build a Class","children":{"Nature":{"$ref":"#/definitions/Nature"},"Mysticism":{"$ref":"#/definitions/Mysticism"},"Technology":{"$ref":"#/definitions/Technology"},"Culture":{"$ref":"#/definitions/Culture"}},"required":["Nature","Mysticism","Technology","Culture"],"interactionText":"§Nature §Mysticism §Technology §Culture"},"Culture":{"type":"bool","name":"Culture"},"Delay":{"type":"int","name":"Delay","max":32},"FlavourText":{"type":"string","name":"Flavour Text","max":1000,"min":1},"Health":{"type":"int","name":"Health","max":32},"Keyword":{"type":"string","name":"Keyword","max":10000},"Keywords":{"type":"array","name":"Keywords","description":"Add some Keywords","children":{"Keyword":{"$ref":"#/definitions/Keyword"}},"max":3,"min":1},"Mysticism":{"type":"bool","name":"Mysticism"},"Nature":{"type":"bool","name":"Nature"},"RulesText":{"type":"string","name":"Rules Text","max":1000},"SimpleIntValue":{"type":"int","name":"Simple Int Value","max":32},"Tag":{"type":"enum","name":"Tag","enum":["ANIMAL","BOT","DWARF","ENGINEER","EQUIPMENT","FARM","FIRE","HUMAN","KNIGHT","MAGIC","MILITANT","PRIMITIVE","RANGE","SPIRITUAL","TACTIC","TECHNOCRAT"]},"Tags":{"type":"array","name":"Tags","description":"Add some Tags","children":{"Tag":{"$ref":"#/definitions/Tag"}},"max":3,"min":1},"Technology":{"type":"bool","name":"Technology"},"abilities":{"type":"array","name":"Abilities","description":"Add some Abilities","children":{"Ability":{"$ref":"#/definitions/ability"}},"max":3},"ability":{"type":"interface","name":"Ability","description":"Choose a Ability","children":{"Arrival":{"$ref":"#/definitions/arrival"},"Battlecry":{"$ref":"#/definitions/battlecry"},"OnConstruction":{"$ref":"#/definitions/onConstruction"},"OnDeath":{"$ref":"#/definitions/onDeath"},"OnSpawn":{"$ref":"#/definitions/onSpawn"},"Pay":{"$ref":"#/definitions/pay"},"Periodic":{"$ref":"#/definitions/periodic"},"Tribute":{"$ref":"#/definitions/tribute"}}},"action":{"type":"struct","name":"Action","description":"Build a Action","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Effects":{"$ref":"#/definitions/effects"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Effects","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Effects §FlavourText §Tags §Keywords §RulesText"},"anthem":{"type":"struct","name":"Anthem","description":"Build a Anthem","children":{"Tag":{"$ref":"#/definitions/Tag"}},"required":["Tag"],"interactionText":"Anthem §Tag."},"arm":{"type":"struct","name":"Arm","description":"Build a Arm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Arm §Amount."},"arrival":{"type":"struct","name":"Arrival","description":"Build a Arrival","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another entity spawns activate: §Effects."},"battlecry":{"type":"struct","name":"Battlecry","description":"Build a Battlecry","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each combat activate: §Effects."},"card":{"type":"interface","name":"Card","description":"Choose a Card","children":{"Action":{"$ref":"#/definitions/action"},"Entity":{"$ref":"#/definitions/entity"},"Place":{"$ref":"#/definitions/place"},"Headquarter":{"$ref":"#/definitions/headquarter"}}},"effect":{"type":"interface","name":"Effect","description":"Choose a Effect","children":{"Anthem":{"$ref":"#/definitions/anthem"},"Arm":{"$ref":"#/definitions/arm"},"Harm":{"$ref":"#/definitions/harm"},"Kill":{"$ref":"#/definitions/kill"},"Produce":{"$ref":"#/definitions/produce"},"Repair":{"$ref":"#/definitions/repair"}}},"effects":{"type":"array","name":"Effects","description":"Add some Effects","children":{"Effect":{"$ref":"#/definitions/effect"}},"max":3},"entity":{"type":"struct","name":"Entity","description":"Build a Entity","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Attack":{"$ref":"#/definitions/Attack"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Attack","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Attack §Health §FlavourText §Tags §Keywords §RulesText"},"harm":{"type":"struct","name":"Harm","description":"Build a Harm","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Harm §Amount."},"headquarter":{"type":"struct","name":"Headquarter","description":"Build a Headquarter","children":{"CardName":{"$ref":"#/definitions/CardName"},"Class":{"$ref":"#/definitions/Class"},"Delay":{"$ref":"#/definitions/Delay"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","Class","Delay","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §Class §Delay §Abilities §Health §Growth §StartingHandSize §Wisdom §FlavourText §Tags §Keywords §RulesText"},"kill":{"type":"struct","name":"Kill","description":"Build a Kill","children":{},"interactionText":"Kill an entity."},"onConstruction":{"type":"struct","name":"On Construction","description":"Build a On Construction","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When another places spawns activate: §Effects."},"onDeath":{"type":"struct","name":"On Death","description":"Build a On Death","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this dies activate: §Effects."},"onSpawn":{"type":"struct","name":"On Spawn","description":"Build a On Spawn","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"When this spawns activate: §Effects."},"pay":{"type":"struct","name":"Pay","description":"Build a Pay","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"},"Effects":{"$ref":"#/definitions/effects"}},"required":["ManaAmount","Effects"],"interactionText":"Pay §ManaAmount to activate: §Effects."},"periodic":{"type":"struct","name":"Periodic","description":"Build a Periodic","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"At the beginning of each tick activate: §Effects."},"place":{"type":"struct","name":"Place","description":"Build a Place","children":{"CardName":{"$ref":"#/definitions/CardName"},"CastingCost":{"$ref":"#/definitions/CastingCost"},"Class":{"$ref":"#/definitions/Class"},"Abilities":{"$ref":"#/definitions/abilities"},"Health":{"$ref":"#/definitions/Health"},"FlavourText":{"$ref":"#/definitions/FlavourText"},"Tags":{"$ref":"#/definitions/Tags"},"Keywords":{"$ref":"#/definitions/Keywords"},"RulesText":{"$ref":"#/definitions/RulesText"}},"required":["CardName","CastingCost","Class","Abilities","Health","FlavourText","Tags","Keywords","RulesText"],"interactionText":"§CardName §CastingCost §Class §Abilities §Health §FlavourText §Tags §Keywords §RulesText"},"produce":{"type":"struct","name":"Produce","description":"Build a Produce","children":{"ManaAmount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["ManaAmount"],"interactionText":"Produce §ManaAmount mana."},"repair":{"type":"struct","name":"Repair","description":"Build a Repair","children":{"Amount":{"$ref":"#/definitions/SimpleIntValue"}},"required":["Amount"],"interactionText":"Repair §Amount."},"tribute":{"type":"struct","name":"Tribute","description":"Build a Tribute","children":{"Effects":{"$ref":"#/definitions/effects"}},"required":["Effects"],"interactionText":"Sacrifice an entity to activate: §Effects."}}}

0 comments on commit ecf23a2

Please sign in to comment.