mirror of
https://github.com/sstent/garminsync-go.git
synced 2026-02-06 22:41:47 +00:00
checkpoint 1
This commit is contained in:
57
internal/parser/factory.go
Normal file
57
internal/parser/factory.go
Normal file
@@ -0,0 +1,57 @@
|
||||
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 }
|
||||
Reference in New Issue
Block a user