1package testcontainers
2
3import (
4	"context"
5
6	"github.com/pkg/errors"
7)
8
9// GenericContainerRequest represents parameters to a generic container
10type GenericContainerRequest struct {
11	ContainerRequest              // embedded request for provider
12	Started          bool         // whether to auto-start the container
13	ProviderType     ProviderType // which provider to use, Docker if empty
14}
15
16// GenericContainer creates a generic container with parameters
17func GenericContainer(ctx context.Context, req GenericContainerRequest) (Container, error) {
18	provider, err := req.ProviderType.GetProvider()
19	if err != nil {
20		return nil, err
21	}
22
23	c, err := provider.CreateContainer(ctx, req.ContainerRequest)
24	if err != nil {
25		return nil, errors.Wrap(err, "failed to create container")
26	}
27
28	if req.Started {
29		if err := c.Start(ctx); err != nil {
30			return c, errors.Wrap(err, "failed to start container")
31		}
32	}
33
34	return c, nil
35}
36
37// GenericProvider represents an abstraction for container and network providers
38type GenericProvider interface {
39	ContainerProvider
40	NetworkProvider
41}
42