in processors/dissect/field.go [231:273]
func newField(id int, rawKey string, previous delimiter) (field, error) {
if len(rawKey) == 0 {
return newSkipField(id), nil
}
key, dataType, ordinal, length, greedy := extractKeyParts(rawKey)
// rawKey will have | as suffix when data type is missing
if strings.HasSuffix(rawKey, dataTypeIndicator) {
return nil, errMissingDatatype
}
if len(dataType) > 0 {
if _, ok := dataTypeNames[dataType]; !ok {
return nil, errInvalidDatatype
}
}
// Conflicting prefix used.
if strings.HasPrefix(key, appendIndirectPrefix) {
return nil, errMixedPrefixIndirectAppend
}
if strings.HasPrefix(key, indirectAppendPrefix) {
return nil, errMixedPrefixAppendIndirect
}
if strings.HasPrefix(key, skipFieldPrefix) {
return newNamedSkipField(id, key[1:], length), nil
}
if strings.HasPrefix(key, pointerFieldPrefix) {
return newPointerField(id, key[1:], length), nil
}
if strings.HasPrefix(key, appendFieldPrefix) {
return newAppendField(id, key[1:], ordinal, length, greedy, previous), nil
}
if strings.HasPrefix(key, indirectFieldPrefix) {
return newIndirectField(id, key[1:], dataType, length), nil
}
return newNormalField(id, key, dataType, ordinal, length, greedy), nil
}