atomic

package module
v0.0.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 11, 2025 License: GPL-3.0 Imports: 17 Imported by: 1

README

atomic-go

The official Atomic Go client library for interacting with the Atomic API.

Installation

go get github.com/libatomic/atomic-go

Quick Start

package main

import (
    "context"
    "log"
    
    "github.com/libatomic/atomic-go"
)

func main() {
    // Create a client with your access token
    client := atomic.New(
        atomic.WithHost("api.atomic.com"),
        atomic.WithToken("your-access-token"),
    )
    
    // Get a user
    user, err := client.UserGet(context.Background(), &atomic.UserGetInput{
        UserID: atomic.String("user-id"),
    })
    if err != nil {
        log.Fatal(err)
    }
    
    log.Printf("User: %s", user.Email)
}

Authentication

The Atomic API uses OAuth2 for authentication. You can configure authentication in several ways:

Access Token Authentication
client := atomic.New(
    atomic.WithHost("api.atomic.com"),
    atomic.WithToken("your-access-token"),
)
Client Credentials Flow
client := atomic.New(
    atomic.WithHost("api.atomic.com"),
    atomic.WithClientCredentials("client-id", "client-secret", "instance:read", "instance:write"),
)
Custom HTTP Client
customClient := &http.Client{
    Timeout: 30 * time.Second,
}

client := atomic.New(
    atomic.WithHost("api.atomic.com"),
    atomic.WithToken("your-access-token"),
    atomic.WithHTTPClient(customClient),
)

API Endpoints

The atomic-go library provides access to all major Atomic API endpoints:

Users

Manage user accounts and profiles.

// Get a user
user, err := client.UserGet(ctx, &atomic.UserGetInput{
    UserID: atomic.String("user-id"),
})

// Create a user
user, err := client.UserCreate(ctx, &atomic.UserCreateInput{
    Email:    atomic.String("user@example.com"),
    Password: atomic.String("secure-password"),
    Name:     atomic.String("John Doe"),
})

// Update a user
user, err := client.UserUpdate(ctx, &atomic.UserUpdateInput{
    UserID: atomic.String("user-id"),
    Name:   atomic.String("Jane Doe"),
})

// Delete a user
err := client.UserDelete(ctx, &atomic.UserDeleteInput{
    UserID: atomic.String("user-id"),
})

// List users
users, err := client.UserList(ctx, &atomic.UserListInput{
    Limit: atomic.Int(10),
    Offset: atomic.Int(0),
})
Applications

Manage OAuth applications.

// Create an application
app, err := client.ApplicationCreate(ctx, &atomic.ApplicationCreateInput{
    Name:        atomic.String("My App"),
    Description: atomic.String("My application description"),
    RedirectURI: atomic.String("https://myapp.com/callback"),
})

// Get an application
app, err := client.ApplicationGet(ctx, &atomic.ApplicationGetInput{
    ApplicationID: atomic.String("app-id"),
})

// Update an application
app, err := client.ApplicationUpdate(ctx, &atomic.ApplicationUpdateInput{
    ApplicationID: atomic.String("app-id"),
    Name:          atomic.String("Updated App Name"),
})

// Delete an application
err := client.ApplicationDelete(ctx, &atomic.ApplicationDeleteInput{
    ApplicationID: atomic.String("app-id"),
})

// List applications
apps, err := client.ApplicationList(ctx, &atomic.ApplicationListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Access Tokens

Manage OAuth access tokens.

// Create an access token for a user
token, err := client.AccessTokenCreate(ctx, &atomic.AccessTokenCreateInput{
    UserID: atomic.String("user-id"),
    Scopes: []string{"read", "write"},
})

// Create an access token for an application
token, err := client.AccessTokenCreate(ctx, &atomic.AccessTokenCreateInput{
    ApplicationID: atomic.String("app-id"),
    Scopes:        []string{"read", "write"},
})

// Get an access token
token, err := client.AccessTokenGet(ctx, &atomic.AccessTokenGetInput{
    AccessTokenID: atomic.String("token-id"),
})

// Revoke an access token
err := client.AccessTokenRevoke(ctx, &atomic.AccessTokenRevokeInput{
    AccessTokenID: atomic.String("token-id"),
})

// Delete an access token
err := client.AccessTokenDelete(ctx, &atomic.AccessTokenDeleteInput{
    AccessTokenID: atomic.String("token-id"),
})
Articles

Manage content articles.

// Get an article
article, err := client.ArticleGet(ctx, &atomic.ArticleGetInput{
    ArticleID: atomic.String("article-id"),
})

// Create an article
article, err := client.ArticleCreate(ctx, &atomic.ArticleCreateInput{
    Title:   atomic.String("My Article"),
    Content: atomic.String("Article content..."),
    Status:  atomic.String("draft"),
})

// Update an article
article, err := client.ArticleUpdate(ctx, &atomic.ArticleUpdateInput{
    ArticleID: atomic.String("article-id"),
    Title:     atomic.String("Updated Title"),
    Status:    atomic.String("published"),
})

// Delete an article
err := client.ArticleDelete(ctx, &atomic.ArticleDeleteInput{
    ArticleID: atomic.String("article-id"),
})

// List articles
articles, err := client.ArticleList(ctx, &atomic.ArticleListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Assets

Manage media assets.

// Get an asset
asset, err := client.AssetGet(ctx, &atomic.AssetGetInput{
    AssetID: atomic.String("asset-id"),
})

// Create an asset
asset, err := client.AssetCreate(ctx, &atomic.AssetCreateInput{
    Name: atomic.String("image.jpg"),
    Type: atomic.String("image"),
    URL:  atomic.String("https://example.com/image.jpg"),
})

// Update an asset
asset, err := client.AssetUpdate(ctx, &atomic.AssetUpdateInput{
    AssetID: atomic.String("asset-id"),
    Name:    atomic.String("updated-name.jpg"),
})

// Delete an asset
err := client.AssetDelete(ctx, &atomic.AssetDeleteInput{
    AssetID: atomic.String("asset-id"),
})

// List assets
assets, err := client.AssetList(ctx, &atomic.AssetListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Templates

Manage email and notification templates.

// Get a template
template, err := client.TemplateGet(ctx, &atomic.TemplateGetInput{
    TemplateID: atomic.String("template-id"),
})

// Create a template
template, err := client.TemplateCreate(ctx, &atomic.TemplateCreateInput{
    Name:    atomic.String("Welcome Email"),
    Subject: atomic.String("Welcome to our platform"),
    Body:    atomic.String("Hello {{name}}, welcome!"),
    Type:    atomic.String("email"),
})

// Update a template
template, err := client.TemplateUpdate(ctx, &atomic.TemplateUpdateInput{
    TemplateID: atomic.String("template-id"),
    Subject:    atomic.String("Updated Subject"),
})

// Delete a template
err := client.TemplateDelete(ctx, &atomic.TemplateDeleteInput{
    TemplateID: atomic.String("template-id"),
})

// List templates
templates, err := client.TemplateList(ctx, &atomic.TemplateListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Subscriptions

Manage user subscriptions and billing.

// Get a subscription
subscription, err := client.SubscriptionGet(ctx, &atomic.SubscriptionGetInput{
    SubscriptionID: atomic.String("subscription-id"),
})

// Create a subscription
subscription, err := client.SubscriptionCreate(ctx, &atomic.SubscriptionCreateInput{
    UserID:  atomic.String("user-id"),
    PlanID:  atomic.String("plan-id"),
    Status:  atomic.String("active"),
})

// Update a subscription
subscription, err := client.SubscriptionUpdate(ctx, &atomic.SubscriptionUpdateInput{
    SubscriptionID: atomic.String("subscription-id"),
    Status:         atomic.String("cancelled"),
})

// Delete a subscription
err := client.SubscriptionDelete(ctx, &atomic.SubscriptionDeleteInput{
    SubscriptionID: atomic.String("subscription-id"),
})

// List subscriptions
subscriptions, err := client.SubscriptionList(ctx, &atomic.SubscriptionListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Plans

Manage subscription plans and pricing.

// Get a plan
plan, err := client.PlanGet(ctx, &atomic.PlanGetInput{
    PlanID: atomic.String("plan-id"),
})

// Create a plan
plan, err := client.PlanCreate(ctx, &atomic.PlanCreateInput{
    Name:        atomic.String("Pro Plan"),
    Description: atomic.String("Professional features"),
    Price:       atomic.Float64(29.99),
    Interval:    atomic.String("monthly"),
})

// Update a plan
plan, err := client.PlanUpdate(ctx, &atomic.PlanUpdateInput{
    PlanID:      atomic.String("plan-id"),
    Name:        atomic.String("Updated Plan Name"),
    Price:       atomic.Float64(39.99),
})

// Delete a plan
err := client.PlanDelete(ctx, &atomic.PlanDeleteInput{
    PlanID: atomic.String("plan-id"),
})

// List plans
plans, err := client.PlanList(ctx, &atomic.PlanListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Prices

Manage pricing tiers and billing.

// Get a price
price, err := client.PriceGet(ctx, &atomic.PriceGetInput{
    PriceID: atomic.String("price-id"),
})

// Create a price
price, err := client.PriceCreate(ctx, &atomic.PriceCreateInput{
    PlanID:  atomic.String("plan-id"),
    Amount:  atomic.Float64(2999), // $29.99 in cents
    Currency: atomic.String("usd"),
    Interval: atomic.String("monthly"),
})

// Update a price
price, err := client.PriceUpdate(ctx, &atomic.PriceUpdateInput{
    PriceID: atomic.String("price-id"),
    Amount:  atomic.Float64(3999), // $39.99 in cents
})

// Delete a price
err := client.PriceDelete(ctx, &atomic.PriceDeleteInput{
    PriceID: atomic.String("price-id"),
})

// List prices
prices, err := client.PriceList(ctx, &atomic.PriceListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Audiences

Manage user audiences and segments.

// Get an audience
audience, err := client.AudienceGet(ctx, &atomic.AudienceGetInput{
    AudienceID: atomic.String("audience-id"),
})

// Create an audience
audience, err := client.AudienceCreate(ctx, &atomic.AudienceCreateInput{
    Name:        atomic.String("Premium Users"),
    Description: atomic.String("Users with premium subscriptions"),
    Filter:      atomic.String("subscription.status = 'active'"),
})

// Update an audience
audience, err := client.AudienceUpdate(ctx, &atomic.AudienceUpdateInput{
    AudienceID:  atomic.String("audience-id"),
    Name:        atomic.String("Updated Audience Name"),
    Description: atomic.String("Updated description"),
})

// Delete an audience
err := client.AudienceDelete(ctx, &atomic.AudienceDeleteInput{
    AudienceID: atomic.String("audience-id"),
})

// List audiences
audiences, err := client.AudienceList(ctx, &atomic.AudienceListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Publishers

Manage content publishers and channels.

// Get a publisher
publisher, err := client.PublisherGet(ctx, &atomic.PublisherGetInput{
    PublisherID: atomic.String("publisher-id"),
})

// Create a publisher
publisher, err := client.PublisherCreate(ctx, &atomic.PublisherCreateInput{
    Name:        atomic.String("My Publisher"),
    Description: atomic.String("My publishing channel"),
    URL:         atomic.String("https://mypublisher.com"),
})

// Update a publisher
publisher, err := client.PublisherUpdate(ctx, &atomic.PublisherUpdateInput{
    PublisherID: atomic.String("publisher-id"),
    Name:        atomic.String("Updated Publisher Name"),
})

// Delete a publisher
err := client.PublisherDelete(ctx, &atomic.PublisherDeleteInput{
    PublisherID: atomic.String("publisher-id"),
})

// List publishers
publishers, err := client.PublisherList(ctx, &atomic.PublisherListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Distributions

Manage content distribution and syndication.

// Get a distribution
distribution, err := client.DistributionGet(ctx, &atomic.DistributionGetInput{
    DistributionID: atomic.String("distribution-id"),
})

// Create a distribution
distribution, err := client.DistributionCreate(ctx, &atomic.DistributionCreateInput{
    ArticleID:   atomic.String("article-id"),
    PublisherID: atomic.String("publisher-id"),
    Status:      atomic.String("scheduled"),
})

// Update a distribution
distribution, err := client.DistributionUpdate(ctx, &atomic.DistributionUpdateInput{
    DistributionID: atomic.String("distribution-id"),
    Status:         atomic.String("published"),
})

// Delete a distribution
err := client.DistributionDelete(ctx, &atomic.DistributionDeleteInput{
    DistributionID: atomic.String("distribution-id"),
})

// List distributions
distributions, err := client.DistributionList(ctx, &atomic.DistributionListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Instances

Manage multi-tenant instances.

// Get an instance
instance, err := client.InstanceGet(ctx, &atomic.InstanceGetInput{
    InstanceID: atomic.String("instance-id"),
})

// Create an instance
instance, err := client.InstanceCreate(ctx, &atomic.InstanceCreateInput{
    Name:        atomic.String("My Instance"),
    Description: atomic.String("My tenant instance"),
    Domain:      atomic.String("myinstance.atomic.com"),
})

// Update an instance
instance, err := client.InstanceUpdate(ctx, &atomic.InstanceUpdateInput{
    InstanceID:  atomic.String("instance-id"),
    Name:        atomic.String("Updated Instance Name"),
    Description: atomic.String("Updated description"),
})

// Delete an instance
err := client.InstanceDelete(ctx, &atomic.InstanceDeleteInput{
    InstanceID: atomic.String("instance-id"),
})

// List instances
instances, err := client.InstanceList(ctx, &atomic.InstanceListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Options

Manage configuration options and settings.

// Get an option
option, err := client.OptionGet(ctx, &atomic.OptionGetInput{
    Name: atomic.String("site_name"),
})

// Update an option
option, err := client.OptionUpdate(ctx, &atomic.OptionUpdateInput{
    Name:  atomic.String("site_name"),
    Value: atomic.String("My Site"),
})

// Remove an option
err := client.OptionRemove(ctx, &atomic.OptionRemoveInput{
    Name: atomic.String("site_name"),
})

// List options
options, err := client.OptionList(ctx, &atomic.OptionListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})
Communication

Send emails and SMS messages.

// Send an email
messages, err := client.SendMail(ctx, &atomic.SendMailInput{
    To:      []string{"user@example.com"},
    Subject: atomic.String("Welcome!"),
    Body:    atomic.String("Welcome to our platform!"),
    TemplateID: atomic.String("template-id"), // Optional
})

// Send an SMS
messages, err := client.SendSMS(ctx, &atomic.SendSMSInput{
    To:   []string{"+1234567890"},
    Body: atomic.String("Your verification code is 123456"),
})

Error Handling

The library provides detailed error information:

user, err := client.UserGet(ctx, &atomic.UserGetInput{
    UserID: atomic.String("invalid-id"),
})
if err != nil {
    if apiErr, ok := err.(atomic.Error); ok {
        log.Printf("API Error: %s (Code: %s)", apiErr.Message, apiErr.Code)
    } else {
        log.Printf("Network Error: %v", err)
    }
}

Response Handling

All API responses are wrapped in a Resource type that provides access to the response data and metadata:

user, err := client.UserGet(ctx, &atomic.UserGetInput{
    UserID: atomic.String("user-id"),
})
if err != nil {
    log.Fatal(err)
}

// Access the user data
fmt.Printf("User: %s\n", user.Email)

// Access response metadata (if available)
if user.LastResponse != nil {
    fmt.Printf("Status: %s\n", user.LastResponse.Status)
    fmt.Printf("Headers: %v\n", user.LastResponse.Headers)
}

Pagination

For list endpoints, use the Limit and Offset parameters for pagination:

// Get first page
users, err := client.UserList(ctx, &atomic.UserListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(0),
})

// Get second page
users, err := client.UserList(ctx, &atomic.UserListInput{
    Limit:  atomic.Int(10),
    Offset: atomic.Int(10),
})

Context Support

All API methods accept a context.Context for cancellation and timeouts:

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

user, err := client.UserGet(ctx, &atomic.UserGetInput{
    UserID: atomic.String("user-id"),
})

Instance Support

For multi-tenant applications, you can specify an instance ID in the context:

ctx := atomic.ContextWithInstance(context.Background(), "instance-id")

user, err := client.UserGet(ctx, &atomic.UserGetInput{
    UserID: atomic.String("user-id"),
})

Dependencies

The library depends on the following packages:

  • github.com/libatomic/atomic - Core Atomic types and models
  • github.com/google/go-querystring - Query string encoding
  • golang.org/x/oauth2 - OAuth2 authentication
  • github.com/go-ozzo/ozzo-validation/v4 - Input validation

License

This library is licensed under the GNU General Public License v3.0. See the LICENSE file for details.

Documentation

Index

Constants

View Source
const (
	UserTokenCreatePath   = "/api/1.0.0/users/%s/tokens"
	AppTokenCreatePath    = "/api/1.0.0/applications/%s/tokens"
	AccessTokenGetPath    = "/api/1.0.0/tokens/%s"
	AccessTokenRevokePath = "/api/1.0.0/tokens/%s"
	AccessTokenDeletePath = "/api/1.0.0/tokens/%s"
)
View Source
const (
	ApplicationGetPath    = "/api/1.0.0/applications/%s"
	ApplicationCreatePath = "/api/1.0.0/applications"
	ApplicationUpdatePath = "/api/1.0.0/applications/%s"
	ApplicationDeletePath = "/api/1.0.0/applications/%s"
	ApplicationListPath   = "/api/1.0.0/applications"
)
View Source
const (
	ArticleCreatePath = "/api/1.0.0/articles"
	ArticleUpdatePath = "/api/1.0.0/articles/%s"
	ArticleDeletePath = "/api/1.0.0/articles/%s"
	ArticleListPath   = "/api/1.0.0/articles"
	ArticleGetPath    = "/api/1.0.0/articles/%s"
)
View Source
const (
	AssetCreatePath = "/api/1.0.0/assets"
	AssetGetPath    = "/api/1.0.0/assets/%s"
	AssetUpdatePath = "/api/1.0.0/assets/%s"
	AssetDeletePath = "/api/1.0.0/assets/%s"
	AssetListPath   = "/api/1.0.0/assets"
)
View Source
const (
	AudienceGetPath    = "/api/1.0.0/audiences/%s"
	AudienceCreatePath = "/api/1.0.0/audiences"
	AudienceUpdatePath = "/api/1.0.0/audiences/%s"
	AudienceDeletePath = "/api/1.0.0/audiences/%s"
	AudienceListPath   = "/api/1.0.0/audiences"
)
View Source
const (
	DistributionGetPath    = "/api/1.0.0/distributions/%s"
	DistributionCreatePath = "/api/1.0.0/distributions"
	DistributionUpdatePath = "/api/1.0.0/distributions/%s"
	DistributionDeletePath = "/api/1.0.0/distributions/%s"
	DistributionListPath   = "/api/1.0.0/distributions"
)
View Source
const (
	InstanceCreatePath = "/api/1.0.0/instances"
	InstanceGetPath    = "/api/1.0.0/instances/%s"
	InstanceListPath   = "/api/1.0.0/instances"
	InstanceUpdatePath = "/api/1.0.0/instances/%s"
	InstanceDeletePath = "/api/1.0.0/instances/%s"
)
View Source
const (
	OptionGetPath    = "/api/1.0.0/options/%s"
	OptionListPath   = "/api/1.0.0/options"
	OptionUpdatePath = "/api/1.0.0/options/%s"
	OptionRemovePath = "/api/1.0.0/options/%s"
)
View Source
const (
	PlanGetPath       = "/api/1.0.0/plans/%s"
	PlanCreatePath    = "/api/1.0.0/plans"
	PlanUpdatePath    = "/api/1.0.0/plans/%s"
	PlanDeletePath    = "/api/1.0.0/plans/%s"
	PlanListPath      = "/api/1.0.0/plans"
	PlanSubscribePath = "/api/1.0.0/plans/%s/subscribe"
)
View Source
const (
	PriceGetPath    = "/api/1.0.0/prices/%s"
	PriceCreatePath = "/api/1.0.0/prices"
	PriceUpdatePath = "/api/1.0.0/prices/%s"
	PriceDeletePath = "/api/1.0.0/prices/%s"
	PriceListPath   = "/api/1.0.0/prices"
)
View Source
const (
	PublisherCreatePath = "/api/1.0.0/publishers"
	PublisherUpdatePath = "/api/1.0.0/publishers/%s"
	PublisherGetPath    = "/api/1.0.0/publishers/%s"
	PublisherListPath   = "/api/1.0.0/publishers"
	PublisherDeletePath = "/api/1.0.0/publishers/%s"
)
View Source
const (
	SubscriptionGetPath    = "/api/1.0.0/subscriptions/%s"
	SubscriptionListPath   = "/api/1.0.0/subscriptions"
	SubscriptionCreatePath = "/api/1.0.0/subscriptions"
	SubscriptionUpdatePath = "/api/1.0.0/subscriptions/%s"
	SubscriptionDeletePath = "/api/1.0.0/subscriptions/%s"
)
View Source
const (
	TemplateGetPath    = "/api/1.0.0/templates/%s"
	TemplateListPath   = "/api/1.0.0/templates"
	TemplateCreatePath = "/api/1.0.0/templates"
	TemplateUpdatePath = "/api/1.0.0/templates/%s"
	TemplateDeletePath = "/api/1.0.0/templates/%s"
)
View Source
const (
	UserGetPath    = "/api/1.0.0/users/%s"
	UserCreatePath = "/api/1.0.0/users"
	UserUpdatePath = "/api/1.0.0/users/%s"
	UserDeletePath = "/api/1.0.0/users/%s"
	UserListPath   = "/api/1.0.0/users"
	UserImportPath = "/api/1.0.0/users/import"
)
View Source
const (
	DefaultAPIHost = "localhost:9000"
)
View Source
const (
	SMSSendPath = "/api/1.0.0/sms"
)
View Source
const (
	SendMailPath = "/api/1.0.0/mail"
)

Variables

This section is empty.

Functions

func ContextWithParams

func ContextWithParams(ctx context.Context, params Params) context.Context

Types

type ApiBackend

type ApiBackend struct {
	// contains filtered or unexported fields
}

func (*ApiBackend) ExecContext

func (b *ApiBackend) ExecContext(ctx context.Context, params RequestContainer, result Responder) error

func (*ApiBackend) NewRequest

func (b *ApiBackend) NewRequest(ctx context.Context, params RequestContainer) (*http.Request, error)

type ApiConfig

type ApiConfig struct {
	AccessToken string
	Host        string
	// contains filtered or unexported fields
}

type ApiOption

type ApiOption func(*ApiConfig)

func WithClientCredentials

func WithClientCredentials(clientID, clientSecret string, scopes ...string) ApiOption

func WithHTTPClient

func WithHTTPClient(http *http.Client) ApiOption

func WithHost

func WithHost(host string) ApiOption

func WithToken

func WithToken(token string) ApiOption

type Backend

type Backend interface {
	ExecContext(ctx context.Context, params RequestContainer, result Responder) error
}

type Client

type Client struct {
	Backend Backend
}

func New

func New(opts ...ApiOption) *Client

func NewClient

func NewClient(backend Backend) *Client

func (*Client) AccessTokenCreate

func (c *Client) AccessTokenCreate(ctx context.Context, params *atomic.AccessTokenCreateInput) (*atomic.AccessToken, error)

func (*Client) AccessTokenGet

func (c *Client) AccessTokenGet(ctx context.Context, params *atomic.AccessTokenGetInput) (*atomic.AccessToken, error)

func (*Client) AccessTokenRevoke

func (c *Client) AccessTokenRevoke(ctx context.Context, params *atomic.AccessTokenRevokeInput) error

func (*Client) ApplicationCreate

func (c *Client) ApplicationCreate(ctx context.Context, params *atomic.ApplicationCreateInput) (*atomic.Application, error)

func (*Client) ApplicationDelete

func (c *Client) ApplicationDelete(ctx context.Context, params *atomic.ApplicationDeleteInput) error

func (*Client) ApplicationGet

func (c *Client) ApplicationGet(ctx context.Context, params *atomic.ApplicationGetInput) (*atomic.Application, error)

func (*Client) ApplicationList

func (c *Client) ApplicationList(ctx context.Context, params *atomic.ApplicationListInput) ([]*atomic.Application, error)

func (*Client) ApplicationUpdate

func (c *Client) ApplicationUpdate(ctx context.Context, params *atomic.ApplicationUpdateInput) (*atomic.Application, error)

func (*Client) ArticleCreate

func (c *Client) ArticleCreate(ctx context.Context, params *atomic.ArticleCreateInput) (*atomic.Article, error)

func (*Client) ArticleDelete

func (c *Client) ArticleDelete(ctx context.Context, params *atomic.ArticleDeleteInput) error

func (*Client) ArticleGet

func (c *Client) ArticleGet(ctx context.Context, params *atomic.ArticleGetInput) (*atomic.Article, error)

func (*Client) ArticleList

func (c *Client) ArticleList(ctx context.Context, params *atomic.ArticleListInput) ([]*atomic.Article, error)

func (*Client) ArticleUpdate

func (c *Client) ArticleUpdate(ctx context.Context, params *atomic.ArticleUpdateInput) (*atomic.Article, error)

func (*Client) AssetCreate

func (c *Client) AssetCreate(ctx context.Context, params *atomic.AssetCreateInput) (*atomic.Asset, error)

func (*Client) AssetDelete

func (c *Client) AssetDelete(ctx context.Context, params *atomic.AssetDeleteInput) error

func (*Client) AssetGet

func (c *Client) AssetGet(ctx context.Context, params *atomic.AssetGetInput) (*atomic.Asset, error)

func (*Client) AssetList

func (c *Client) AssetList(ctx context.Context, params *atomic.AssetListInput) ([]*atomic.Asset, error)

func (*Client) AssetUpdate

func (c *Client) AssetUpdate(ctx context.Context, params *atomic.AssetUpdateInput) (*atomic.Asset, error)

func (*Client) AudienceCreate

func (c *Client) AudienceCreate(ctx context.Context, params *atomic.AudienceCreateInput) (*atomic.Audience, error)

func (*Client) AudienceDelete

func (c *Client) AudienceDelete(ctx context.Context, params *atomic.AudienceDeleteInput) error

func (*Client) AudienceGet

func (c *Client) AudienceGet(ctx context.Context, params *atomic.AudienceGetInput) (*atomic.Audience, error)

func (*Client) AudienceList

func (c *Client) AudienceList(ctx context.Context, params *atomic.AudienceListInput) ([]*atomic.Audience, error)

func (*Client) AudienceUpdate

func (c *Client) AudienceUpdate(ctx context.Context, params *atomic.AudienceUpdateInput) (*atomic.Audience, error)

func (*Client) DistributionCreate

func (c *Client) DistributionCreate(ctx context.Context, params *atomic.DistributionCreateInput) (*atomic.Distribution, error)

func (*Client) DistributionDelete

func (c *Client) DistributionDelete(ctx context.Context, params *atomic.DistributionDeleteInput) error

func (*Client) DistributionGet

func (c *Client) DistributionGet(ctx context.Context, params *atomic.DistributionGetInput) (*atomic.Distribution, error)

func (*Client) DistributionList

func (c *Client) DistributionList(ctx context.Context, params *atomic.DistributionListInput) ([]*atomic.Distribution, error)

func (*Client) DistributionUpdate

func (c *Client) DistributionUpdate(ctx context.Context, params *atomic.DistributionUpdateInput) (*atomic.Distribution, error)

func (*Client) InstanceCreate

func (c *Client) InstanceCreate(ctx context.Context, params *atomic.InstanceCreateInput) (*atomic.Instance, error)

func (*Client) InstanceDelete

func (c *Client) InstanceDelete(ctx context.Context, params *atomic.InstanceDeleteInput) error

func (*Client) InstanceGet

func (c *Client) InstanceGet(ctx context.Context, params *atomic.InstanceGetInput) (*atomic.Instance, error)

func (*Client) InstanceList

func (c *Client) InstanceList(ctx context.Context, params *atomic.InstanceListInput) ([]*atomic.Instance, error)

func (*Client) InstanceUpdate

func (c *Client) InstanceUpdate(ctx context.Context, params *atomic.InstanceUpdateInput) (*atomic.Instance, error)

func (*Client) OptionGet

func (c *Client) OptionGet(ctx context.Context, params *atomic.OptionGetInput) (*atomic.Option, error)

func (*Client) OptionList

func (c *Client) OptionList(ctx context.Context, params *atomic.OptionListInput) ([]*atomic.Option, error)

func (*Client) OptionRemove

func (c *Client) OptionRemove(ctx context.Context, params *atomic.OptionRemoveInput) error

func (*Client) OptionUpdate

func (c *Client) OptionUpdate(ctx context.Context, params *atomic.OptionUpdateInput) (*atomic.Option, error)

func (*Client) PlanCreate

func (c *Client) PlanCreate(ctx context.Context, params *atomic.PlanCreateInput) (*atomic.Plan, error)

func (*Client) PlanDelete

func (c *Client) PlanDelete(ctx context.Context, params *atomic.PlanDeleteInput) error

func (*Client) PlanGet

func (c *Client) PlanGet(ctx context.Context, params *atomic.PlanGetInput) (*atomic.Plan, error)

func (*Client) PlanList

func (c *Client) PlanList(ctx context.Context, params *atomic.PlanListInput) ([]*atomic.Plan, error)

func (*Client) PlanSubscribe

func (c *Client) PlanSubscribe(ctx context.Context, params *atomic.PlanSubscribeInput) (*atomic.Subscription, error)

func (*Client) PlanUpdate

func (c *Client) PlanUpdate(ctx context.Context, params *atomic.PlanUpdateInput) (*atomic.Plan, error)

func (*Client) PriceCreate

func (c *Client) PriceCreate(ctx context.Context, params *atomic.PriceCreateInput) (*atomic.Price, error)

func (*Client) PriceDelete

func (c *Client) PriceDelete(ctx context.Context, params *atomic.PriceDeleteInput) error

func (*Client) PriceGet

func (c *Client) PriceGet(ctx context.Context, params *atomic.PriceGetInput) (*atomic.Price, error)

func (*Client) PriceList

func (c *Client) PriceList(ctx context.Context, params *atomic.PriceListInput) ([]*atomic.Price, error)

func (*Client) PriceUpdate

func (c *Client) PriceUpdate(ctx context.Context, params *atomic.PriceUpdateInput) (*atomic.Price, error)

func (*Client) PublisherCreate

func (c *Client) PublisherCreate(ctx context.Context, params *atomic.PublisherCreateInput) (*atomic.Publisher, error)

func (*Client) PublisherDelete

func (c *Client) PublisherDelete(ctx context.Context, params *atomic.PublisherDeleteInput) error

func (*Client) PublisherGet

func (c *Client) PublisherGet(ctx context.Context, params *atomic.PublisherGetInput) (*atomic.Publisher, error)

func (*Client) PublisherList

func (c *Client) PublisherList(ctx context.Context, params *atomic.PublisherListInput) (*atomic.PublisherListOutput, error)

func (*Client) PublisherUpdate

func (c *Client) PublisherUpdate(ctx context.Context, params *atomic.PublisherUpdateInput) (*atomic.Publisher, error)

func (*Client) SendMail

func (c *Client) SendMail(ctx context.Context, params *atomic.SendMailInput) ([]*email.Message, error)

func (*Client) SendSMS

func (c *Client) SendSMS(ctx context.Context, params *atomic.SendSMSInput) ([]*atomic.SMS, error)

func (*Client) SubscriptionCreate

func (c *Client) SubscriptionCreate(ctx context.Context, params *atomic.SubscriptionCreateInput) (*atomic.Subscription, error)

func (*Client) SubscriptionDelete

func (c *Client) SubscriptionDelete(ctx context.Context, params *atomic.SubscriptionDeleteInput) error

func (*Client) SubscriptionGet

func (c *Client) SubscriptionGet(ctx context.Context, params *atomic.SubscriptionGetInput) (*atomic.Subscription, error)

func (*Client) SubscriptionList

func (c *Client) SubscriptionList(ctx context.Context, params *atomic.SubscriptionListInput) ([]*atomic.Subscription, error)

func (*Client) SubscriptionUpdate

func (c *Client) SubscriptionUpdate(ctx context.Context, params *atomic.SubscriptionUpdateInput) (*atomic.Subscription, error)

func (*Client) TemplateCreate

func (c *Client) TemplateCreate(ctx context.Context, params *atomic.TemplateCreateInput) (*atomic.Template, error)

func (*Client) TemplateDelete

func (c *Client) TemplateDelete(ctx context.Context, params *atomic.TemplateDeleteInput) error

func (*Client) TemplateGet

func (c *Client) TemplateGet(ctx context.Context, params *atomic.TemplateGetInput) (*atomic.Template, error)

func (*Client) TemplateList

func (c *Client) TemplateList(ctx context.Context, params *atomic.TemplateListInput) ([]*atomic.Template, error)

func (*Client) TemplateUpdate

func (c *Client) TemplateUpdate(ctx context.Context, params *atomic.TemplateUpdateInput) (*atomic.Template, error)

func (*Client) UserCreate

func (c *Client) UserCreate(ctx context.Context, params *atomic.UserCreateInput) (*atomic.User, error)

func (*Client) UserDelete

func (c *Client) UserDelete(ctx context.Context, params *atomic.UserDeleteInput) error

func (*Client) UserGet

func (c *Client) UserGet(ctx context.Context, params *atomic.UserGetInput) (*atomic.User, error)

func (*Client) UserImport

func (c *Client) UserImport(ctx context.Context, params *atomic.UserImportInput) (*atomic.Job, error)

func (*Client) UserList

func (c *Client) UserList(ctx context.Context, params *atomic.UserListInput) ([]*atomic.User, error)

func (*Client) UserUpdate

func (c *Client) UserUpdate(ctx context.Context, params *atomic.UserUpdateInput) (*atomic.User, error)

type ClientParamsKey

type ClientParamsKey string

type Error

type Error struct {
	Code    string `json:"code,omitempty"`
	Message string `json:"message,omitempty"`
}

func (Error) Error

func (e Error) Error() string

type Iter

type Iter[P any, T any] struct {
	// contains filtered or unexported fields
}

func NewIter

func NewIter[P any, T any](params P, n NextFunc[P, T]) *Iter[P, T]

type ListParams

type ListParams struct {
	Params
	Limit  *int64 `schema:"limit,omitempty"`
	Offset *int64 `schema:"offset,omitempty"`
}

type NextFunc

type NextFunc[P any, T any] func(P) (T, bool)

type Params

type Params struct {
	Context  context.Context `schema:"-" json:"-"`
	Headers  http.Header     `schema:"-" json:"-"`
	NoAuth   bool            `schema:"-" json:"-"`
	Expand   []string        `schema:"expand,omitempty" json:"expand,omitempty"`
	Fields   []string        `schema:"fields,omitempty" json:"fields,omitempty"`
	Instance *string         `schema:"instance,omitempty" json:"-"`
}

func ParamsFromContext

func ParamsFromContext(ctx context.Context) Params

type ParamsEncoding

type ParamsEncoding string
const (
	ParamsEncodingJSON      ParamsEncoding = "json"
	ParamsEncodingMultipart ParamsEncoding = "multipart"
	ParamsEncodingQuery     ParamsEncoding = "query"
)

type RequestContainer

type RequestContainer interface {
	MethodParams() validation.Validatable
	RequestParams() Params
	ParamsEncoding() ParamsEncoding
	ContentType() string
	Method() string
	Path() string
	Body() io.Reader
}

type RequestProxy

type RequestProxy[T validation.Validatable] struct {
	// contains filtered or unexported fields
}

func NewRequest

func NewRequest[T validation.Validatable](ctx context.Context, path string, methodParams T) *RequestProxy[T]

func (*RequestProxy[T]) Body

func (p *RequestProxy[T]) Body() io.Reader

func (*RequestProxy[T]) ContentType

func (p *RequestProxy[T]) ContentType() string

func (*RequestProxy[T]) Delete

func (p *RequestProxy[T]) Delete() *RequestProxy[T]

func (*RequestProxy[T]) Get

func (p *RequestProxy[T]) Get() *RequestProxy[T]

func (*RequestProxy[T]) MarshalJSON

func (p *RequestProxy[T]) MarshalJSON() ([]byte, error)

func (*RequestProxy[T]) Method

func (p *RequestProxy[T]) Method() string

func (*RequestProxy[T]) MethodParams

func (p *RequestProxy[T]) MethodParams() validation.Validatable

func (*RequestProxy[T]) ParamsEncoding

func (p *RequestProxy[T]) ParamsEncoding() ParamsEncoding

func (*RequestProxy[T]) Patch

func (p *RequestProxy[T]) Patch() *RequestProxy[T]

func (*RequestProxy[T]) Path

func (p *RequestProxy[T]) Path() string

func (*RequestProxy[T]) Post

func (p *RequestProxy[T]) Post() *RequestProxy[T]

func (*RequestProxy[T]) Put

func (p *RequestProxy[T]) Put() *RequestProxy[T]

func (*RequestProxy[T]) RequestParams

func (p *RequestProxy[T]) RequestParams() Params

func (*RequestProxy[T]) WithBody

func (p *RequestProxy[T]) WithBody(body io.Reader) *RequestProxy[T]

func (*RequestProxy[T]) WithContentType

func (p *RequestProxy[T]) WithContentType(contentType string) *RequestProxy[T]

func (*RequestProxy[T]) WithEncoding

func (p *RequestProxy[T]) WithEncoding(encoding ParamsEncoding) *RequestProxy[T]

func (*RequestProxy[T]) WithMethod

func (p *RequestProxy[T]) WithMethod(method string) *RequestProxy[T]

type Resource

type Resource[T any] struct {
	LastResponse *Response `json:"-"`
	// contains filtered or unexported fields
}

func (*Resource[T]) Pointer

func (r *Resource[T]) Pointer() *T

func (*Resource[T]) Response

func (r *Resource[T]) Response() any

func (*Resource[T]) SetLastResponse

func (r *Resource[T]) SetLastResponse(resp *Response)

func (*Resource[T]) Value

func (r *Resource[T]) Value() T

type Responder

type Responder interface {
	SetLastResponse(resp *Response)
	Response() any
}

type Response

type Response struct {
	Headers    http.Header     `json:"-"`
	Body       json.RawMessage `json:"-"`
	Status     string          `json:"-"`
	StatusCode int             `json:"-"`
}

type ResponseProxy

type ResponseProxy[T any] struct {
	Resource[T]
}

type ResponseSliceProxy

type ResponseSliceProxy[T any] struct {
	Resource[[]T]
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL