Ctrl K
ComunidadGuías…

coderd/coderdtest/stream.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package coderdtest

import "github.com/coder/coder/v2/codersdk/wsjson"

// SynchronousStream returns a function that assumes the stream is synchronous.
// Meaning each request sent assumes exactly one response will be received.
// The function will block until the response is received or an error occurs.
//
// This should not be used in production code, as it does not handle edge cases.
// The second function `pop` can be used to retrieve the next response from the
// stream without sending a new request. This is useful for dynamic parameters
func SynchronousStream[R any, W any](stream *wsjson.Stream[R, W]) (do func(W) (R, error), pop func() R) {
	rec := stream.Chan()

	return func(req W) (R, error) {
			err := stream.Send(req)
			if err != nil {
				return *new(R), err
			}

			return <-rec, nil
		}, func() R {
			return <-rec
		}
}