Skip to main content

nominal_api/conjure/clients/upload/api/
upload_service.rs

1use conjure_http::endpoint;
2/// The Upload Service manages file uploads to object storage.
3#[conjure_http::conjure_client(name = "UploadService")]
4pub trait UploadService<
5    #[request_writer]
6    O,
7    #[response_body]
8    I: Iterator<
9            Item = Result<conjure_http::private::Bytes, conjure_http::private::Error>,
10        >,
11> {
12    /// Initiates a multipart upload to object storage.
13    /// Returns an uploadId that should be used with listParts, signPart, and completeMultipartUpload.
14    #[endpoint(
15        method = POST,
16        path = "/upload/v1/multipart-upload",
17        name = "initiateMultipartUpload",
18        accept = conjure_http::client::StdResponseDeserializer
19    )]
20    fn initiate_multipart_upload(
21        &self,
22        #[auth]
23        auth_: &conjure_object::BearerToken,
24        #[body(serializer = conjure_http::client::StdRequestSerializer)]
25        upload_request: &super::super::super::super::objects::ingest::api::InitiateMultipartUploadRequest,
26    ) -> Result<
27        super::super::super::super::objects::ingest::api::InitiateMultipartUploadResponse,
28        conjure_http::private::Error,
29    >;
30    /// Lists the parts that have been uploaded for a given uploadId.
31    #[endpoint(
32        method = GET,
33        path = "/upload/v1/multipart-upload/{uploadId}",
34        name = "listParts",
35        accept = conjure_http::client::conjure::CollectionResponseDeserializer
36    )]
37    fn list_parts(
38        &self,
39        #[auth]
40        auth_: &conjure_object::BearerToken,
41        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
42        upload_id: &str,
43        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
44        key: &str,
45    ) -> Result<
46        Vec<super::super::super::super::objects::ingest::api::PartWithSize>,
47        conjure_http::private::Error,
48    >;
49    /// Signs an upload request for a single part.
50    /// Returns a URL that will execute the upload without further authentication.
51    #[endpoint(
52        method = POST,
53        path = "/upload/v1/multipart-upload/{uploadId}",
54        name = "signPart",
55        accept = conjure_http::client::StdResponseDeserializer
56    )]
57    fn sign_part(
58        &self,
59        #[auth]
60        auth_: &conjure_object::BearerToken,
61        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
62        upload_id: &str,
63        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
64        key: &str,
65        #[query(
66            name = "partNumber",
67            encoder = conjure_http::client::conjure::PlainEncoder
68        )]
69        part_number: i32,
70    ) -> Result<
71        super::super::super::super::objects::ingest::api::SignPartResponse,
72        conjure_http::private::Error,
73    >;
74    /// Completes a multipart upload to object storage.
75    /// This should be called after all parts have been uploaded.
76    /// Will throw EmptyMultipartUpload if there are 0 parts.
77    #[endpoint(
78        method = POST,
79        path = "/upload/v1/multipart-upload/{uploadId}/complete",
80        name = "completeMultipartUpload",
81        accept = conjure_http::client::StdResponseDeserializer
82    )]
83    fn complete_multipart_upload(
84        &self,
85        #[auth]
86        auth_: &conjure_object::BearerToken,
87        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
88        upload_id: &str,
89        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
90        key: &str,
91        #[body(serializer = conjure_http::client::StdRequestSerializer)]
92        parts: &[super::super::super::super::objects::ingest::api::Part],
93    ) -> Result<
94        super::super::super::super::objects::ingest::api::CompleteMultipartUploadResponse,
95        conjure_http::private::Error,
96    >;
97    /// Aborts a multipart upload to S3.
98    /// Frees storage used by previously uploaded parts and prevents further uploads to the same uploadId.
99    #[endpoint(
100        method = POST,
101        path = "/upload/v1/multipart-upload/{uploadId}/abort",
102        name = "abortMultipartUpload",
103        accept = conjure_http::client::conjure::EmptyResponseDeserializer
104    )]
105    fn abort_multipart_upload(
106        &self,
107        #[auth]
108        auth_: &conjure_object::BearerToken,
109        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
110        upload_id: &str,
111        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
112        key: &str,
113    ) -> Result<(), conjure_http::private::Error>;
114    /// Returns a short-lived signed GET URL for an object already in the uploads bucket.
115    /// Use this to hand a freshly-uploaded object's path to an external service (e.g. Dagger)
116    /// without giving that service any Scout credentials. The caller must be authorized to
117    /// read the workspace that owns the path (encoded as the first segment of the object key).
118    #[endpoint(
119        method = POST,
120        path = "/upload/v1/sign-download",
121        name = "signDownload",
122        accept = conjure_http::client::StdResponseDeserializer
123    )]
124    fn sign_download(
125        &self,
126        #[auth]
127        auth_: &conjure_object::BearerToken,
128        #[body(serializer = conjure_http::client::StdRequestSerializer)]
129        request: &super::super::super::super::objects::ingest::api::SignDownloadRequest,
130    ) -> Result<
131        super::super::super::super::objects::ingest::api::SignDownloadResponse,
132        conjure_http::private::Error,
133    >;
134    /// Uploads a file to S3. Intended for smaller files.
135    #[endpoint(
136        method = POST,
137        path = "/upload/v1/upload-file",
138        name = "uploadFile",
139        accept = conjure_http::client::StdResponseDeserializer
140    )]
141    fn upload_file(
142        &self,
143        #[auth]
144        auth_: &conjure_object::BearerToken,
145        #[query(
146            name = "fileName",
147            encoder = conjure_http::client::conjure::PlainEncoder
148        )]
149        file_name: &str,
150        #[query(
151            name = "sizeBytes",
152            encoder = conjure_http::client::conjure::PlainSeqEncoder
153        )]
154        size_bytes: Option<conjure_object::SafeLong>,
155        #[query(
156            name = "workspace",
157            encoder = conjure_http::client::conjure::PlainSeqEncoder
158        )]
159        workspace: Option<&super::super::super::super::objects::api::rids::WorkspaceRid>,
160        #[body(serializer = conjure_http::client::conjure::BinaryRequestSerializer)]
161        body: impl conjure_http::client::WriteBody<O>,
162    ) -> Result<
163        super::super::super::super::objects::api::S3Path,
164        conjure_http::private::Error,
165    >;
166}
167/// The Upload Service manages file uploads to object storage.
168#[conjure_http::conjure_client(name = "UploadService")]
169pub trait AsyncUploadService<
170    #[request_writer]
171    O,
172    #[response_body]
173    I: conjure_http::private::Stream<
174            Item = Result<conjure_http::private::Bytes, conjure_http::private::Error>,
175        >,
176> {
177    /// Initiates a multipart upload to object storage.
178    /// Returns an uploadId that should be used with listParts, signPart, and completeMultipartUpload.
179    #[endpoint(
180        method = POST,
181        path = "/upload/v1/multipart-upload",
182        name = "initiateMultipartUpload",
183        accept = conjure_http::client::StdResponseDeserializer
184    )]
185    async fn initiate_multipart_upload(
186        &self,
187        #[auth]
188        auth_: &conjure_object::BearerToken,
189        #[body(serializer = conjure_http::client::StdRequestSerializer)]
190        upload_request: &super::super::super::super::objects::ingest::api::InitiateMultipartUploadRequest,
191    ) -> Result<
192        super::super::super::super::objects::ingest::api::InitiateMultipartUploadResponse,
193        conjure_http::private::Error,
194    >;
195    /// Lists the parts that have been uploaded for a given uploadId.
196    #[endpoint(
197        method = GET,
198        path = "/upload/v1/multipart-upload/{uploadId}",
199        name = "listParts",
200        accept = conjure_http::client::conjure::CollectionResponseDeserializer
201    )]
202    async fn list_parts(
203        &self,
204        #[auth]
205        auth_: &conjure_object::BearerToken,
206        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
207        upload_id: &str,
208        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
209        key: &str,
210    ) -> Result<
211        Vec<super::super::super::super::objects::ingest::api::PartWithSize>,
212        conjure_http::private::Error,
213    >;
214    /// Signs an upload request for a single part.
215    /// Returns a URL that will execute the upload without further authentication.
216    #[endpoint(
217        method = POST,
218        path = "/upload/v1/multipart-upload/{uploadId}",
219        name = "signPart",
220        accept = conjure_http::client::StdResponseDeserializer
221    )]
222    async fn sign_part(
223        &self,
224        #[auth]
225        auth_: &conjure_object::BearerToken,
226        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
227        upload_id: &str,
228        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
229        key: &str,
230        #[query(
231            name = "partNumber",
232            encoder = conjure_http::client::conjure::PlainEncoder
233        )]
234        part_number: i32,
235    ) -> Result<
236        super::super::super::super::objects::ingest::api::SignPartResponse,
237        conjure_http::private::Error,
238    >;
239    /// Completes a multipart upload to object storage.
240    /// This should be called after all parts have been uploaded.
241    /// Will throw EmptyMultipartUpload if there are 0 parts.
242    #[endpoint(
243        method = POST,
244        path = "/upload/v1/multipart-upload/{uploadId}/complete",
245        name = "completeMultipartUpload",
246        accept = conjure_http::client::StdResponseDeserializer
247    )]
248    async fn complete_multipart_upload(
249        &self,
250        #[auth]
251        auth_: &conjure_object::BearerToken,
252        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
253        upload_id: &str,
254        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
255        key: &str,
256        #[body(serializer = conjure_http::client::StdRequestSerializer)]
257        parts: &[super::super::super::super::objects::ingest::api::Part],
258    ) -> Result<
259        super::super::super::super::objects::ingest::api::CompleteMultipartUploadResponse,
260        conjure_http::private::Error,
261    >;
262    /// Aborts a multipart upload to S3.
263    /// Frees storage used by previously uploaded parts and prevents further uploads to the same uploadId.
264    #[endpoint(
265        method = POST,
266        path = "/upload/v1/multipart-upload/{uploadId}/abort",
267        name = "abortMultipartUpload",
268        accept = conjure_http::client::conjure::EmptyResponseDeserializer
269    )]
270    async fn abort_multipart_upload(
271        &self,
272        #[auth]
273        auth_: &conjure_object::BearerToken,
274        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
275        upload_id: &str,
276        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
277        key: &str,
278    ) -> Result<(), conjure_http::private::Error>;
279    /// Returns a short-lived signed GET URL for an object already in the uploads bucket.
280    /// Use this to hand a freshly-uploaded object's path to an external service (e.g. Dagger)
281    /// without giving that service any Scout credentials. The caller must be authorized to
282    /// read the workspace that owns the path (encoded as the first segment of the object key).
283    #[endpoint(
284        method = POST,
285        path = "/upload/v1/sign-download",
286        name = "signDownload",
287        accept = conjure_http::client::StdResponseDeserializer
288    )]
289    async fn sign_download(
290        &self,
291        #[auth]
292        auth_: &conjure_object::BearerToken,
293        #[body(serializer = conjure_http::client::StdRequestSerializer)]
294        request: &super::super::super::super::objects::ingest::api::SignDownloadRequest,
295    ) -> Result<
296        super::super::super::super::objects::ingest::api::SignDownloadResponse,
297        conjure_http::private::Error,
298    >;
299    /// Uploads a file to S3. Intended for smaller files.
300    #[endpoint(
301        method = POST,
302        path = "/upload/v1/upload-file",
303        name = "uploadFile",
304        accept = conjure_http::client::StdResponseDeserializer
305    )]
306    async fn upload_file(
307        &self,
308        #[auth]
309        auth_: &conjure_object::BearerToken,
310        #[query(
311            name = "fileName",
312            encoder = conjure_http::client::conjure::PlainEncoder
313        )]
314        file_name: &str,
315        #[query(
316            name = "sizeBytes",
317            encoder = conjure_http::client::conjure::PlainSeqEncoder
318        )]
319        size_bytes: Option<conjure_object::SafeLong>,
320        #[query(
321            name = "workspace",
322            encoder = conjure_http::client::conjure::PlainSeqEncoder
323        )]
324        workspace: Option<&super::super::super::super::objects::api::rids::WorkspaceRid>,
325        #[body(serializer = conjure_http::client::conjure::BinaryRequestSerializer)]
326        body: impl conjure_http::client::AsyncWriteBody<O> + Sync + Send,
327    ) -> Result<
328        super::super::super::super::objects::api::S3Path,
329        conjure_http::private::Error,
330    >;
331}
332/// The Upload Service manages file uploads to object storage.
333#[conjure_http::conjure_client(name = "UploadService", local)]
334pub trait LocalAsyncUploadService<
335    #[request_writer]
336    O,
337    #[response_body]
338    I: conjure_http::private::Stream<
339            Item = Result<conjure_http::private::Bytes, conjure_http::private::Error>,
340        >,
341> {
342    /// Initiates a multipart upload to object storage.
343    /// Returns an uploadId that should be used with listParts, signPart, and completeMultipartUpload.
344    #[endpoint(
345        method = POST,
346        path = "/upload/v1/multipart-upload",
347        name = "initiateMultipartUpload",
348        accept = conjure_http::client::StdResponseDeserializer
349    )]
350    async fn initiate_multipart_upload(
351        &self,
352        #[auth]
353        auth_: &conjure_object::BearerToken,
354        #[body(serializer = conjure_http::client::StdRequestSerializer)]
355        upload_request: &super::super::super::super::objects::ingest::api::InitiateMultipartUploadRequest,
356    ) -> Result<
357        super::super::super::super::objects::ingest::api::InitiateMultipartUploadResponse,
358        conjure_http::private::Error,
359    >;
360    /// Lists the parts that have been uploaded for a given uploadId.
361    #[endpoint(
362        method = GET,
363        path = "/upload/v1/multipart-upload/{uploadId}",
364        name = "listParts",
365        accept = conjure_http::client::conjure::CollectionResponseDeserializer
366    )]
367    async fn list_parts(
368        &self,
369        #[auth]
370        auth_: &conjure_object::BearerToken,
371        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
372        upload_id: &str,
373        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
374        key: &str,
375    ) -> Result<
376        Vec<super::super::super::super::objects::ingest::api::PartWithSize>,
377        conjure_http::private::Error,
378    >;
379    /// Signs an upload request for a single part.
380    /// Returns a URL that will execute the upload without further authentication.
381    #[endpoint(
382        method = POST,
383        path = "/upload/v1/multipart-upload/{uploadId}",
384        name = "signPart",
385        accept = conjure_http::client::StdResponseDeserializer
386    )]
387    async fn sign_part(
388        &self,
389        #[auth]
390        auth_: &conjure_object::BearerToken,
391        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
392        upload_id: &str,
393        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
394        key: &str,
395        #[query(
396            name = "partNumber",
397            encoder = conjure_http::client::conjure::PlainEncoder
398        )]
399        part_number: i32,
400    ) -> Result<
401        super::super::super::super::objects::ingest::api::SignPartResponse,
402        conjure_http::private::Error,
403    >;
404    /// Completes a multipart upload to object storage.
405    /// This should be called after all parts have been uploaded.
406    /// Will throw EmptyMultipartUpload if there are 0 parts.
407    #[endpoint(
408        method = POST,
409        path = "/upload/v1/multipart-upload/{uploadId}/complete",
410        name = "completeMultipartUpload",
411        accept = conjure_http::client::StdResponseDeserializer
412    )]
413    async fn complete_multipart_upload(
414        &self,
415        #[auth]
416        auth_: &conjure_object::BearerToken,
417        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
418        upload_id: &str,
419        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
420        key: &str,
421        #[body(serializer = conjure_http::client::StdRequestSerializer)]
422        parts: &[super::super::super::super::objects::ingest::api::Part],
423    ) -> Result<
424        super::super::super::super::objects::ingest::api::CompleteMultipartUploadResponse,
425        conjure_http::private::Error,
426    >;
427    /// Aborts a multipart upload to S3.
428    /// Frees storage used by previously uploaded parts and prevents further uploads to the same uploadId.
429    #[endpoint(
430        method = POST,
431        path = "/upload/v1/multipart-upload/{uploadId}/abort",
432        name = "abortMultipartUpload",
433        accept = conjure_http::client::conjure::EmptyResponseDeserializer
434    )]
435    async fn abort_multipart_upload(
436        &self,
437        #[auth]
438        auth_: &conjure_object::BearerToken,
439        #[path(name = "uploadId", encoder = conjure_http::client::conjure::PlainEncoder)]
440        upload_id: &str,
441        #[query(name = "key", encoder = conjure_http::client::conjure::PlainEncoder)]
442        key: &str,
443    ) -> Result<(), conjure_http::private::Error>;
444    /// Returns a short-lived signed GET URL for an object already in the uploads bucket.
445    /// Use this to hand a freshly-uploaded object's path to an external service (e.g. Dagger)
446    /// without giving that service any Scout credentials. The caller must be authorized to
447    /// read the workspace that owns the path (encoded as the first segment of the object key).
448    #[endpoint(
449        method = POST,
450        path = "/upload/v1/sign-download",
451        name = "signDownload",
452        accept = conjure_http::client::StdResponseDeserializer
453    )]
454    async fn sign_download(
455        &self,
456        #[auth]
457        auth_: &conjure_object::BearerToken,
458        #[body(serializer = conjure_http::client::StdRequestSerializer)]
459        request: &super::super::super::super::objects::ingest::api::SignDownloadRequest,
460    ) -> Result<
461        super::super::super::super::objects::ingest::api::SignDownloadResponse,
462        conjure_http::private::Error,
463    >;
464    /// Uploads a file to S3. Intended for smaller files.
465    #[endpoint(
466        method = POST,
467        path = "/upload/v1/upload-file",
468        name = "uploadFile",
469        accept = conjure_http::client::StdResponseDeserializer
470    )]
471    async fn upload_file(
472        &self,
473        #[auth]
474        auth_: &conjure_object::BearerToken,
475        #[query(
476            name = "fileName",
477            encoder = conjure_http::client::conjure::PlainEncoder
478        )]
479        file_name: &str,
480        #[query(
481            name = "sizeBytes",
482            encoder = conjure_http::client::conjure::PlainSeqEncoder
483        )]
484        size_bytes: Option<conjure_object::SafeLong>,
485        #[query(
486            name = "workspace",
487            encoder = conjure_http::client::conjure::PlainSeqEncoder
488        )]
489        workspace: Option<&super::super::super::super::objects::api::rids::WorkspaceRid>,
490        #[body(serializer = conjure_http::client::conjure::BinaryRequestSerializer)]
491        body: impl conjure_http::client::LocalAsyncWriteBody<O>,
492    ) -> Result<
493        super::super::super::super::objects::api::S3Path,
494        conjure_http::private::Error,
495    >;
496}