mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-28 20:46:44 +00:00
GODT-1815: Combined/Split mode
This commit is contained in:
41
internal/pool/job.go
Normal file
41
internal/pool/job.go
Normal file
@ -0,0 +1,41 @@
|
||||
package pool
|
||||
|
||||
import "context"
|
||||
|
||||
type job[In, Out any] struct {
|
||||
ctx context.Context
|
||||
req In
|
||||
|
||||
res chan Out
|
||||
err chan error
|
||||
|
||||
done chan struct{}
|
||||
}
|
||||
|
||||
func newJob[In, Out any](ctx context.Context, req In) *job[In, Out] {
|
||||
return &job[In, Out]{
|
||||
ctx: ctx,
|
||||
req: req,
|
||||
res: make(chan Out),
|
||||
err: make(chan error),
|
||||
done: make(chan struct{}),
|
||||
}
|
||||
}
|
||||
|
||||
func (job *job[In, Out]) result() (Out, error) {
|
||||
return <-job.res, <-job.err
|
||||
}
|
||||
|
||||
func (job *job[In, Out]) postSuccess(res Out) {
|
||||
close(job.err)
|
||||
job.res <- res
|
||||
}
|
||||
|
||||
func (job *job[In, Out]) postFailure(err error) {
|
||||
close(job.res)
|
||||
job.err <- err
|
||||
}
|
||||
|
||||
func (job *job[In, Out]) waitDone() {
|
||||
<-job.done
|
||||
}
|
||||
Reference in New Issue
Block a user