Files
protocol/utils/promise.go
Théo Monnom bc6c7ffd71 agents protocol proposal (#595)
* simulate-job

* generated protobuf

* wip

* job_cost

* Update livekit_agent.proto

* generated protobuf

* Update livekit_agent.proto

* generated protobuf

* Update livekit_agent.proto

* Update livekit_agent.proto

* Update livekit_agent.proto

* generated protobuf

* Update livekit_agent.proto

* renamed to pong

Co-authored-by: David Zhao <dz@livekit.io>

* Update livekit_agent.proto

* Update livekit_agent.proto

* generated protobuf

* remove job_cost & ParticipantPermission

* generated protobuf

* Update livekit_agent.proto

* generated protobuf

* wip

* generated protobuf

* generated protobuf

* Update livekit_agent.proto

* generated protobuf

* generated protobuf

* handler namespace

* generated protobuf

---------

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: David Zhao <dz@livekit.io>
Co-authored-by: David Colburn <xero73@gmail.com>
2024-04-03 22:49:52 +02:00

53 lines
830 B
Go

package utils
var closedPromiseChan = make(chan struct{})
func init() {
close(closedPromiseChan)
}
type Promise[T any] struct {
Result T
Err error
done chan struct{}
}
func NewPromise[T any]() *Promise[T] {
return &Promise[T]{
done: make(chan struct{}),
}
}
func GoPromise[T any](f func() (T, error)) *Promise[T] {
p := NewPromise[T]()
go func() { p.Resolve(f()) }()
return p
}
func NewResolvedPromise[T any](result T, err error) *Promise[T] {
return &Promise[T]{
Result: result,
Err: err,
done: closedPromiseChan,
}
}
func (p *Promise[T]) Resolve(result T, err error) {
p.Result = result
p.Err = err
close(p.done)
}
func (p *Promise[T]) Done() <-chan struct{} {
return p.done
}
func (p *Promise[T]) Resolved() bool {
select {
case <-p.done:
return true
default:
return false
}
}