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  }