sourcegraph/lib/codeintel/lsif/conversion/reader.go
Keegan Carruthers-Smith 11a534cc78
lib: use any instead of interface{} (#35121)
Now that lib is on go1.18 we can use the type alias "any" instead of "interface{}".

Test Plan: cd lib && go test ./...
2022-05-09 14:55:38 +00:00

72 lines
1.3 KiB
Go

package conversion
import (
"context"
"io"
"github.com/sourcegraph/sourcegraph/lib/codeintel/lsif/protocol/reader"
)
type Pair struct {
Element Element
Err error
}
// Read reads the given content as line-separated JSON objects and returns a channel of Pair values
// for each non-empty line.
func Read(ctx context.Context, r io.Reader) <-chan Pair {
elements := make(chan Pair)
go func() {
defer close(elements)
for pair := range reader.Read(ctx, r) {
element := Element{
ID: pair.Element.ID,
Type: pair.Element.Type,
Label: pair.Element.Label,
Payload: translatePayload(pair.Element.Payload),
}
elements <- Pair{Element: element, Err: pair.Err}
}
}()
return elements
}
func translatePayload(payload any) any {
switch v := payload.(type) {
case reader.Edge:
return Edge(v)
case reader.MetaData:
return MetaData(v)
case reader.PackageInformation:
return PackageInformation(v)
case reader.Diagnostic:
return Diagnostic(v)
case reader.Range:
return Range{Range: v}
case reader.ResultSet:
return ResultSet{ResultSet: v}
case reader.Moniker:
return Moniker{Moniker: v}
case []reader.Diagnostic:
diagnostics := make([]Diagnostic, 0, len(v))
for _, v := range v {
diagnostics = append(diagnostics, Diagnostic(v))
}
return diagnostics
}
return payload
}