github.com/hzck/speedroute@v0.0.0-20201115191102-403b7d0e443f/parser/livesplitdataparser.go (about) 1 package parser 2 3 import ( 4 "encoding/json" 5 "encoding/xml" 6 ) 7 8 type segments struct { 9 Segments []struct { 10 Name string `xml:"Name"` 11 BestSegmentTime string `xml:"BestSegmentTime>RealTime"` 12 } `xml:"Segments>Segment"` 13 } 14 15 // LivesplitXMLtoJSON takes an XML input from a LiveSplit .ltt file and creates the route in JSON. 16 func LivesplitXMLtoJSON(data string) (string, error) { 17 var v segments 18 if err := xml.Unmarshal([]byte(data), &v); err != nil { 19 return "", err 20 } 21 var g graph 22 currentNode := "START" 23 g.Rewards = make([]reward, 0) 24 g.Nodes = append(g.Nodes, node{ID: currentNode, Rewards: make([]rewardRef, 0)}) 25 g.StartID = currentNode 26 for _, seg := range v.Segments { 27 g.Nodes = append(g.Nodes, node{ID: seg.Name, Rewards: make([]rewardRef, 0)}) 28 var reqs = make([]rewardRef, 0) 29 var weights = []weight{{Time: seg.BestSegmentTime, Requirements: reqs}} 30 g.Edges = append(g.Edges, edge{From: currentNode, To: seg.Name, Weights: weights}) 31 currentNode = seg.Name 32 } 33 g.EndID = currentNode 34 result, err := json.MarshalIndent(g, "", " ") 35 if err != nil { 36 return "", err 37 } 38 return string(result), nil 39 }