Files
rudder-go-sdk/client.go
T

81 lines
1.8 KiB
Go
Raw Permalink Normal View History

2026-08-12 14:04:30 +03:00
package rudder
import (
"net/http"
"time"
)
const DefaultBaseURL = "https://api.rudder.build"
type Config struct {
AdminKey string
2026-08-12 14:04:30 +03:00
BaseURL string
Timeout time.Duration
HTTPClient *http.Client
}
type Client struct {
Players *PlayersService
Leaderboards *LeaderboardsService
Wallet *WalletService
Inventory *InventoryService
Quests *QuestsService
Storage *StorageService
Metrics *MetricsService
transport *transport
2026-08-12 14:04:30 +03:00
}
func New(config Config) (*Client, error) {
if config.AdminKey == "" {
return nil, &APIError{Code: ErrorCodeInvalidOptions, Message: "AdminKey is required"}
2026-08-12 14:04:30 +03:00
}
if config.BaseURL == "" {
config.BaseURL = DefaultBaseURL
}
if config.Timeout == 0 {
config.Timeout = 30 * time.Second
}
if config.HTTPClient == nil {
config.HTTPClient = &http.Client{Timeout: config.Timeout}
}
transport := &transport{
baseURL: config.BaseURL,
apiKey: config.AdminKey,
2026-08-12 14:04:30 +03:00
httpClient: config.HTTPClient,
}
return &Client{
Players: &PlayersService{transport: transport},
Leaderboards: &LeaderboardsService{transport: transport},
Wallet: &WalletService{transport: transport},
Inventory: &InventoryService{transport: transport},
Quests: &QuestsService{transport: transport},
Storage: &StorageService{transport: transport},
Metrics: &MetricsService{transport: transport},
transport: transport,
2026-08-12 14:04:30 +03:00
}, nil
}
func (c *Client) Player(playerID string) *PlayerHandle {
return &PlayerHandle{
playerID: playerID,
transport: c.transport,
players: c.Players,
wallet: c.Wallet,
inventory: c.Inventory,
quests: c.Quests,
}
}
func (c *Client) Leaderboard(slug string) *LeaderboardHandle {
return &LeaderboardHandle{
slug: slug,
transport: c.transport,
leaderboards: c.Leaderboards,
}
}