upload-example.go
// Command upload-example uploads a document using airplan's Go API.
package main

import (
	"context"
	"fmt"
	"os"
	"path/filepath"
	"time"

	"github.com/jimeh/airplan/airplan"
)

func main() {
	if err := run(os.Args[1:]); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

func run(args []string) error {
	if len(args) != 1 {
		return fmt.Errorf("usage: upload-example DOCUMENT")
	}

	file, err := os.Open(args[0])
	if err != nil {
		return err
	}
	defer func() { _ = file.Close() }()

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

	cfg, err := airplan.LoadConfig(airplan.ConfigOptions{})
	if err != nil {
		return err
	}
	client, err := airplan.New(ctx, cfg)
	if err != nil {
		return err
	}

	result, err := client.Upload(ctx, airplan.Input{
		Reader: file,
		Name:   filepath.Base(file.Name()),
	})
	if err != nil {
		return err
	}
	for _, warning := range result.Warnings {
		fmt.Fprintf(os.Stderr, "airplan: warning: %s\n", warning)
	}
	fmt.Println(result.URL)
	return nil
}