Skip to content

Commit

Permalink
add closers util (#827)
Browse files Browse the repository at this point in the history
  • Loading branch information
paulwe authored Sep 27, 2024
1 parent c7f09c4 commit be21ccf
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 2 deletions.
4 changes: 2 additions & 2 deletions rpc/typed_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ type TypedSignalClient = SignalClient[livekit.NodeID]
type TypedSignalServer = SignalServer[livekit.NodeID]

func NewTypedSignalClient(nodeID livekit.NodeID, bus psrpc.MessageBus, opts ...psrpc.ClientOption) (TypedSignalClient, error) {
return NewSignalClient[livekit.NodeID](bus, append(opts[:len(opts):len(opts)], psrpc.WithClientID(string(nodeID)))...)
return NewSignalClient[livekit.NodeID](bus, psrpc.WithClientOptions(opts...), psrpc.WithClientID(string(nodeID)))
}

func NewTypedSignalServer(nodeID livekit.NodeID, svc SignalServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (TypedSignalServer, error) {
return NewSignalServer[livekit.NodeID](svc, bus, append(opts[:len(opts):len(opts)], psrpc.WithServerID(string(nodeID)))...)
return NewSignalServer[livekit.NodeID](svc, bus, psrpc.WithServerOptions(opts...), psrpc.WithServerID(string(nodeID)))
}

type TypedRoomManagerClient = RoomManagerClient[livekit.NodeID]
Expand Down
14 changes: 14 additions & 0 deletions utils/clock.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
// Copyright 2023 LiveKit, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package utils

import (
Expand Down
62 changes: 62 additions & 0 deletions utils/closers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2023 LiveKit, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package utils

import (
"io"

"go.uber.org/multierr"
)

type Closers []io.Closer

func CombineClosers(cs ...io.Closer) Closers {
return append([]io.Closer{}, cs...)
}

func (s *Closers) Close() error {
var err error
for _, c := range *s {
if c != nil {
err = multierr.Append(err, c.Close())
}
}

*s = (*s)[:0]

return err
}

type CloseFuncType interface {
~func() error | ~func()
}

func CloseFunc[T CloseFuncType](fn T) io.Closer {
return closeFunc[T]{fn}
}

type closeFunc[T CloseFuncType] struct {
fn T
}

func (f closeFunc[T]) Close() error {
switch fn := any(f.fn).(type) {
case func() error:
return fn()
case func():
fn()
}
return nil
}

0 comments on commit be21ccf

Please sign in to comment.