RegisterSink registers the given factory for the specific scheme.
(scheme string, factory func(*url.URL) (Sink, error))
| 73 | |
| 74 | // RegisterSink registers the given factory for the specific scheme. |
| 75 | func (sr *sinkRegistry) RegisterSink(scheme string, factory func(*url.URL) (Sink, error)) error { |
| 76 | sr.mu.Lock() |
| 77 | defer sr.mu.Unlock() |
| 78 | |
| 79 | if scheme == "" { |
| 80 | return errors.New("can't register a sink factory for empty string") |
| 81 | } |
| 82 | normalized, err := normalizeScheme(scheme) |
| 83 | if err != nil { |
| 84 | return fmt.Errorf("%q is not a valid scheme: %v", scheme, err) |
| 85 | } |
| 86 | if _, ok := sr.factories[normalized]; ok { |
| 87 | return fmt.Errorf("sink factory already registered for scheme %q", normalized) |
| 88 | } |
| 89 | sr.factories[normalized] = factory |
| 90 | return nil |
| 91 | } |
| 92 | |
| 93 | func (sr *sinkRegistry) newSink(rawURL string) (Sink, error) { |
| 94 | // URL parsing doesn't work well for Windows paths such as `c:\log.txt`, as scheme is set to |