func()

in tools/gcpviz/main.go [912:975]


func (v *GcpViz) loadStyleMap(fileName string, override map[string]string) error {
	yamlFile, err := ioutil.ReadFile(fileName)
	if err != nil {
		return err
	}
	err = yaml.Unmarshal(yamlFile, &Style)
	if err != nil {
		return err
	}

	if override != nil && len(override) > 0 {
		jsn, err := json.Marshal(Style)
		if err != nil {
			return errors.Wrap(err, "marshaling to json")
		}

		var jsnStr = string(jsn)
		for path, newValue := range override {
			jsnStr, err = sjson.Set(jsnStr, path, newValue)
			if err != nil {
				return err
			}
		}

		var temp map[string]interface{}
		err = json.Unmarshal([]byte(jsnStr), &temp)
		if err != nil {
			return errors.Wrap(err, "marshaling to interface")
		}

		updatedYaml, err := yaml.Marshal(temp)
		if err != nil {
			return err
		}

		err = yaml.Unmarshal(updatedYaml, &Style)
		if err != nil {
			return err
		}
	}

	Nodes = make(map[string]*template.Template, len(Style.Nodes))
	for k, v := range Style.Nodes {
		s, err := template.New(k).Funcs(templateFuncMap).Parse(v)
		if err != nil {
			return errors.Wrap(err, fmt.Sprintf("error parsing node style for resource type %s", k))
		}
		Nodes[k] = s
	}

	Edges = make(map[string]map[string]*template.Template, len(Style.Edges))
	for k, v := range Style.Edges {
		Edges[k] = make(map[string]*template.Template, len(v))
		for kk, vv := range v {
			s, err := template.New(k).Funcs(templateFuncMap).Parse(vv)
			if err != nil {
				return errors.Wrap(err, fmt.Sprintf("error parsing edge style for resource type %s", k))
			}
			Edges[k][kk] = s
		}
	}

	return nil
}