From 7e4b3ae9e1e09957cf380f999b3297fb8f0b9629 Mon Sep 17 00:00:00 2001 From: Pasha Date: Mon, 21 Apr 2025 13:31:13 +0300 Subject: [PATCH] added closer package --- closer/closer.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 closer/closer.go diff --git a/closer/closer.go b/closer/closer.go new file mode 100644 index 0000000..fdfbaf1 --- /dev/null +++ b/closer/closer.go @@ -0,0 +1,37 @@ +package closer + +import ( + "context" +) + +type Closer interface { + Close(ctx context.Context) error +} + +type CloserFunc func(ctx context.Context) error + +func (cf CloserFunc) Close(ctx context.Context) error { + return cf(ctx) +} + +type CloserGroup struct { + closers []Closer +} + +func NewCloserGroup() *CloserGroup { + return &CloserGroup{} +} + +func (cg *CloserGroup) Add(c Closer) { + cg.closers = append(cg.closers, c) +} + +func (cg *CloserGroup) Call(ctx context.Context) error { + var closeErr error + for i := len(cg.closers) - 1; i >= 0; i-- { + if err := cg.closers[i].Close(ctx); err != nil && closeErr == nil { + closeErr = err + } + } + return closeErr +}