| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package protocol
- import (
- "fmt"
- )
- // PatternInfo is an interface for types that represent glob patterns
- type PatternInfo interface {
- GetPattern() string
- GetBasePath() string
- isPattern() // marker method
- }
- // StringPattern implements PatternInfo for string patterns
- type StringPattern struct {
- Pattern string
- }
- func (p StringPattern) GetPattern() string { return p.Pattern }
- func (p StringPattern) GetBasePath() string { return "" }
- func (p StringPattern) isPattern() {}
- // RelativePatternInfo implements PatternInfo for RelativePattern
- type RelativePatternInfo struct {
- RP RelativePattern
- BasePath string
- }
- func (p RelativePatternInfo) GetPattern() string { return string(p.RP.Pattern) }
- func (p RelativePatternInfo) GetBasePath() string { return p.BasePath }
- func (p RelativePatternInfo) isPattern() {}
- // AsPattern converts GlobPattern to a PatternInfo object
- func (g *GlobPattern) AsPattern() (PatternInfo, error) {
- if g.Value == nil {
- return nil, fmt.Errorf("nil pattern")
- }
- switch v := g.Value.(type) {
- case string:
- return StringPattern{Pattern: v}, nil
- case RelativePattern:
- // Handle BaseURI which could be string or DocumentUri
- basePath := ""
- switch baseURI := v.BaseURI.Value.(type) {
- case string:
- basePath = DocumentUri(baseURI).Path()
- case DocumentUri:
- basePath = baseURI.Path()
- default:
- return nil, fmt.Errorf("unknown BaseURI type: %T", v.BaseURI.Value)
- }
- return RelativePatternInfo{RP: v, BasePath: basePath}, nil
- default:
- return nil, fmt.Errorf("unknown pattern type: %T", g.Value)
- }
- }
|