Files
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

65 lines
2.1 KiB
Go

package objectstore
import (
"context"
"fmt"
"github.com/maximhq/bifrost/core/schemas"
)
// StoreType identifies the object storage backend.
type StoreType string
const (
StoreTypeS3 StoreType = "s3"
StoreTypeGCS StoreType = "gcs"
)
// Config holds the configuration for an object store.
type Config struct {
Type StoreType `json:"type"` // "s3" or "gcs"
Bucket schemas.EnvVar `json:"bucket"`
// Common fields (apply to all store types)
Prefix string `json:"prefix,omitempty"` // Key prefix for all stored objects. Default: "bifrost".
Compress bool `json:"compress,omitempty"` // Enables gzip compression for stored objects. Default: false.
// S3 fields (used when Type == "s3")
Region *schemas.EnvVar `json:"region,omitempty"`
Endpoint *schemas.EnvVar `json:"endpoint,omitempty"`
AccessKeyID *schemas.EnvVar `json:"access_key_id,omitempty"`
SecretAccessKey *schemas.EnvVar `json:"secret_access_key,omitempty"`
SessionToken *schemas.EnvVar `json:"session_token,omitempty"`
RoleARN *schemas.EnvVar `json:"role_arn,omitempty"`
ForcePathStyle bool `json:"force_path_style,omitempty"`
// GCS fields (used when Type == "gcs")
Credentials *schemas.EnvVar `json:"credentials,omitempty"` // Deprecated: use credentials_json
CredentialsJSON *schemas.EnvVar `json:"credentials_json,omitempty"` // Service account JSON or path
ProjectID *schemas.EnvVar `json:"project_id,omitempty"` // GCP project ID override
}
// GetPrefix returns the configured prefix or "bifrost" as default.
func (c *Config) GetPrefix() string {
if c.Prefix != "" {
return c.Prefix
}
return "bifrost"
}
// NewObjectStore creates the appropriate ObjectStore implementation based on config type.
func NewObjectStore(ctx context.Context, cfg *Config, logger schemas.Logger) (ObjectStore, error) {
if cfg == nil {
return nil, fmt.Errorf("objectstore: config is required")
}
switch cfg.Type {
case StoreTypeS3:
return NewS3ObjectStore(ctx, cfg, logger)
case StoreTypeGCS:
return NewGCSObjectStore(ctx, cfg, logger)
default:
return nil, fmt.Errorf("objectstore: unsupported type %q", cfg.Type)
}
}