code: func (m *GenericParser) Parse(data interface{}) (e *Entity, err error) {
  	val := reflect.ValueOf(data)
  	// dereference pointers, and get concrete values from interfaces
  	val = deref(val)
  	// Map and Struct are the only valid Kinds at the top level.
  	switch val.Kind() {
  	case reflect.Map:
  		e, err = m.parseMap(val)
  	case reflect.Struct:
  		e, err = m.parseStruct(val)
  	default:
  		e, err = nil, errors.Errorf("unsupported kind, '%v' in GenericParser: %v", val.Kind(), data)
  	}
  	if err != nil {
  		return e, err
  	}
  	var subj string
  	if !m.SubjectAll {
  		if m.EntitySubjecter != nil {
  			subj, err = m.EntitySubjecter.Subject(e)
  		} else {
  			subj, err = m.Subjecter.Subject(data)
  		}
  		e.Subject = IRI(subj)
  	}
  	return e, err
  }
docs: // Parse of the GenericParser tries to parse any value into a pdk.Entity.