package s3 import ( "context" "git.eeqj.de/sneak/vaultik/internal/config" "go.uber.org/fx" ) // Module exports S3 functionality as an fx module. // It provides automatic dependency injection for the S3 client, // configuring it based on the application's configuration settings. var Module = fx.Module("s3", fx.Provide( provideClient, ), ) func provideClient(lc fx.Lifecycle, cfg *config.Config) (*Client, error) { ctx := context.Background() client, err := NewClient(ctx, Config{ Endpoint: cfg.S3.Endpoint, Bucket: cfg.S3.Bucket, Prefix: cfg.S3.Prefix, AccessKeyID: cfg.S3.AccessKeyID, SecretAccessKey: cfg.S3.SecretAccessKey, Region: cfg.S3.Region, }) if err != nil { return nil, err } lc.Append(fx.Hook{ OnStop: func(ctx context.Context) error { // S3 client doesn't need explicit cleanup return nil }, }) return client, nil }