mirror of
https://github.com/sstent/garminsync-go.git
synced 2025-12-06 08:01:52 +00:00
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package parser
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
)
|
|
|
|
// NewParser creates a parser based on file extension or content
|
|
func NewParser(filename string) (Parser, error) {
|
|
// First try by extension
|
|
ext := filepath.Ext(filename)
|
|
switch ext {
|
|
case ".fit":
|
|
return NewFITParser(), nil
|
|
case ".tcx":
|
|
return NewTCXParser(), nil // To be implemented
|
|
case ".gpx":
|
|
return NewGPXParser(), nil // To be implemented
|
|
}
|
|
|
|
// If extension doesn't match, detect by content
|
|
fileType, err := DetectFileTypeFromFile(filename)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to detect file type: %w", err)
|
|
}
|
|
|
|
switch fileType {
|
|
case FIT:
|
|
return NewFITParser(), nil
|
|
case TCX:
|
|
return NewTCXParser(), nil
|
|
case GPX:
|
|
return NewGPXParser(), nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported file type: %s", fileType)
|
|
}
|
|
}
|
|
|
|
// NewParserFromData creates a parser based on file content
|
|
func NewParserFromData(data []byte) (Parser, error) {
|
|
fileType := DetectFileTypeFromData(data)
|
|
|
|
switch fileType {
|
|
case FIT:
|
|
return NewFITParser(), nil
|
|
case TCX:
|
|
return NewTCXParser(), nil
|
|
case GPX:
|
|
return NewGPXParser(), nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported file type: %s", fileType)
|
|
}
|
|
}
|
|
|
|
// Placeholder implementations (will create these next)
|
|
func NewTCXParser() Parser { return nil }
|
|
func NewGPXParser() Parser { return nil }
|