package sync import ( "path" "github.com/BurntSushi/toml" ) // ExerciceHintParams holds EHint definition infomation. type ExerciceHintParams struct { Filename string Content string Cost int64 Title string } // ExerciceDependency holds dependency definitions information. type ExerciceDependency struct { Id int64 Theme string `toml:",omitempty"` } // ExerciceUnlockFile holds parameters related to a locked file. type ExerciceUnlockFile struct { Filename string `toml:",omitempty"` } // ExerciceFlagChoice holds informations about a choice (for MCQ and UCQ). type ExerciceFlagChoice struct { Label string `toml:",omitempty"` Value interface{} `toml:",omitempty"` Justification *ExerciceFlag `toml:",omitempty""` } // ExerciceFlag holds informations about one flag. type ExerciceFlag struct { Id int64 Label string `toml:",omitempty"` Type string `toml:",omitempty"` Raw interface{} Separator string `toml:",omitempty"` Ordered bool `toml:",omitempty"` IgnoreCase bool `toml:",omitempty"` ValidatorRe string `toml:"validator_regexp,omitempty"` Help string `toml:",omitempty"` ChoicesCost int64 `toml:"choices_cost,omitempty"` Choice []ExerciceFlagChoice LockedFile []ExerciceUnlockFile `toml:"unlock_file,omitempty"` NeedFlag []ExerciceDependency `toml:"need_flag,omitempty"` NoShuffle bool } // ExerciceParams contains values parsed from defines.txt. type ExerciceParams struct { Gain int64 Tags []string Hints []ExerciceHintParams `toml:"hint"` Dependencies []ExerciceDependency `toml:"depend"` Flags []ExerciceFlag `toml:"flag"` FlagsMCQ []ExerciceFlag `toml:"flag_mcq"` FlagsUCQ []ExerciceFlag `toml:"flag_ucq"` } // parseExerciceParams reads challenge definitions from defines.txt and extract usefull data to set up the challenge. func parseExerciceParams(i Importer, exPath string) (p ExerciceParams, err error) { var defs string defs, err = getFileContent(i, path.Join(exPath, "challenge.txt")) _, err = toml.Decode(defs, &p) return }