func (m Attributes) Range(iterator func(key string, v interface{}) bool) {
	if m == nil {
		m = map[string]interface{}{}
	}
	for k, v := range m {
		if !iterator(k, v) {
			break
		}
	}
}
Range iterates over the Attributes with the function. If the function returns false, the iteration exits.
package dagger
import (
	"github.com/autom8ter/dagger/util"
)
type Edge struct {
	Node `json:"node"`
	From Path `json:"from"`
	To Path `json:"to"`
}
type Path struct {
	XID   string `json:"xid"`
	XType string `json:"xtype"`
}
type Node struct {
	Path       `json:"path"`
	Attributes Attributes `json:"attributes"`
}
type Attributes map[string]interface{}
func (m Attributes) Exists(key string) bool {
	if m == nil {
		m = map[string]interface{}{}
	}
	if val, ok := m[key]; ok && val != nil {
		return true
	}
	return false
}
func (m Attributes) Set(k string, v interface{}) {
	if m == nil {
		m = map[string]interface{}{}
	}
	m[k] = v
}
func (m Attributes) SetAll(data map[string]interface{}) {
	if m == nil {
		m = map[string]interface{}{}
	}
	for k, v := range data {
		m.Set(k, v)
	}
}
func (m Attributes) Get(key string) interface{} {
	if m == nil {
		m = map[string]interface{}{}
	}
	return m[key]
}
func (m Attributes) GetString(key string) string {
	if m == nil {
		m = map[string]interface{}{}
	}
	if !m.Exists(key) {
		return ""
	}
	return util.ParseString(m[key])
}
func (m Attributes) GetBool(key string) bool {
	if m == nil {
		m = map[string]interface{}{}
	}
	if !m.Exists(key) {
		return false
	}
	return util.ParseBool(m[key])
}
func (m Attributes) GetInt(key string) int {
	if m == nil {
		m = map[string]interface{}{}
	}
	if !m.Exists(key) {
		return 0
	}
	return util.ParseInt(m[key])
}
func (m Attributes) Del(key string) {
	if m == nil {
		m = map[string]interface{}{}
	}
	delete(m, key)
}