Skip to content

Commit

Permalink
feat(api): api update (#53)
Browse files Browse the repository at this point in the history
  • Loading branch information
stainless-app[bot] committed Jan 24, 2025
1 parent 8b35f6b commit a054ca1
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 3 deletions.
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
configured_endpoints: 21
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-32e801f2ca53603409f51b39c415f31f7d678f243df7659e16923f36b08eb343.yml
configured_endpoints: 22
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/nirvana-labs%2Fnirvana-103a418ce8e7c594165303b86b52547fae832297c274951cb5025d917622fbc6.yml
3 changes: 3 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,14 @@ Response Types:

- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#StorageType">StorageType</a>
- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#Volume">Volume</a>
- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeKind">VolumeKind</a>
- <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeListResponse">VolumeListResponse</a>

Methods:

- <code title="post /volumes">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.New">New</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeNewParams">VolumeNewParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="patch /volumes/{volume_id}">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.Update">Update</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, volumeID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeUpdateParams">VolumeUpdateParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /volumes">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.List">List</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeListResponse">VolumeListResponse</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="delete /volumes/{volume_id}">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.Delete">Delete</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, volumeID <a href="https://pkg.go.dev/builtin#string">string</a>, body <a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeDeleteParams">VolumeDeleteParams</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations">operations</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/operations#Operation">Operation</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>
- <code title="get /volumes/{volume_id}">client.Volumes.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#VolumeService.Get">Get</a>(ctx <a href="https://pkg.go.dev/context">context</a>.<a href="https://pkg.go.dev/context#Context">Context</a>, volumeID <a href="https://pkg.go.dev/builtin#string">string</a>) (<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes">volumes</a>.<a href="https://pkg.go.dev/github.com/nirvana-labs/nirvana-go/volumes#Volume">Volume</a>, <a href="https://pkg.go.dev/builtin#error">error</a>)</code>

Expand Down
50 changes: 49 additions & 1 deletion volumes/volume.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ func (r *VolumeService) Update(ctx context.Context, volumeID string, body Volume
return
}

// List all volumes
func (r *VolumeService) List(ctx context.Context, opts ...option.RequestOption) (res *VolumeListResponse, err error) {
opts = append(r.Options[:], opts...)
path := "volumes"
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return
}

// Delete a Volume. Boot or data volumes can be deleted.
func (r *VolumeService) Delete(ctx context.Context, volumeID string, body VolumeDeleteParams, opts ...option.RequestOption) (res *operations.Operation, err error) {
opts = append(r.Options[:], opts...)
Expand Down Expand Up @@ -97,7 +105,9 @@ func (r StorageType) IsKnown() bool {
type Volume struct {
ID string `json:"id,required"`
CreatedAt string `json:"created_at,required"`
Size int64 `json:"size,required"`
// Volume kind.
Kind VolumeKind `json:"kind,required"`
Size int64 `json:"size,required"`
// Storage type.
Type StorageType `json:"type,required"`
UpdatedAt string `json:"updated_at,required"`
Expand All @@ -108,6 +118,7 @@ type Volume struct {
type volumeJSON struct {
ID apijson.Field
CreatedAt apijson.Field
Kind apijson.Field
Size apijson.Field
Type apijson.Field
UpdatedAt apijson.Field
Expand All @@ -123,6 +134,43 @@ func (r volumeJSON) RawJSON() string {
return r.raw
}

// Volume kind.
type VolumeKind string

const (
VolumeKindBoot VolumeKind = "boot"
VolumeKindData VolumeKind = "data"
)

func (r VolumeKind) IsKnown() bool {
switch r {
case VolumeKindBoot, VolumeKindData:
return true
}
return false
}

type VolumeListResponse struct {
Items []Volume `json:"items,required"`
JSON volumeListResponseJSON `json:"-"`
}

// volumeListResponseJSON contains the JSON metadata for the struct
// [VolumeListResponse]
type volumeListResponseJSON struct {
Items apijson.Field
raw string
ExtraFields map[string]apijson.Field
}

func (r *VolumeListResponse) UnmarshalJSON(data []byte) (err error) {
return apijson.UnmarshalRoot(data, r)
}

func (r volumeListResponseJSON) RawJSON() string {
return r.raw
}

type VolumeNewParams struct {
Size param.Field[int64] `json:"size,required"`
VMID param.Field[string] `json:"vm_id,required"`
Expand Down
22 changes: 22 additions & 0 deletions volumes/volume_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,28 @@ func TestVolumeUpdate(t *testing.T) {
}
}

func TestVolumeList(t *testing.T) {
baseURL := "http://localhost:4010"
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
baseURL = envURL
}
if !testutil.CheckTestServer(t, baseURL) {
return
}
client := nirvana.NewClient(
option.WithBaseURL(baseURL),
option.WithAuthToken("My Auth Token"),
)
_, err := client.Volumes.List(context.TODO())
if err != nil {
var apierr *nirvana.Error
if errors.As(err, &apierr) {
t.Log(string(apierr.DumpRequest(true)))
}
t.Fatalf("err should be nil: %s", err.Error())
}
}

func TestVolumeDelete(t *testing.T) {
baseURL := "http://localhost:4010"
if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
Expand Down

0 comments on commit a054ca1

Please sign in to comment.