mattermost-community-enterp.../vendor/github.com/splitio/go-split-commons/v7/service/api/helpers.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

80 lines
1.9 KiB
Go

package api
import (
"encoding/csv"
"fmt"
"io"
"net/http"
"github.com/splitio/go-split-commons/v7/dtos"
"github.com/splitio/go-split-commons/v7/service/api/specs"
)
const (
splitSDKVersion = "SplitSDKVersion"
splitSDKMachineName = "SplitSDKMachineName"
splitSDKMachineIP = "SplitSDKMachineIP"
splitSDKClientKey = "SplitSDKClientKey"
unknown = "unknown"
na = "NA"
)
const (
// Unknown format
Unknown = iota
// Csv format
Csv
)
// AddMetadataToHeaders adds metadata in headers
func AddMetadataToHeaders(metadata dtos.Metadata, extraHeaders map[string]string, clientKey *string) map[string]string {
headers := make(map[string]string)
headers[splitSDKVersion] = metadata.SDKVersion
if metadata.MachineName != na && metadata.MachineName != unknown {
headers[splitSDKMachineName] = metadata.MachineName
}
if metadata.MachineIP != na && metadata.MachineIP != unknown {
headers[splitSDKMachineIP] = metadata.MachineIP
}
for header, value := range extraHeaders {
headers[header] = value
}
if clientKey != nil {
headers[splitSDKClientKey] = *clientKey
}
return headers
}
func csvReader(response *http.Response, name string, specVersion string, cn int64, rfd *dtos.RFD) (*dtos.LargeSegment, error) {
switch specVersion {
case specs.LARGESEGMENT_V10:
keys := make([]string, 0, rfd.Data.TotalKeys)
reader := csv.NewReader(response.Body)
for {
record, err := reader.Read()
if err != nil {
if err == io.EOF {
break
}
return nil, fmt.Errorf("error reading csv file. %w", err)
}
if l := len(record); l != 1 {
return nil, fmt.Errorf("unssuported file content. The file has multiple columns")
}
keys = append(keys, record[0])
}
return &dtos.LargeSegment{
Name: name,
Keys: keys,
ChangeNumber: cn,
}, nil
default:
return nil, fmt.Errorf("unsupported csv version %s", specVersion)
}
}