func()

in pcap-cli/internal/transformer/translator_worker.go [503:538]


func (w *pcapTranslatorWorker) translate(
	ctx context.Context,
	index int,
	layer gopacket.Layer,
	translations chan<- fmt.Stringer,
	wg *sync.WaitGroup,
) {
	layerType := layer.LayerType()

	defer func(index int, layer gopacket.Layer, wg *sync.WaitGroup) {
		if r := recover(); r != nil {
			translations <- w.translator.translateLayerError(ctx,
				layerType, fmt.Errorf("%v: %s", r, string(debug.Stack())))
		}
		wg.Done()
	}(index, layer, wg)

	if translator, ok := packetLayerTranslatorsMap[layerType]; ok {
		if t := translator(ctx, w, false /* deep */); t == nil {
			translations <- w.translator.translateLayerError(ctx,
				layerType, fmt.Errorf("unavailable@%d", index))
		} else {
			translations <- t
		}
		return
	}

	// translator does not have an implementation to handle this layer type
	switch layer.(type) {
	default:
		if !skippedLayers.Contains(layerType) {
			translations <- w.translator.translateLayerError(ctx,
				layerType, fmt.Errorf("unimplemented@%d", index))
		}
	}
}