1
// Copyright 2023 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
10
// EventWriter is the general interface for all event writers
11
// EventWriterBase is only used as its base interface
12
// A writer implementation could override the default EventWriterBase functions
13
// eg: a writer can override the Run to handle events in its own way with its own goroutine
14
type EventWriter interface {
18
// WriterMode is the mode for creating a new EventWriter, it contains common options for all writers
19
// Its WriterOption field is the specified options for a writer, it should be passed by value but not by pointer
20
type WriterMode struct {
35
// EventWriterProvider is the function for creating a new EventWriter
36
type EventWriterProvider func(writerName string, writerMode WriterMode) EventWriter
38
var eventWriterProviders = map[string]EventWriterProvider{}
40
func RegisterEventWriter(writerType string, p EventWriterProvider) {
41
eventWriterProviders[writerType] = p
44
func HasEventWriter(writerType string) bool {
45
_, ok := eventWriterProviders[writerType]
49
func NewEventWriter(name, writerType string, mode WriterMode) (EventWriter, error) {
50
if p, ok := eventWriterProviders[writerType]; ok {
51
return p(name, mode), nil
53
return nil, fmt.Errorf("unknown event writer type %q for writer %q", writerType, name)