Files
akvorado/common/schema/generic.go

65 lines
1.7 KiB
Go

// SPDX-FileCopyrightText: 2023 Free Mobile
// SPDX-License-Identifier: AGPL-3.0-only
package schema
import "strings"
// LookupColumnByName can lookup a column by its name.
func (schema *Schema) LookupColumnByName(name string) (*Column, bool) {
key, ok := columnNameMap.LoadKey(name)
if !ok {
return &Column{}, false
}
return schema.LookupColumnByKey(key)
}
// LookupColumnByKey can lookup a column by its key.
func (schema *Schema) LookupColumnByKey(key ColumnKey) (*Column, bool) {
column := schema.columnIndex[key]
if column == nil {
return &Column{}, false
}
return column, true
}
// ReverseColumnDirection reverts the direction of a provided column name.
func (schema *Schema) ReverseColumnDirection(key ColumnKey) ColumnKey {
var candidateName string
name := key.String()
if strings.HasPrefix(name, "Src") {
candidateName = "Dst" + name[3:]
}
if strings.HasPrefix(name, "Dst") {
candidateName = "Src" + name[3:]
}
if strings.HasPrefix(name, "In") {
candidateName = "Out" + name[2:]
}
if strings.HasPrefix(name, "Out") {
candidateName = "In" + name[3:]
}
if candidateKey, ok := columnNameMap.LoadKey(candidateName); ok {
if column, ok := schema.LookupColumnByKey(candidateKey); ok && !column.Disabled {
return candidateKey
}
}
return key
}
// Columns returns the columns.
func (schema *Schema) Columns() []Column {
columns := make([]Column, 0, len(schema.columns))
for _, column := range schema.columns {
if !column.Disabled {
columns = append(columns, column)
}
}
return columns
}
// IsDisabled tells if a column group is disabled.
func (schema *Schema) IsDisabled(group ColumnGroup) bool {
return schema.disabledGroups.Test(uint(group))
}