server/settings/challenge.go

58 lines
1.5 KiB
Go
Raw Normal View History

2022-05-01 20:33:59 +00:00
package settings
import (
"encoding/json"
"os"
"strings"
2022-05-01 20:33:59 +00:00
)
// ChallengeFile is the expected name of the file containing the challenge infos.
const ChallengeFile = "challenge.json"
// ChallengeInfo stores common descriptions and informations about the challenge.
type ChallengeInfo struct {
// Title is the displayed name of the challenge.
Title string `json:"title"`
2022-05-02 09:21:34 +00:00
// SubTitle is appended to the title.
SubTitle string `json:"subtitle"`
2022-05-01 20:33:59 +00:00
// Authors is the group name of people making the challenge.
Authors string `json:"authors"`
// VideoLink is the link to explaination videos when the challenge is over.
VideosLink string `json:"videoslink"`
// Description gives an overview of the challenge.
Description string `json:"description"`
// Rules tell the player some help.
Rules string `json:"rules"`
// YourMission is a small introduction to understand the goals.
YourMission string `json:"your_mission"`
}
// ReadChallenge parses the file at the given location.
func ReadChallengeInfo(content string) (*ChallengeInfo, error) {
2022-05-01 20:33:59 +00:00
var s ChallengeInfo
jdec := json.NewDecoder(strings.NewReader(content))
2022-05-01 20:33:59 +00:00
if err := jdec.Decode(&s); err != nil {
return &s, err
2022-05-01 20:33:59 +00:00
}
return &s, nil
2022-05-01 20:33:59 +00:00
}
// SaveChallenge saves challenge at the given location.
func SaveChallengeInfo(path string, s *ChallengeInfo) error {
if fd, err := os.Create(path); err != nil {
return err
} else {
defer fd.Close()
jenc := json.NewEncoder(fd)
if err := jenc.Encode(s); err != nil {
return err
}
return nil
}
}