package grpcprocess

import (
	
	

	

	
)

// Server returns a [process.Runner] instance for the given gRPC server and
// network listener.
func ( *grpc.Server,  net.Listener) process.Runner {
	return process.Leaf(
		func( context.Context) error {
			// TODO: consider injecting base context into gRPC’s
			// internal/transport/http2_server.go NewServerTransport.
			return .Serve()
		},
		func( context.Context) error {
			 := make(chan struct{})
			go func() {
				.GracefulStop()
				close()
			}()
			select {
			case <-.Done():
				// Note that Stop interrupts GracefulStop when
				// called concurrently.
				.Stop()
				<-
			case <-:
			}
			return nil
		},
	)
}