in internal/satellite/tools/generate_plugin_doc.go [270:324]
func parsePluginConfigurationItem(field *ast.Field, pType reflect.Type) (*pluginConfigurationItem, *pluginChildrenFinder) {
if field.Tag == nil {
return nil, nil
}
var fieldName = ""
if field.Names != nil {
for _, n := range field.Names {
fieldName += n.Name
}
} else {
expr, ok := field.Type.(*ast.SelectorExpr)
if !ok {
return nil, nil
}
fieldName = expr.Sel.Name
}
pluginField, find := pType.FieldByName(fieldName)
if !find {
return nil, nil
}
mapStructureValue := pluginField.Tag.Get("mapstructure")
var confName string
var childrenFinder *pluginChildrenFinder
if index := strings.Index(mapStructureValue, ","); index != -1 {
if strings.Contains(mapStructureValue[index+1:], "squash") {
if pluginField.Type.Kind() == reflect.Struct {
return nil, &pluginChildrenFinder{childType: pluginField.Type, squash: true}
}
log.Logger.Warnf("Could not identity plugin field: %v", pluginField)
return nil, nil
}
confName = mapStructureValue[:index]
} else if len(mapStructureValue) > 0 {
confName = mapStructureValue
} else {
confName = fieldName
}
var dataType = pluginField.Type.String()
switch pluginField.Type.Kind() {
case reflect.Struct:
case reflect.Ptr:
if pluginField.Type.Elem().PkgPath() != "" {
childrenFinder = &pluginChildrenFinder{childType: pluginField.Type.Elem()}
}
}
return &pluginConfigurationItem{
name: confName,
dataType: dataType,
description: buildPluginDescription(field),
}, childrenFinder
}