Skip to content

Commit caa520e

Browse files
authored
feat(file): generate SDKs (#2008)
1 parent 25c1155 commit caa520e

File tree

8 files changed

+636
-0
lines changed

8 files changed

+636
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* This file is automatically generated from /scripts/generate.js
3+
* PLEASE DO NOT EDIT HERE
4+
*/
5+
6+
export * as v1alpha1 from './v1alpha1/index.gen'
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
// This file was automatically generated. DO NOT EDIT.
2+
// If you have any remark or suggestion do not hesitate to open an issue.
3+
import {
4+
API as ParentAPI,
5+
enrichForPagination,
6+
urlParams,
7+
validatePathParam,
8+
waitForResource,
9+
} from '@scaleway/sdk-client'
10+
import type { Region as ScwRegion, WaitForOptions } from '@scaleway/sdk-client'
11+
import { FILE_SYSTEM_TRANSIENT_STATUSES as FILE_SYSTEM_TRANSIENT_STATUSES_FILE } from './content.gen'
12+
import {
13+
marshalCreateFileSystemRequest,
14+
marshalUpdateFileSystemRequest,
15+
unmarshalFileSystem,
16+
unmarshalListAttachmentsResponse,
17+
unmarshalListFileSystemsResponse,
18+
} from './marshalling.gen'
19+
import type {
20+
CreateFileSystemRequest,
21+
DeleteFileSystemRequest,
22+
FileSystem,
23+
GetFileSystemRequest,
24+
ListAttachmentsRequest,
25+
ListAttachmentsResponse,
26+
ListFileSystemsRequest,
27+
ListFileSystemsResponse,
28+
UpdateFileSystemRequest,
29+
} from './types.gen'
30+
31+
const jsonContentHeaders = {
32+
'Content-Type': 'application/json; charset=utf-8',
33+
}
34+
35+
/**
36+
* File Storage API.
37+
38+
This API allows you to manage your File Storage resources.
39+
*/
40+
export class API extends ParentAPI {
41+
/** Lists the available regions of the API. */
42+
public static readonly LOCALITIES: ScwRegion[] = ['fr-par']
43+
44+
/**
45+
* Get filesystem details. Retrieve all properties and current status of a specific filesystem identified by its ID.
46+
*
47+
* @param request - The request {@link GetFileSystemRequest}
48+
* @returns A Promise of FileSystem
49+
*/
50+
getFileSystem = (request: Readonly<GetFileSystemRequest>) =>
51+
this.client.fetch<FileSystem>(
52+
{
53+
method: 'GET',
54+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
55+
},
56+
unmarshalFileSystem,
57+
)
58+
59+
/**
60+
* Waits for {@link FileSystem} to be in a final state.
61+
*
62+
* @param request - The request {@link GetFileSystemRequest}
63+
* @param options - The waiting options
64+
* @returns A Promise of FileSystem
65+
*/
66+
waitForFileSystem = (
67+
request: Readonly<GetFileSystemRequest>,
68+
options?: Readonly<WaitForOptions<FileSystem>>,
69+
) =>
70+
waitForResource(
71+
options?.stop ??
72+
(res =>
73+
Promise.resolve(
74+
!FILE_SYSTEM_TRANSIENT_STATUSES_FILE.includes(res.status),
75+
)),
76+
this.getFileSystem,
77+
request,
78+
options,
79+
)
80+
81+
protected pageOfListFileSystems = (
82+
request: Readonly<ListFileSystemsRequest> = {},
83+
) =>
84+
this.client.fetch<ListFileSystemsResponse>(
85+
{
86+
method: 'GET',
87+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems`,
88+
urlParams: urlParams(
89+
['name', request.name],
90+
['order_by', request.orderBy],
91+
['page', request.page],
92+
[
93+
'page_size',
94+
request.pageSize ?? this.client.settings.defaultPageSize,
95+
],
96+
['project_id', request.projectId],
97+
['tags', request.tags],
98+
),
99+
},
100+
unmarshalListFileSystemsResponse,
101+
)
102+
103+
/**
104+
* List all filesystems. Retrieve all filesystems in the specified region. Results are ordered by creation date in ascending order by default.
105+
Use the order_by parameter to modify the sorting behavior.
106+
*
107+
* @param request - The request {@link ListFileSystemsRequest}
108+
* @returns A Promise of ListFileSystemsResponse
109+
*/
110+
listFileSystems = (request: Readonly<ListFileSystemsRequest> = {}) =>
111+
enrichForPagination('filesystems', this.pageOfListFileSystems, request)
112+
113+
protected pageOfListAttachments = (
114+
request: Readonly<ListAttachmentsRequest> = {},
115+
) =>
116+
this.client.fetch<ListAttachmentsResponse>(
117+
{
118+
method: 'GET',
119+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/attachments`,
120+
urlParams: urlParams(
121+
['filesystem_id', request.filesystemId],
122+
['page', request.page],
123+
[
124+
'page_size',
125+
request.pageSize ?? this.client.settings.defaultPageSize,
126+
],
127+
['resource_id', request.resourceId],
128+
['resource_type', request.resourceType],
129+
),
130+
},
131+
unmarshalListAttachmentsResponse,
132+
)
133+
134+
/**
135+
* List filesystems attachments. List all existing attachments in a specified region.
136+
By default, the attachments listed are ordered by creation date in ascending order.
137+
This can be modified using the `order_by` field.
138+
*
139+
* @param request - The request {@link ListAttachmentsRequest}
140+
* @returns A Promise of ListAttachmentsResponse
141+
*/
142+
listAttachments = (request: Readonly<ListAttachmentsRequest> = {}) =>
143+
enrichForPagination('attachments', this.pageOfListAttachments, request)
144+
145+
/**
146+
* Create a new filesystem. To create a new filesystem, you need to provide a name, a size, and a project ID.
147+
*
148+
* @param request - The request {@link CreateFileSystemRequest}
149+
* @returns A Promise of FileSystem
150+
*/
151+
createFileSystem = (request: Readonly<CreateFileSystemRequest>) =>
152+
this.client.fetch<FileSystem>(
153+
{
154+
body: JSON.stringify(
155+
marshalCreateFileSystemRequest(request, this.client.settings),
156+
),
157+
headers: jsonContentHeaders,
158+
method: 'POST',
159+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems`,
160+
},
161+
unmarshalFileSystem,
162+
)
163+
164+
/**
165+
* Delete a detached filesystem. You must specify the `filesystem_id` of the filesystem you want to delete.
166+
*
167+
* @param request - The request {@link DeleteFileSystemRequest}
168+
*/
169+
deleteFileSystem = (request: Readonly<DeleteFileSystemRequest>) =>
170+
this.client.fetch<void>({
171+
method: 'DELETE',
172+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
173+
})
174+
175+
/**
176+
* Update filesystem properties. Update the technical details of a filesystem, such as its name, tags or its new size.
177+
You can only resize a filesystem to a larger size.
178+
*
179+
* @param request - The request {@link UpdateFileSystemRequest}
180+
* @returns A Promise of FileSystem
181+
*/
182+
updateFileSystem = (request: Readonly<UpdateFileSystemRequest>) =>
183+
this.client.fetch<FileSystem>(
184+
{
185+
body: JSON.stringify(
186+
marshalUpdateFileSystemRequest(request, this.client.settings),
187+
),
188+
headers: jsonContentHeaders,
189+
method: 'PATCH',
190+
path: `/file/v1alpha1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/filesystems/${validatePathParam('filesystemId', request.filesystemId)}`,
191+
},
192+
unmarshalFileSystem,
193+
)
194+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// This file was automatically generated. DO NOT EDIT.
2+
// If you have any remark or suggestion do not hesitate to open an issue.
3+
import type { FileSystemStatus } from './types.gen'
4+
5+
/** Lists transient statutes of the enum {@link FileSystemStatus}. */
6+
export const FILE_SYSTEM_TRANSIENT_STATUSES: FileSystemStatus[] = [
7+
'creating',
8+
'updating',
9+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// This file was automatically generated. DO NOT EDIT.
2+
// If you have any remark or suggestion do not hesitate to open an issue.
3+
export { API } from './api.gen'
4+
export * from './content.gen'
5+
export type {
6+
Attachment,
7+
AttachmentResourceType,
8+
CreateFileSystemRequest,
9+
DeleteFileSystemRequest,
10+
FileSystem,
11+
FileSystemStatus,
12+
GetFileSystemRequest,
13+
ListAttachmentsRequest,
14+
ListAttachmentsResponse,
15+
ListFileSystemsRequest,
16+
ListFileSystemsRequestOrderBy,
17+
ListFileSystemsResponse,
18+
UpdateFileSystemRequest,
19+
} from './types.gen'
20+
export * as ValidationRules from './validation-rules.gen'
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// This file was automatically generated. DO NOT EDIT.
2+
// If you have any remark or suggestion do not hesitate to open an issue.
3+
import {
4+
isJSONObject,
5+
unmarshalArrayOfObject,
6+
unmarshalDate,
7+
} from '@scaleway/sdk-client'
8+
import type { DefaultValues } from '@scaleway/sdk-client'
9+
import type {
10+
Attachment,
11+
CreateFileSystemRequest,
12+
FileSystem,
13+
ListAttachmentsResponse,
14+
ListFileSystemsResponse,
15+
UpdateFileSystemRequest,
16+
} from './types.gen'
17+
18+
export const unmarshalFileSystem = (data: unknown): FileSystem => {
19+
if (!isJSONObject(data)) {
20+
throw new TypeError(
21+
`Unmarshalling the type 'FileSystem' failed as data isn't a dictionary.`,
22+
)
23+
}
24+
25+
return {
26+
createdAt: unmarshalDate(data.created_at),
27+
id: data.id,
28+
name: data.name,
29+
numberOfAttachments: data.number_of_attachments,
30+
organizationId: data.organization_id,
31+
projectId: data.project_id,
32+
region: data.region,
33+
size: data.size,
34+
status: data.status,
35+
tags: data.tags,
36+
updatedAt: unmarshalDate(data.updated_at),
37+
} as FileSystem
38+
}
39+
40+
const unmarshalAttachment = (data: unknown): Attachment => {
41+
if (!isJSONObject(data)) {
42+
throw new TypeError(
43+
`Unmarshalling the type 'Attachment' failed as data isn't a dictionary.`,
44+
)
45+
}
46+
47+
return {
48+
filesystemId: data.filesystem_id,
49+
id: data.id,
50+
resourceId: data.resource_id,
51+
resourceType: data.resource_type,
52+
} as Attachment
53+
}
54+
55+
export const unmarshalListAttachmentsResponse = (
56+
data: unknown,
57+
): ListAttachmentsResponse => {
58+
if (!isJSONObject(data)) {
59+
throw new TypeError(
60+
`Unmarshalling the type 'ListAttachmentsResponse' failed as data isn't a dictionary.`,
61+
)
62+
}
63+
64+
return {
65+
attachments: unmarshalArrayOfObject(data.attachments, unmarshalAttachment),
66+
totalCount: data.total_count,
67+
} as ListAttachmentsResponse
68+
}
69+
70+
export const unmarshalListFileSystemsResponse = (
71+
data: unknown,
72+
): ListFileSystemsResponse => {
73+
if (!isJSONObject(data)) {
74+
throw new TypeError(
75+
`Unmarshalling the type 'ListFileSystemsResponse' failed as data isn't a dictionary.`,
76+
)
77+
}
78+
79+
return {
80+
filesystems: unmarshalArrayOfObject(data.filesystems, unmarshalFileSystem),
81+
totalCount: data.total_count,
82+
} as ListFileSystemsResponse
83+
}
84+
85+
export const marshalCreateFileSystemRequest = (
86+
request: CreateFileSystemRequest,
87+
defaults: DefaultValues,
88+
): Record<string, unknown> => ({
89+
name: request.name,
90+
project_id: request.projectId ?? defaults.defaultProjectId,
91+
size: request.size,
92+
tags: request.tags,
93+
})
94+
95+
export const marshalUpdateFileSystemRequest = (
96+
request: UpdateFileSystemRequest,
97+
defaults: DefaultValues,
98+
): Record<string, unknown> => ({
99+
name: request.name,
100+
size: request.size,
101+
tags: request.tags,
102+
})

0 commit comments

Comments
 (0)