dagger_sdk/
gen.rs

1#![allow(clippy::needless_lifetimes)]
2
3use crate::core::cli_session::DaggerSessionProc;
4use crate::core::graphql_client::DynGraphQLClient;
5use crate::errors::DaggerError;
6use crate::id::IntoID;
7use crate::querybuilder::Selection;
8use derive_builder::Builder;
9use serde::{Deserialize, Serialize};
10use std::sync::Arc;
11
12#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
13pub struct AddressId(pub String);
14impl From<&str> for AddressId {
15    fn from(value: &str) -> Self {
16        Self(value.to_string())
17    }
18}
19impl From<String> for AddressId {
20    fn from(value: String) -> Self {
21        Self(value)
22    }
23}
24impl IntoID<AddressId> for Address {
25    fn into_id(
26        self,
27    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<AddressId, DaggerError>> + Send>>
28    {
29        Box::pin(async move { self.id().await })
30    }
31}
32impl IntoID<AddressId> for AddressId {
33    fn into_id(
34        self,
35    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<AddressId, DaggerError>> + Send>>
36    {
37        Box::pin(async move { Ok::<AddressId, DaggerError>(self) })
38    }
39}
40impl AddressId {
41    fn quote(&self) -> String {
42        format!("\"{}\"", self.0.clone())
43    }
44}
45#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
46pub struct BindingId(pub String);
47impl From<&str> for BindingId {
48    fn from(value: &str) -> Self {
49        Self(value.to_string())
50    }
51}
52impl From<String> for BindingId {
53    fn from(value: String) -> Self {
54        Self(value)
55    }
56}
57impl IntoID<BindingId> for Binding {
58    fn into_id(
59        self,
60    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<BindingId, DaggerError>> + Send>>
61    {
62        Box::pin(async move { self.id().await })
63    }
64}
65impl IntoID<BindingId> for BindingId {
66    fn into_id(
67        self,
68    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<BindingId, DaggerError>> + Send>>
69    {
70        Box::pin(async move { Ok::<BindingId, DaggerError>(self) })
71    }
72}
73impl BindingId {
74    fn quote(&self) -> String {
75        format!("\"{}\"", self.0.clone())
76    }
77}
78#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
79pub struct CacheVolumeId(pub String);
80impl From<&str> for CacheVolumeId {
81    fn from(value: &str) -> Self {
82        Self(value.to_string())
83    }
84}
85impl From<String> for CacheVolumeId {
86    fn from(value: String) -> Self {
87        Self(value)
88    }
89}
90impl IntoID<CacheVolumeId> for CacheVolume {
91    fn into_id(
92        self,
93    ) -> std::pin::Pin<
94        Box<dyn core::future::Future<Output = Result<CacheVolumeId, DaggerError>> + Send>,
95    > {
96        Box::pin(async move { self.id().await })
97    }
98}
99impl IntoID<CacheVolumeId> for CacheVolumeId {
100    fn into_id(
101        self,
102    ) -> std::pin::Pin<
103        Box<dyn core::future::Future<Output = Result<CacheVolumeId, DaggerError>> + Send>,
104    > {
105        Box::pin(async move { Ok::<CacheVolumeId, DaggerError>(self) })
106    }
107}
108impl CacheVolumeId {
109    fn quote(&self) -> String {
110        format!("\"{}\"", self.0.clone())
111    }
112}
113#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
114pub struct ChangesetId(pub String);
115impl From<&str> for ChangesetId {
116    fn from(value: &str) -> Self {
117        Self(value.to_string())
118    }
119}
120impl From<String> for ChangesetId {
121    fn from(value: String) -> Self {
122        Self(value)
123    }
124}
125impl IntoID<ChangesetId> for Changeset {
126    fn into_id(
127        self,
128    ) -> std::pin::Pin<
129        Box<dyn core::future::Future<Output = Result<ChangesetId, DaggerError>> + Send>,
130    > {
131        Box::pin(async move { self.id().await })
132    }
133}
134impl IntoID<ChangesetId> for ChangesetId {
135    fn into_id(
136        self,
137    ) -> std::pin::Pin<
138        Box<dyn core::future::Future<Output = Result<ChangesetId, DaggerError>> + Send>,
139    > {
140        Box::pin(async move { Ok::<ChangesetId, DaggerError>(self) })
141    }
142}
143impl ChangesetId {
144    fn quote(&self) -> String {
145        format!("\"{}\"", self.0.clone())
146    }
147}
148#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
149pub struct CloudId(pub String);
150impl From<&str> for CloudId {
151    fn from(value: &str) -> Self {
152        Self(value.to_string())
153    }
154}
155impl From<String> for CloudId {
156    fn from(value: String) -> Self {
157        Self(value)
158    }
159}
160impl IntoID<CloudId> for Cloud {
161    fn into_id(
162        self,
163    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<CloudId, DaggerError>> + Send>>
164    {
165        Box::pin(async move { self.id().await })
166    }
167}
168impl IntoID<CloudId> for CloudId {
169    fn into_id(
170        self,
171    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<CloudId, DaggerError>> + Send>>
172    {
173        Box::pin(async move { Ok::<CloudId, DaggerError>(self) })
174    }
175}
176impl CloudId {
177    fn quote(&self) -> String {
178        format!("\"{}\"", self.0.clone())
179    }
180}
181#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
182pub struct ContainerId(pub String);
183impl From<&str> for ContainerId {
184    fn from(value: &str) -> Self {
185        Self(value.to_string())
186    }
187}
188impl From<String> for ContainerId {
189    fn from(value: String) -> Self {
190        Self(value)
191    }
192}
193impl IntoID<ContainerId> for Container {
194    fn into_id(
195        self,
196    ) -> std::pin::Pin<
197        Box<dyn core::future::Future<Output = Result<ContainerId, DaggerError>> + Send>,
198    > {
199        Box::pin(async move { self.id().await })
200    }
201}
202impl IntoID<ContainerId> for ContainerId {
203    fn into_id(
204        self,
205    ) -> std::pin::Pin<
206        Box<dyn core::future::Future<Output = Result<ContainerId, DaggerError>> + Send>,
207    > {
208        Box::pin(async move { Ok::<ContainerId, DaggerError>(self) })
209    }
210}
211impl ContainerId {
212    fn quote(&self) -> String {
213        format!("\"{}\"", self.0.clone())
214    }
215}
216#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
217pub struct CurrentModuleId(pub String);
218impl From<&str> for CurrentModuleId {
219    fn from(value: &str) -> Self {
220        Self(value.to_string())
221    }
222}
223impl From<String> for CurrentModuleId {
224    fn from(value: String) -> Self {
225        Self(value)
226    }
227}
228impl IntoID<CurrentModuleId> for CurrentModule {
229    fn into_id(
230        self,
231    ) -> std::pin::Pin<
232        Box<dyn core::future::Future<Output = Result<CurrentModuleId, DaggerError>> + Send>,
233    > {
234        Box::pin(async move { self.id().await })
235    }
236}
237impl IntoID<CurrentModuleId> for CurrentModuleId {
238    fn into_id(
239        self,
240    ) -> std::pin::Pin<
241        Box<dyn core::future::Future<Output = Result<CurrentModuleId, DaggerError>> + Send>,
242    > {
243        Box::pin(async move { Ok::<CurrentModuleId, DaggerError>(self) })
244    }
245}
246impl CurrentModuleId {
247    fn quote(&self) -> String {
248        format!("\"{}\"", self.0.clone())
249    }
250}
251#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
252pub struct DirectoryId(pub String);
253impl From<&str> for DirectoryId {
254    fn from(value: &str) -> Self {
255        Self(value.to_string())
256    }
257}
258impl From<String> for DirectoryId {
259    fn from(value: String) -> Self {
260        Self(value)
261    }
262}
263impl IntoID<DirectoryId> for Directory {
264    fn into_id(
265        self,
266    ) -> std::pin::Pin<
267        Box<dyn core::future::Future<Output = Result<DirectoryId, DaggerError>> + Send>,
268    > {
269        Box::pin(async move { self.id().await })
270    }
271}
272impl IntoID<DirectoryId> for DirectoryId {
273    fn into_id(
274        self,
275    ) -> std::pin::Pin<
276        Box<dyn core::future::Future<Output = Result<DirectoryId, DaggerError>> + Send>,
277    > {
278        Box::pin(async move { Ok::<DirectoryId, DaggerError>(self) })
279    }
280}
281impl DirectoryId {
282    fn quote(&self) -> String {
283        format!("\"{}\"", self.0.clone())
284    }
285}
286#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
287pub struct EngineCacheEntryId(pub String);
288impl From<&str> for EngineCacheEntryId {
289    fn from(value: &str) -> Self {
290        Self(value.to_string())
291    }
292}
293impl From<String> for EngineCacheEntryId {
294    fn from(value: String) -> Self {
295        Self(value)
296    }
297}
298impl IntoID<EngineCacheEntryId> for EngineCacheEntry {
299    fn into_id(
300        self,
301    ) -> std::pin::Pin<
302        Box<dyn core::future::Future<Output = Result<EngineCacheEntryId, DaggerError>> + Send>,
303    > {
304        Box::pin(async move { self.id().await })
305    }
306}
307impl IntoID<EngineCacheEntryId> for EngineCacheEntryId {
308    fn into_id(
309        self,
310    ) -> std::pin::Pin<
311        Box<dyn core::future::Future<Output = Result<EngineCacheEntryId, DaggerError>> + Send>,
312    > {
313        Box::pin(async move { Ok::<EngineCacheEntryId, DaggerError>(self) })
314    }
315}
316impl EngineCacheEntryId {
317    fn quote(&self) -> String {
318        format!("\"{}\"", self.0.clone())
319    }
320}
321#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
322pub struct EngineCacheEntrySetId(pub String);
323impl From<&str> for EngineCacheEntrySetId {
324    fn from(value: &str) -> Self {
325        Self(value.to_string())
326    }
327}
328impl From<String> for EngineCacheEntrySetId {
329    fn from(value: String) -> Self {
330        Self(value)
331    }
332}
333impl IntoID<EngineCacheEntrySetId> for EngineCacheEntrySet {
334    fn into_id(
335        self,
336    ) -> std::pin::Pin<
337        Box<dyn core::future::Future<Output = Result<EngineCacheEntrySetId, DaggerError>> + Send>,
338    > {
339        Box::pin(async move { self.id().await })
340    }
341}
342impl IntoID<EngineCacheEntrySetId> for EngineCacheEntrySetId {
343    fn into_id(
344        self,
345    ) -> std::pin::Pin<
346        Box<dyn core::future::Future<Output = Result<EngineCacheEntrySetId, DaggerError>> + Send>,
347    > {
348        Box::pin(async move { Ok::<EngineCacheEntrySetId, DaggerError>(self) })
349    }
350}
351impl EngineCacheEntrySetId {
352    fn quote(&self) -> String {
353        format!("\"{}\"", self.0.clone())
354    }
355}
356#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
357pub struct EngineCacheId(pub String);
358impl From<&str> for EngineCacheId {
359    fn from(value: &str) -> Self {
360        Self(value.to_string())
361    }
362}
363impl From<String> for EngineCacheId {
364    fn from(value: String) -> Self {
365        Self(value)
366    }
367}
368impl IntoID<EngineCacheId> for EngineCache {
369    fn into_id(
370        self,
371    ) -> std::pin::Pin<
372        Box<dyn core::future::Future<Output = Result<EngineCacheId, DaggerError>> + Send>,
373    > {
374        Box::pin(async move { self.id().await })
375    }
376}
377impl IntoID<EngineCacheId> for EngineCacheId {
378    fn into_id(
379        self,
380    ) -> std::pin::Pin<
381        Box<dyn core::future::Future<Output = Result<EngineCacheId, DaggerError>> + Send>,
382    > {
383        Box::pin(async move { Ok::<EngineCacheId, DaggerError>(self) })
384    }
385}
386impl EngineCacheId {
387    fn quote(&self) -> String {
388        format!("\"{}\"", self.0.clone())
389    }
390}
391#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
392pub struct EngineId(pub String);
393impl From<&str> for EngineId {
394    fn from(value: &str) -> Self {
395        Self(value.to_string())
396    }
397}
398impl From<String> for EngineId {
399    fn from(value: String) -> Self {
400        Self(value)
401    }
402}
403impl IntoID<EngineId> for Engine {
404    fn into_id(
405        self,
406    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EngineId, DaggerError>> + Send>>
407    {
408        Box::pin(async move { self.id().await })
409    }
410}
411impl IntoID<EngineId> for EngineId {
412    fn into_id(
413        self,
414    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EngineId, DaggerError>> + Send>>
415    {
416        Box::pin(async move { Ok::<EngineId, DaggerError>(self) })
417    }
418}
419impl EngineId {
420    fn quote(&self) -> String {
421        format!("\"{}\"", self.0.clone())
422    }
423}
424#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
425pub struct EnumTypeDefId(pub String);
426impl From<&str> for EnumTypeDefId {
427    fn from(value: &str) -> Self {
428        Self(value.to_string())
429    }
430}
431impl From<String> for EnumTypeDefId {
432    fn from(value: String) -> Self {
433        Self(value)
434    }
435}
436impl IntoID<EnumTypeDefId> for EnumTypeDef {
437    fn into_id(
438        self,
439    ) -> std::pin::Pin<
440        Box<dyn core::future::Future<Output = Result<EnumTypeDefId, DaggerError>> + Send>,
441    > {
442        Box::pin(async move { self.id().await })
443    }
444}
445impl IntoID<EnumTypeDefId> for EnumTypeDefId {
446    fn into_id(
447        self,
448    ) -> std::pin::Pin<
449        Box<dyn core::future::Future<Output = Result<EnumTypeDefId, DaggerError>> + Send>,
450    > {
451        Box::pin(async move { Ok::<EnumTypeDefId, DaggerError>(self) })
452    }
453}
454impl EnumTypeDefId {
455    fn quote(&self) -> String {
456        format!("\"{}\"", self.0.clone())
457    }
458}
459#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
460pub struct EnumValueTypeDefId(pub String);
461impl From<&str> for EnumValueTypeDefId {
462    fn from(value: &str) -> Self {
463        Self(value.to_string())
464    }
465}
466impl From<String> for EnumValueTypeDefId {
467    fn from(value: String) -> Self {
468        Self(value)
469    }
470}
471impl IntoID<EnumValueTypeDefId> for EnumValueTypeDef {
472    fn into_id(
473        self,
474    ) -> std::pin::Pin<
475        Box<dyn core::future::Future<Output = Result<EnumValueTypeDefId, DaggerError>> + Send>,
476    > {
477        Box::pin(async move { self.id().await })
478    }
479}
480impl IntoID<EnumValueTypeDefId> for EnumValueTypeDefId {
481    fn into_id(
482        self,
483    ) -> std::pin::Pin<
484        Box<dyn core::future::Future<Output = Result<EnumValueTypeDefId, DaggerError>> + Send>,
485    > {
486        Box::pin(async move { Ok::<EnumValueTypeDefId, DaggerError>(self) })
487    }
488}
489impl EnumValueTypeDefId {
490    fn quote(&self) -> String {
491        format!("\"{}\"", self.0.clone())
492    }
493}
494#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
495pub struct EnvFileId(pub String);
496impl From<&str> for EnvFileId {
497    fn from(value: &str) -> Self {
498        Self(value.to_string())
499    }
500}
501impl From<String> for EnvFileId {
502    fn from(value: String) -> Self {
503        Self(value)
504    }
505}
506impl IntoID<EnvFileId> for EnvFile {
507    fn into_id(
508        self,
509    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EnvFileId, DaggerError>> + Send>>
510    {
511        Box::pin(async move { self.id().await })
512    }
513}
514impl IntoID<EnvFileId> for EnvFileId {
515    fn into_id(
516        self,
517    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EnvFileId, DaggerError>> + Send>>
518    {
519        Box::pin(async move { Ok::<EnvFileId, DaggerError>(self) })
520    }
521}
522impl EnvFileId {
523    fn quote(&self) -> String {
524        format!("\"{}\"", self.0.clone())
525    }
526}
527#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
528pub struct EnvId(pub String);
529impl From<&str> for EnvId {
530    fn from(value: &str) -> Self {
531        Self(value.to_string())
532    }
533}
534impl From<String> for EnvId {
535    fn from(value: String) -> Self {
536        Self(value)
537    }
538}
539impl IntoID<EnvId> for Env {
540    fn into_id(
541        self,
542    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EnvId, DaggerError>> + Send>>
543    {
544        Box::pin(async move { self.id().await })
545    }
546}
547impl IntoID<EnvId> for EnvId {
548    fn into_id(
549        self,
550    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<EnvId, DaggerError>> + Send>>
551    {
552        Box::pin(async move { Ok::<EnvId, DaggerError>(self) })
553    }
554}
555impl EnvId {
556    fn quote(&self) -> String {
557        format!("\"{}\"", self.0.clone())
558    }
559}
560#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
561pub struct EnvVariableId(pub String);
562impl From<&str> for EnvVariableId {
563    fn from(value: &str) -> Self {
564        Self(value.to_string())
565    }
566}
567impl From<String> for EnvVariableId {
568    fn from(value: String) -> Self {
569        Self(value)
570    }
571}
572impl IntoID<EnvVariableId> for EnvVariable {
573    fn into_id(
574        self,
575    ) -> std::pin::Pin<
576        Box<dyn core::future::Future<Output = Result<EnvVariableId, DaggerError>> + Send>,
577    > {
578        Box::pin(async move { self.id().await })
579    }
580}
581impl IntoID<EnvVariableId> for EnvVariableId {
582    fn into_id(
583        self,
584    ) -> std::pin::Pin<
585        Box<dyn core::future::Future<Output = Result<EnvVariableId, DaggerError>> + Send>,
586    > {
587        Box::pin(async move { Ok::<EnvVariableId, DaggerError>(self) })
588    }
589}
590impl EnvVariableId {
591    fn quote(&self) -> String {
592        format!("\"{}\"", self.0.clone())
593    }
594}
595#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
596pub struct ErrorId(pub String);
597impl From<&str> for ErrorId {
598    fn from(value: &str) -> Self {
599        Self(value.to_string())
600    }
601}
602impl From<String> for ErrorId {
603    fn from(value: String) -> Self {
604        Self(value)
605    }
606}
607impl IntoID<ErrorId> for Error {
608    fn into_id(
609        self,
610    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ErrorId, DaggerError>> + Send>>
611    {
612        Box::pin(async move { self.id().await })
613    }
614}
615impl IntoID<ErrorId> for ErrorId {
616    fn into_id(
617        self,
618    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ErrorId, DaggerError>> + Send>>
619    {
620        Box::pin(async move { Ok::<ErrorId, DaggerError>(self) })
621    }
622}
623impl ErrorId {
624    fn quote(&self) -> String {
625        format!("\"{}\"", self.0.clone())
626    }
627}
628#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
629pub struct ErrorValueId(pub String);
630impl From<&str> for ErrorValueId {
631    fn from(value: &str) -> Self {
632        Self(value.to_string())
633    }
634}
635impl From<String> for ErrorValueId {
636    fn from(value: String) -> Self {
637        Self(value)
638    }
639}
640impl IntoID<ErrorValueId> for ErrorValue {
641    fn into_id(
642        self,
643    ) -> std::pin::Pin<
644        Box<dyn core::future::Future<Output = Result<ErrorValueId, DaggerError>> + Send>,
645    > {
646        Box::pin(async move { self.id().await })
647    }
648}
649impl IntoID<ErrorValueId> for ErrorValueId {
650    fn into_id(
651        self,
652    ) -> std::pin::Pin<
653        Box<dyn core::future::Future<Output = Result<ErrorValueId, DaggerError>> + Send>,
654    > {
655        Box::pin(async move { Ok::<ErrorValueId, DaggerError>(self) })
656    }
657}
658impl ErrorValueId {
659    fn quote(&self) -> String {
660        format!("\"{}\"", self.0.clone())
661    }
662}
663#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
664pub struct FieldTypeDefId(pub String);
665impl From<&str> for FieldTypeDefId {
666    fn from(value: &str) -> Self {
667        Self(value.to_string())
668    }
669}
670impl From<String> for FieldTypeDefId {
671    fn from(value: String) -> Self {
672        Self(value)
673    }
674}
675impl IntoID<FieldTypeDefId> for FieldTypeDef {
676    fn into_id(
677        self,
678    ) -> std::pin::Pin<
679        Box<dyn core::future::Future<Output = Result<FieldTypeDefId, DaggerError>> + Send>,
680    > {
681        Box::pin(async move { self.id().await })
682    }
683}
684impl IntoID<FieldTypeDefId> for FieldTypeDefId {
685    fn into_id(
686        self,
687    ) -> std::pin::Pin<
688        Box<dyn core::future::Future<Output = Result<FieldTypeDefId, DaggerError>> + Send>,
689    > {
690        Box::pin(async move { Ok::<FieldTypeDefId, DaggerError>(self) })
691    }
692}
693impl FieldTypeDefId {
694    fn quote(&self) -> String {
695        format!("\"{}\"", self.0.clone())
696    }
697}
698#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
699pub struct FileId(pub String);
700impl From<&str> for FileId {
701    fn from(value: &str) -> Self {
702        Self(value.to_string())
703    }
704}
705impl From<String> for FileId {
706    fn from(value: String) -> Self {
707        Self(value)
708    }
709}
710impl IntoID<FileId> for File {
711    fn into_id(
712        self,
713    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<FileId, DaggerError>> + Send>>
714    {
715        Box::pin(async move { self.id().await })
716    }
717}
718impl IntoID<FileId> for FileId {
719    fn into_id(
720        self,
721    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<FileId, DaggerError>> + Send>>
722    {
723        Box::pin(async move { Ok::<FileId, DaggerError>(self) })
724    }
725}
726impl FileId {
727    fn quote(&self) -> String {
728        format!("\"{}\"", self.0.clone())
729    }
730}
731#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
732pub struct FunctionArgId(pub String);
733impl From<&str> for FunctionArgId {
734    fn from(value: &str) -> Self {
735        Self(value.to_string())
736    }
737}
738impl From<String> for FunctionArgId {
739    fn from(value: String) -> Self {
740        Self(value)
741    }
742}
743impl IntoID<FunctionArgId> for FunctionArg {
744    fn into_id(
745        self,
746    ) -> std::pin::Pin<
747        Box<dyn core::future::Future<Output = Result<FunctionArgId, DaggerError>> + Send>,
748    > {
749        Box::pin(async move { self.id().await })
750    }
751}
752impl IntoID<FunctionArgId> for FunctionArgId {
753    fn into_id(
754        self,
755    ) -> std::pin::Pin<
756        Box<dyn core::future::Future<Output = Result<FunctionArgId, DaggerError>> + Send>,
757    > {
758        Box::pin(async move { Ok::<FunctionArgId, DaggerError>(self) })
759    }
760}
761impl FunctionArgId {
762    fn quote(&self) -> String {
763        format!("\"{}\"", self.0.clone())
764    }
765}
766#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
767pub struct FunctionCallArgValueId(pub String);
768impl From<&str> for FunctionCallArgValueId {
769    fn from(value: &str) -> Self {
770        Self(value.to_string())
771    }
772}
773impl From<String> for FunctionCallArgValueId {
774    fn from(value: String) -> Self {
775        Self(value)
776    }
777}
778impl IntoID<FunctionCallArgValueId> for FunctionCallArgValue {
779    fn into_id(
780        self,
781    ) -> std::pin::Pin<
782        Box<dyn core::future::Future<Output = Result<FunctionCallArgValueId, DaggerError>> + Send>,
783    > {
784        Box::pin(async move { self.id().await })
785    }
786}
787impl IntoID<FunctionCallArgValueId> for FunctionCallArgValueId {
788    fn into_id(
789        self,
790    ) -> std::pin::Pin<
791        Box<dyn core::future::Future<Output = Result<FunctionCallArgValueId, DaggerError>> + Send>,
792    > {
793        Box::pin(async move { Ok::<FunctionCallArgValueId, DaggerError>(self) })
794    }
795}
796impl FunctionCallArgValueId {
797    fn quote(&self) -> String {
798        format!("\"{}\"", self.0.clone())
799    }
800}
801#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
802pub struct FunctionCallId(pub String);
803impl From<&str> for FunctionCallId {
804    fn from(value: &str) -> Self {
805        Self(value.to_string())
806    }
807}
808impl From<String> for FunctionCallId {
809    fn from(value: String) -> Self {
810        Self(value)
811    }
812}
813impl IntoID<FunctionCallId> for FunctionCall {
814    fn into_id(
815        self,
816    ) -> std::pin::Pin<
817        Box<dyn core::future::Future<Output = Result<FunctionCallId, DaggerError>> + Send>,
818    > {
819        Box::pin(async move { self.id().await })
820    }
821}
822impl IntoID<FunctionCallId> for FunctionCallId {
823    fn into_id(
824        self,
825    ) -> std::pin::Pin<
826        Box<dyn core::future::Future<Output = Result<FunctionCallId, DaggerError>> + Send>,
827    > {
828        Box::pin(async move { Ok::<FunctionCallId, DaggerError>(self) })
829    }
830}
831impl FunctionCallId {
832    fn quote(&self) -> String {
833        format!("\"{}\"", self.0.clone())
834    }
835}
836#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
837pub struct FunctionId(pub String);
838impl From<&str> for FunctionId {
839    fn from(value: &str) -> Self {
840        Self(value.to_string())
841    }
842}
843impl From<String> for FunctionId {
844    fn from(value: String) -> Self {
845        Self(value)
846    }
847}
848impl IntoID<FunctionId> for Function {
849    fn into_id(
850        self,
851    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<FunctionId, DaggerError>> + Send>>
852    {
853        Box::pin(async move { self.id().await })
854    }
855}
856impl IntoID<FunctionId> for FunctionId {
857    fn into_id(
858        self,
859    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<FunctionId, DaggerError>> + Send>>
860    {
861        Box::pin(async move { Ok::<FunctionId, DaggerError>(self) })
862    }
863}
864impl FunctionId {
865    fn quote(&self) -> String {
866        format!("\"{}\"", self.0.clone())
867    }
868}
869#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
870pub struct GeneratedCodeId(pub String);
871impl From<&str> for GeneratedCodeId {
872    fn from(value: &str) -> Self {
873        Self(value.to_string())
874    }
875}
876impl From<String> for GeneratedCodeId {
877    fn from(value: String) -> Self {
878        Self(value)
879    }
880}
881impl IntoID<GeneratedCodeId> for GeneratedCode {
882    fn into_id(
883        self,
884    ) -> std::pin::Pin<
885        Box<dyn core::future::Future<Output = Result<GeneratedCodeId, DaggerError>> + Send>,
886    > {
887        Box::pin(async move { self.id().await })
888    }
889}
890impl IntoID<GeneratedCodeId> for GeneratedCodeId {
891    fn into_id(
892        self,
893    ) -> std::pin::Pin<
894        Box<dyn core::future::Future<Output = Result<GeneratedCodeId, DaggerError>> + Send>,
895    > {
896        Box::pin(async move { Ok::<GeneratedCodeId, DaggerError>(self) })
897    }
898}
899impl GeneratedCodeId {
900    fn quote(&self) -> String {
901        format!("\"{}\"", self.0.clone())
902    }
903}
904#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
905pub struct GitRefId(pub String);
906impl From<&str> for GitRefId {
907    fn from(value: &str) -> Self {
908        Self(value.to_string())
909    }
910}
911impl From<String> for GitRefId {
912    fn from(value: String) -> Self {
913        Self(value)
914    }
915}
916impl IntoID<GitRefId> for GitRef {
917    fn into_id(
918        self,
919    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<GitRefId, DaggerError>> + Send>>
920    {
921        Box::pin(async move { self.id().await })
922    }
923}
924impl IntoID<GitRefId> for GitRefId {
925    fn into_id(
926        self,
927    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<GitRefId, DaggerError>> + Send>>
928    {
929        Box::pin(async move { Ok::<GitRefId, DaggerError>(self) })
930    }
931}
932impl GitRefId {
933    fn quote(&self) -> String {
934        format!("\"{}\"", self.0.clone())
935    }
936}
937#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
938pub struct GitRepositoryId(pub String);
939impl From<&str> for GitRepositoryId {
940    fn from(value: &str) -> Self {
941        Self(value.to_string())
942    }
943}
944impl From<String> for GitRepositoryId {
945    fn from(value: String) -> Self {
946        Self(value)
947    }
948}
949impl IntoID<GitRepositoryId> for GitRepository {
950    fn into_id(
951        self,
952    ) -> std::pin::Pin<
953        Box<dyn core::future::Future<Output = Result<GitRepositoryId, DaggerError>> + Send>,
954    > {
955        Box::pin(async move { self.id().await })
956    }
957}
958impl IntoID<GitRepositoryId> for GitRepositoryId {
959    fn into_id(
960        self,
961    ) -> std::pin::Pin<
962        Box<dyn core::future::Future<Output = Result<GitRepositoryId, DaggerError>> + Send>,
963    > {
964        Box::pin(async move { Ok::<GitRepositoryId, DaggerError>(self) })
965    }
966}
967impl GitRepositoryId {
968    fn quote(&self) -> String {
969        format!("\"{}\"", self.0.clone())
970    }
971}
972#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
973pub struct HostId(pub String);
974impl From<&str> for HostId {
975    fn from(value: &str) -> Self {
976        Self(value.to_string())
977    }
978}
979impl From<String> for HostId {
980    fn from(value: String) -> Self {
981        Self(value)
982    }
983}
984impl IntoID<HostId> for Host {
985    fn into_id(
986        self,
987    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<HostId, DaggerError>> + Send>>
988    {
989        Box::pin(async move { self.id().await })
990    }
991}
992impl IntoID<HostId> for HostId {
993    fn into_id(
994        self,
995    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<HostId, DaggerError>> + Send>>
996    {
997        Box::pin(async move { Ok::<HostId, DaggerError>(self) })
998    }
999}
1000impl HostId {
1001    fn quote(&self) -> String {
1002        format!("\"{}\"", self.0.clone())
1003    }
1004}
1005#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1006pub struct InputTypeDefId(pub String);
1007impl From<&str> for InputTypeDefId {
1008    fn from(value: &str) -> Self {
1009        Self(value.to_string())
1010    }
1011}
1012impl From<String> for InputTypeDefId {
1013    fn from(value: String) -> Self {
1014        Self(value)
1015    }
1016}
1017impl IntoID<InputTypeDefId> for InputTypeDef {
1018    fn into_id(
1019        self,
1020    ) -> std::pin::Pin<
1021        Box<dyn core::future::Future<Output = Result<InputTypeDefId, DaggerError>> + Send>,
1022    > {
1023        Box::pin(async move { self.id().await })
1024    }
1025}
1026impl IntoID<InputTypeDefId> for InputTypeDefId {
1027    fn into_id(
1028        self,
1029    ) -> std::pin::Pin<
1030        Box<dyn core::future::Future<Output = Result<InputTypeDefId, DaggerError>> + Send>,
1031    > {
1032        Box::pin(async move { Ok::<InputTypeDefId, DaggerError>(self) })
1033    }
1034}
1035impl InputTypeDefId {
1036    fn quote(&self) -> String {
1037        format!("\"{}\"", self.0.clone())
1038    }
1039}
1040#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1041pub struct InterfaceTypeDefId(pub String);
1042impl From<&str> for InterfaceTypeDefId {
1043    fn from(value: &str) -> Self {
1044        Self(value.to_string())
1045    }
1046}
1047impl From<String> for InterfaceTypeDefId {
1048    fn from(value: String) -> Self {
1049        Self(value)
1050    }
1051}
1052impl IntoID<InterfaceTypeDefId> for InterfaceTypeDef {
1053    fn into_id(
1054        self,
1055    ) -> std::pin::Pin<
1056        Box<dyn core::future::Future<Output = Result<InterfaceTypeDefId, DaggerError>> + Send>,
1057    > {
1058        Box::pin(async move { self.id().await })
1059    }
1060}
1061impl IntoID<InterfaceTypeDefId> for InterfaceTypeDefId {
1062    fn into_id(
1063        self,
1064    ) -> std::pin::Pin<
1065        Box<dyn core::future::Future<Output = Result<InterfaceTypeDefId, DaggerError>> + Send>,
1066    > {
1067        Box::pin(async move { Ok::<InterfaceTypeDefId, DaggerError>(self) })
1068    }
1069}
1070impl InterfaceTypeDefId {
1071    fn quote(&self) -> String {
1072        format!("\"{}\"", self.0.clone())
1073    }
1074}
1075#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1076pub struct Json(pub String);
1077impl From<&str> for Json {
1078    fn from(value: &str) -> Self {
1079        Self(value.to_string())
1080    }
1081}
1082impl From<String> for Json {
1083    fn from(value: String) -> Self {
1084        Self(value)
1085    }
1086}
1087impl Json {
1088    fn quote(&self) -> String {
1089        format!("\"{}\"", self.0.clone())
1090    }
1091}
1092#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1093pub struct JsonValueId(pub String);
1094impl From<&str> for JsonValueId {
1095    fn from(value: &str) -> Self {
1096        Self(value.to_string())
1097    }
1098}
1099impl From<String> for JsonValueId {
1100    fn from(value: String) -> Self {
1101        Self(value)
1102    }
1103}
1104impl IntoID<JsonValueId> for JsonValue {
1105    fn into_id(
1106        self,
1107    ) -> std::pin::Pin<
1108        Box<dyn core::future::Future<Output = Result<JsonValueId, DaggerError>> + Send>,
1109    > {
1110        Box::pin(async move { self.id().await })
1111    }
1112}
1113impl IntoID<JsonValueId> for JsonValueId {
1114    fn into_id(
1115        self,
1116    ) -> std::pin::Pin<
1117        Box<dyn core::future::Future<Output = Result<JsonValueId, DaggerError>> + Send>,
1118    > {
1119        Box::pin(async move { Ok::<JsonValueId, DaggerError>(self) })
1120    }
1121}
1122impl JsonValueId {
1123    fn quote(&self) -> String {
1124        format!("\"{}\"", self.0.clone())
1125    }
1126}
1127#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1128pub struct Llmid(pub String);
1129impl From<&str> for Llmid {
1130    fn from(value: &str) -> Self {
1131        Self(value.to_string())
1132    }
1133}
1134impl From<String> for Llmid {
1135    fn from(value: String) -> Self {
1136        Self(value)
1137    }
1138}
1139impl IntoID<Llmid> for Llm {
1140    fn into_id(
1141        self,
1142    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<Llmid, DaggerError>> + Send>>
1143    {
1144        Box::pin(async move { self.id().await })
1145    }
1146}
1147impl IntoID<Llmid> for Llmid {
1148    fn into_id(
1149        self,
1150    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<Llmid, DaggerError>> + Send>>
1151    {
1152        Box::pin(async move { Ok::<Llmid, DaggerError>(self) })
1153    }
1154}
1155impl Llmid {
1156    fn quote(&self) -> String {
1157        format!("\"{}\"", self.0.clone())
1158    }
1159}
1160#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1161pub struct LlmTokenUsageId(pub String);
1162impl From<&str> for LlmTokenUsageId {
1163    fn from(value: &str) -> Self {
1164        Self(value.to_string())
1165    }
1166}
1167impl From<String> for LlmTokenUsageId {
1168    fn from(value: String) -> Self {
1169        Self(value)
1170    }
1171}
1172impl IntoID<LlmTokenUsageId> for LlmTokenUsage {
1173    fn into_id(
1174        self,
1175    ) -> std::pin::Pin<
1176        Box<dyn core::future::Future<Output = Result<LlmTokenUsageId, DaggerError>> + Send>,
1177    > {
1178        Box::pin(async move { self.id().await })
1179    }
1180}
1181impl IntoID<LlmTokenUsageId> for LlmTokenUsageId {
1182    fn into_id(
1183        self,
1184    ) -> std::pin::Pin<
1185        Box<dyn core::future::Future<Output = Result<LlmTokenUsageId, DaggerError>> + Send>,
1186    > {
1187        Box::pin(async move { Ok::<LlmTokenUsageId, DaggerError>(self) })
1188    }
1189}
1190impl LlmTokenUsageId {
1191    fn quote(&self) -> String {
1192        format!("\"{}\"", self.0.clone())
1193    }
1194}
1195#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1196pub struct LabelId(pub String);
1197impl From<&str> for LabelId {
1198    fn from(value: &str) -> Self {
1199        Self(value.to_string())
1200    }
1201}
1202impl From<String> for LabelId {
1203    fn from(value: String) -> Self {
1204        Self(value)
1205    }
1206}
1207impl IntoID<LabelId> for Label {
1208    fn into_id(
1209        self,
1210    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<LabelId, DaggerError>> + Send>>
1211    {
1212        Box::pin(async move { self.id().await })
1213    }
1214}
1215impl IntoID<LabelId> for LabelId {
1216    fn into_id(
1217        self,
1218    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<LabelId, DaggerError>> + Send>>
1219    {
1220        Box::pin(async move { Ok::<LabelId, DaggerError>(self) })
1221    }
1222}
1223impl LabelId {
1224    fn quote(&self) -> String {
1225        format!("\"{}\"", self.0.clone())
1226    }
1227}
1228#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1229pub struct ListTypeDefId(pub String);
1230impl From<&str> for ListTypeDefId {
1231    fn from(value: &str) -> Self {
1232        Self(value.to_string())
1233    }
1234}
1235impl From<String> for ListTypeDefId {
1236    fn from(value: String) -> Self {
1237        Self(value)
1238    }
1239}
1240impl IntoID<ListTypeDefId> for ListTypeDef {
1241    fn into_id(
1242        self,
1243    ) -> std::pin::Pin<
1244        Box<dyn core::future::Future<Output = Result<ListTypeDefId, DaggerError>> + Send>,
1245    > {
1246        Box::pin(async move { self.id().await })
1247    }
1248}
1249impl IntoID<ListTypeDefId> for ListTypeDefId {
1250    fn into_id(
1251        self,
1252    ) -> std::pin::Pin<
1253        Box<dyn core::future::Future<Output = Result<ListTypeDefId, DaggerError>> + Send>,
1254    > {
1255        Box::pin(async move { Ok::<ListTypeDefId, DaggerError>(self) })
1256    }
1257}
1258impl ListTypeDefId {
1259    fn quote(&self) -> String {
1260        format!("\"{}\"", self.0.clone())
1261    }
1262}
1263#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1264pub struct ModuleConfigClientId(pub String);
1265impl From<&str> for ModuleConfigClientId {
1266    fn from(value: &str) -> Self {
1267        Self(value.to_string())
1268    }
1269}
1270impl From<String> for ModuleConfigClientId {
1271    fn from(value: String) -> Self {
1272        Self(value)
1273    }
1274}
1275impl IntoID<ModuleConfigClientId> for ModuleConfigClient {
1276    fn into_id(
1277        self,
1278    ) -> std::pin::Pin<
1279        Box<dyn core::future::Future<Output = Result<ModuleConfigClientId, DaggerError>> + Send>,
1280    > {
1281        Box::pin(async move { self.id().await })
1282    }
1283}
1284impl IntoID<ModuleConfigClientId> for ModuleConfigClientId {
1285    fn into_id(
1286        self,
1287    ) -> std::pin::Pin<
1288        Box<dyn core::future::Future<Output = Result<ModuleConfigClientId, DaggerError>> + Send>,
1289    > {
1290        Box::pin(async move { Ok::<ModuleConfigClientId, DaggerError>(self) })
1291    }
1292}
1293impl ModuleConfigClientId {
1294    fn quote(&self) -> String {
1295        format!("\"{}\"", self.0.clone())
1296    }
1297}
1298#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1299pub struct ModuleId(pub String);
1300impl From<&str> for ModuleId {
1301    fn from(value: &str) -> Self {
1302        Self(value.to_string())
1303    }
1304}
1305impl From<String> for ModuleId {
1306    fn from(value: String) -> Self {
1307        Self(value)
1308    }
1309}
1310impl IntoID<ModuleId> for Module {
1311    fn into_id(
1312        self,
1313    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ModuleId, DaggerError>> + Send>>
1314    {
1315        Box::pin(async move { self.id().await })
1316    }
1317}
1318impl IntoID<ModuleId> for ModuleId {
1319    fn into_id(
1320        self,
1321    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ModuleId, DaggerError>> + Send>>
1322    {
1323        Box::pin(async move { Ok::<ModuleId, DaggerError>(self) })
1324    }
1325}
1326impl ModuleId {
1327    fn quote(&self) -> String {
1328        format!("\"{}\"", self.0.clone())
1329    }
1330}
1331#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1332pub struct ModuleSourceId(pub String);
1333impl From<&str> for ModuleSourceId {
1334    fn from(value: &str) -> Self {
1335        Self(value.to_string())
1336    }
1337}
1338impl From<String> for ModuleSourceId {
1339    fn from(value: String) -> Self {
1340        Self(value)
1341    }
1342}
1343impl IntoID<ModuleSourceId> for ModuleSource {
1344    fn into_id(
1345        self,
1346    ) -> std::pin::Pin<
1347        Box<dyn core::future::Future<Output = Result<ModuleSourceId, DaggerError>> + Send>,
1348    > {
1349        Box::pin(async move { self.id().await })
1350    }
1351}
1352impl IntoID<ModuleSourceId> for ModuleSourceId {
1353    fn into_id(
1354        self,
1355    ) -> std::pin::Pin<
1356        Box<dyn core::future::Future<Output = Result<ModuleSourceId, DaggerError>> + Send>,
1357    > {
1358        Box::pin(async move { Ok::<ModuleSourceId, DaggerError>(self) })
1359    }
1360}
1361impl ModuleSourceId {
1362    fn quote(&self) -> String {
1363        format!("\"{}\"", self.0.clone())
1364    }
1365}
1366#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1367pub struct ObjectTypeDefId(pub String);
1368impl From<&str> for ObjectTypeDefId {
1369    fn from(value: &str) -> Self {
1370        Self(value.to_string())
1371    }
1372}
1373impl From<String> for ObjectTypeDefId {
1374    fn from(value: String) -> Self {
1375        Self(value)
1376    }
1377}
1378impl IntoID<ObjectTypeDefId> for ObjectTypeDef {
1379    fn into_id(
1380        self,
1381    ) -> std::pin::Pin<
1382        Box<dyn core::future::Future<Output = Result<ObjectTypeDefId, DaggerError>> + Send>,
1383    > {
1384        Box::pin(async move { self.id().await })
1385    }
1386}
1387impl IntoID<ObjectTypeDefId> for ObjectTypeDefId {
1388    fn into_id(
1389        self,
1390    ) -> std::pin::Pin<
1391        Box<dyn core::future::Future<Output = Result<ObjectTypeDefId, DaggerError>> + Send>,
1392    > {
1393        Box::pin(async move { Ok::<ObjectTypeDefId, DaggerError>(self) })
1394    }
1395}
1396impl ObjectTypeDefId {
1397    fn quote(&self) -> String {
1398        format!("\"{}\"", self.0.clone())
1399    }
1400}
1401#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1402pub struct Platform(pub String);
1403impl From<&str> for Platform {
1404    fn from(value: &str) -> Self {
1405        Self(value.to_string())
1406    }
1407}
1408impl From<String> for Platform {
1409    fn from(value: String) -> Self {
1410        Self(value)
1411    }
1412}
1413impl Platform {
1414    fn quote(&self) -> String {
1415        format!("\"{}\"", self.0.clone())
1416    }
1417}
1418#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1419pub struct PortId(pub String);
1420impl From<&str> for PortId {
1421    fn from(value: &str) -> Self {
1422        Self(value.to_string())
1423    }
1424}
1425impl From<String> for PortId {
1426    fn from(value: String) -> Self {
1427        Self(value)
1428    }
1429}
1430impl IntoID<PortId> for Port {
1431    fn into_id(
1432        self,
1433    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<PortId, DaggerError>> + Send>>
1434    {
1435        Box::pin(async move { self.id().await })
1436    }
1437}
1438impl IntoID<PortId> for PortId {
1439    fn into_id(
1440        self,
1441    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<PortId, DaggerError>> + Send>>
1442    {
1443        Box::pin(async move { Ok::<PortId, DaggerError>(self) })
1444    }
1445}
1446impl PortId {
1447    fn quote(&self) -> String {
1448        format!("\"{}\"", self.0.clone())
1449    }
1450}
1451#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1452pub struct SdkConfigId(pub String);
1453impl From<&str> for SdkConfigId {
1454    fn from(value: &str) -> Self {
1455        Self(value.to_string())
1456    }
1457}
1458impl From<String> for SdkConfigId {
1459    fn from(value: String) -> Self {
1460        Self(value)
1461    }
1462}
1463impl IntoID<SdkConfigId> for SdkConfig {
1464    fn into_id(
1465        self,
1466    ) -> std::pin::Pin<
1467        Box<dyn core::future::Future<Output = Result<SdkConfigId, DaggerError>> + Send>,
1468    > {
1469        Box::pin(async move { self.id().await })
1470    }
1471}
1472impl IntoID<SdkConfigId> for SdkConfigId {
1473    fn into_id(
1474        self,
1475    ) -> std::pin::Pin<
1476        Box<dyn core::future::Future<Output = Result<SdkConfigId, DaggerError>> + Send>,
1477    > {
1478        Box::pin(async move { Ok::<SdkConfigId, DaggerError>(self) })
1479    }
1480}
1481impl SdkConfigId {
1482    fn quote(&self) -> String {
1483        format!("\"{}\"", self.0.clone())
1484    }
1485}
1486#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1487pub struct ScalarTypeDefId(pub String);
1488impl From<&str> for ScalarTypeDefId {
1489    fn from(value: &str) -> Self {
1490        Self(value.to_string())
1491    }
1492}
1493impl From<String> for ScalarTypeDefId {
1494    fn from(value: String) -> Self {
1495        Self(value)
1496    }
1497}
1498impl IntoID<ScalarTypeDefId> for ScalarTypeDef {
1499    fn into_id(
1500        self,
1501    ) -> std::pin::Pin<
1502        Box<dyn core::future::Future<Output = Result<ScalarTypeDefId, DaggerError>> + Send>,
1503    > {
1504        Box::pin(async move { self.id().await })
1505    }
1506}
1507impl IntoID<ScalarTypeDefId> for ScalarTypeDefId {
1508    fn into_id(
1509        self,
1510    ) -> std::pin::Pin<
1511        Box<dyn core::future::Future<Output = Result<ScalarTypeDefId, DaggerError>> + Send>,
1512    > {
1513        Box::pin(async move { Ok::<ScalarTypeDefId, DaggerError>(self) })
1514    }
1515}
1516impl ScalarTypeDefId {
1517    fn quote(&self) -> String {
1518        format!("\"{}\"", self.0.clone())
1519    }
1520}
1521#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1522pub struct SearchResultId(pub String);
1523impl From<&str> for SearchResultId {
1524    fn from(value: &str) -> Self {
1525        Self(value.to_string())
1526    }
1527}
1528impl From<String> for SearchResultId {
1529    fn from(value: String) -> Self {
1530        Self(value)
1531    }
1532}
1533impl IntoID<SearchResultId> for SearchResult {
1534    fn into_id(
1535        self,
1536    ) -> std::pin::Pin<
1537        Box<dyn core::future::Future<Output = Result<SearchResultId, DaggerError>> + Send>,
1538    > {
1539        Box::pin(async move { self.id().await })
1540    }
1541}
1542impl IntoID<SearchResultId> for SearchResultId {
1543    fn into_id(
1544        self,
1545    ) -> std::pin::Pin<
1546        Box<dyn core::future::Future<Output = Result<SearchResultId, DaggerError>> + Send>,
1547    > {
1548        Box::pin(async move { Ok::<SearchResultId, DaggerError>(self) })
1549    }
1550}
1551impl SearchResultId {
1552    fn quote(&self) -> String {
1553        format!("\"{}\"", self.0.clone())
1554    }
1555}
1556#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1557pub struct SearchSubmatchId(pub String);
1558impl From<&str> for SearchSubmatchId {
1559    fn from(value: &str) -> Self {
1560        Self(value.to_string())
1561    }
1562}
1563impl From<String> for SearchSubmatchId {
1564    fn from(value: String) -> Self {
1565        Self(value)
1566    }
1567}
1568impl IntoID<SearchSubmatchId> for SearchSubmatch {
1569    fn into_id(
1570        self,
1571    ) -> std::pin::Pin<
1572        Box<dyn core::future::Future<Output = Result<SearchSubmatchId, DaggerError>> + Send>,
1573    > {
1574        Box::pin(async move { self.id().await })
1575    }
1576}
1577impl IntoID<SearchSubmatchId> for SearchSubmatchId {
1578    fn into_id(
1579        self,
1580    ) -> std::pin::Pin<
1581        Box<dyn core::future::Future<Output = Result<SearchSubmatchId, DaggerError>> + Send>,
1582    > {
1583        Box::pin(async move { Ok::<SearchSubmatchId, DaggerError>(self) })
1584    }
1585}
1586impl SearchSubmatchId {
1587    fn quote(&self) -> String {
1588        format!("\"{}\"", self.0.clone())
1589    }
1590}
1591#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1592pub struct SecretId(pub String);
1593impl From<&str> for SecretId {
1594    fn from(value: &str) -> Self {
1595        Self(value.to_string())
1596    }
1597}
1598impl From<String> for SecretId {
1599    fn from(value: String) -> Self {
1600        Self(value)
1601    }
1602}
1603impl IntoID<SecretId> for Secret {
1604    fn into_id(
1605        self,
1606    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<SecretId, DaggerError>> + Send>>
1607    {
1608        Box::pin(async move { self.id().await })
1609    }
1610}
1611impl IntoID<SecretId> for SecretId {
1612    fn into_id(
1613        self,
1614    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<SecretId, DaggerError>> + Send>>
1615    {
1616        Box::pin(async move { Ok::<SecretId, DaggerError>(self) })
1617    }
1618}
1619impl SecretId {
1620    fn quote(&self) -> String {
1621        format!("\"{}\"", self.0.clone())
1622    }
1623}
1624#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1625pub struct ServiceId(pub String);
1626impl From<&str> for ServiceId {
1627    fn from(value: &str) -> Self {
1628        Self(value.to_string())
1629    }
1630}
1631impl From<String> for ServiceId {
1632    fn from(value: String) -> Self {
1633        Self(value)
1634    }
1635}
1636impl IntoID<ServiceId> for Service {
1637    fn into_id(
1638        self,
1639    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ServiceId, DaggerError>> + Send>>
1640    {
1641        Box::pin(async move { self.id().await })
1642    }
1643}
1644impl IntoID<ServiceId> for ServiceId {
1645    fn into_id(
1646        self,
1647    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<ServiceId, DaggerError>> + Send>>
1648    {
1649        Box::pin(async move { Ok::<ServiceId, DaggerError>(self) })
1650    }
1651}
1652impl ServiceId {
1653    fn quote(&self) -> String {
1654        format!("\"{}\"", self.0.clone())
1655    }
1656}
1657#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1658pub struct SocketId(pub String);
1659impl From<&str> for SocketId {
1660    fn from(value: &str) -> Self {
1661        Self(value.to_string())
1662    }
1663}
1664impl From<String> for SocketId {
1665    fn from(value: String) -> Self {
1666        Self(value)
1667    }
1668}
1669impl IntoID<SocketId> for Socket {
1670    fn into_id(
1671        self,
1672    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<SocketId, DaggerError>> + Send>>
1673    {
1674        Box::pin(async move { self.id().await })
1675    }
1676}
1677impl IntoID<SocketId> for SocketId {
1678    fn into_id(
1679        self,
1680    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<SocketId, DaggerError>> + Send>>
1681    {
1682        Box::pin(async move { Ok::<SocketId, DaggerError>(self) })
1683    }
1684}
1685impl SocketId {
1686    fn quote(&self) -> String {
1687        format!("\"{}\"", self.0.clone())
1688    }
1689}
1690#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1691pub struct SourceMapId(pub String);
1692impl From<&str> for SourceMapId {
1693    fn from(value: &str) -> Self {
1694        Self(value.to_string())
1695    }
1696}
1697impl From<String> for SourceMapId {
1698    fn from(value: String) -> Self {
1699        Self(value)
1700    }
1701}
1702impl IntoID<SourceMapId> for SourceMap {
1703    fn into_id(
1704        self,
1705    ) -> std::pin::Pin<
1706        Box<dyn core::future::Future<Output = Result<SourceMapId, DaggerError>> + Send>,
1707    > {
1708        Box::pin(async move { self.id().await })
1709    }
1710}
1711impl IntoID<SourceMapId> for SourceMapId {
1712    fn into_id(
1713        self,
1714    ) -> std::pin::Pin<
1715        Box<dyn core::future::Future<Output = Result<SourceMapId, DaggerError>> + Send>,
1716    > {
1717        Box::pin(async move { Ok::<SourceMapId, DaggerError>(self) })
1718    }
1719}
1720impl SourceMapId {
1721    fn quote(&self) -> String {
1722        format!("\"{}\"", self.0.clone())
1723    }
1724}
1725#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1726pub struct TerminalId(pub String);
1727impl From<&str> for TerminalId {
1728    fn from(value: &str) -> Self {
1729        Self(value.to_string())
1730    }
1731}
1732impl From<String> for TerminalId {
1733    fn from(value: String) -> Self {
1734        Self(value)
1735    }
1736}
1737impl IntoID<TerminalId> for Terminal {
1738    fn into_id(
1739        self,
1740    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<TerminalId, DaggerError>> + Send>>
1741    {
1742        Box::pin(async move { self.id().await })
1743    }
1744}
1745impl IntoID<TerminalId> for TerminalId {
1746    fn into_id(
1747        self,
1748    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<TerminalId, DaggerError>> + Send>>
1749    {
1750        Box::pin(async move { Ok::<TerminalId, DaggerError>(self) })
1751    }
1752}
1753impl TerminalId {
1754    fn quote(&self) -> String {
1755        format!("\"{}\"", self.0.clone())
1756    }
1757}
1758#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1759pub struct TypeDefId(pub String);
1760impl From<&str> for TypeDefId {
1761    fn from(value: &str) -> Self {
1762        Self(value.to_string())
1763    }
1764}
1765impl From<String> for TypeDefId {
1766    fn from(value: String) -> Self {
1767        Self(value)
1768    }
1769}
1770impl IntoID<TypeDefId> for TypeDef {
1771    fn into_id(
1772        self,
1773    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<TypeDefId, DaggerError>> + Send>>
1774    {
1775        Box::pin(async move { self.id().await })
1776    }
1777}
1778impl IntoID<TypeDefId> for TypeDefId {
1779    fn into_id(
1780        self,
1781    ) -> std::pin::Pin<Box<dyn core::future::Future<Output = Result<TypeDefId, DaggerError>> + Send>>
1782    {
1783        Box::pin(async move { Ok::<TypeDefId, DaggerError>(self) })
1784    }
1785}
1786impl TypeDefId {
1787    fn quote(&self) -> String {
1788        format!("\"{}\"", self.0.clone())
1789    }
1790}
1791#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
1792pub struct Void(pub String);
1793impl From<&str> for Void {
1794    fn from(value: &str) -> Self {
1795        Self(value.to_string())
1796    }
1797}
1798impl From<String> for Void {
1799    fn from(value: String) -> Self {
1800        Self(value)
1801    }
1802}
1803impl Void {
1804    fn quote(&self) -> String {
1805        format!("\"{}\"", self.0.clone())
1806    }
1807}
1808#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
1809pub struct BuildArg {
1810    pub name: String,
1811    pub value: String,
1812}
1813#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
1814pub struct PipelineLabel {
1815    pub name: String,
1816    pub value: String,
1817}
1818#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
1819pub struct PortForward {
1820    pub backend: isize,
1821    pub frontend: isize,
1822    pub protocol: NetworkProtocol,
1823}
1824#[derive(Clone)]
1825pub struct Address {
1826    pub proc: Option<Arc<DaggerSessionProc>>,
1827    pub selection: Selection,
1828    pub graphql_client: DynGraphQLClient,
1829}
1830#[derive(Builder, Debug, PartialEq)]
1831pub struct AddressDirectoryOpts<'a> {
1832    #[builder(setter(into, strip_option), default)]
1833    pub exclude: Option<Vec<&'a str>>,
1834    #[builder(setter(into, strip_option), default)]
1835    pub gitignore: Option<bool>,
1836    #[builder(setter(into, strip_option), default)]
1837    pub include: Option<Vec<&'a str>>,
1838    #[builder(setter(into, strip_option), default)]
1839    pub no_cache: Option<bool>,
1840}
1841#[derive(Builder, Debug, PartialEq)]
1842pub struct AddressFileOpts<'a> {
1843    #[builder(setter(into, strip_option), default)]
1844    pub exclude: Option<Vec<&'a str>>,
1845    #[builder(setter(into, strip_option), default)]
1846    pub gitignore: Option<bool>,
1847    #[builder(setter(into, strip_option), default)]
1848    pub include: Option<Vec<&'a str>>,
1849    #[builder(setter(into, strip_option), default)]
1850    pub no_cache: Option<bool>,
1851}
1852impl Address {
1853    /// Load a container from the address.
1854    pub fn container(&self) -> Container {
1855        let query = self.selection.select("container");
1856        Container {
1857            proc: self.proc.clone(),
1858            selection: query,
1859            graphql_client: self.graphql_client.clone(),
1860        }
1861    }
1862    /// Load a directory from the address.
1863    ///
1864    /// # Arguments
1865    ///
1866    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
1867    pub fn directory(&self) -> Directory {
1868        let query = self.selection.select("directory");
1869        Directory {
1870            proc: self.proc.clone(),
1871            selection: query,
1872            graphql_client: self.graphql_client.clone(),
1873        }
1874    }
1875    /// Load a directory from the address.
1876    ///
1877    /// # Arguments
1878    ///
1879    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
1880    pub fn directory_opts<'a>(&self, opts: AddressDirectoryOpts<'a>) -> Directory {
1881        let mut query = self.selection.select("directory");
1882        if let Some(exclude) = opts.exclude {
1883            query = query.arg("exclude", exclude);
1884        }
1885        if let Some(include) = opts.include {
1886            query = query.arg("include", include);
1887        }
1888        if let Some(gitignore) = opts.gitignore {
1889            query = query.arg("gitignore", gitignore);
1890        }
1891        if let Some(no_cache) = opts.no_cache {
1892            query = query.arg("noCache", no_cache);
1893        }
1894        Directory {
1895            proc: self.proc.clone(),
1896            selection: query,
1897            graphql_client: self.graphql_client.clone(),
1898        }
1899    }
1900    /// Load a file from the address.
1901    ///
1902    /// # Arguments
1903    ///
1904    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
1905    pub fn file(&self) -> File {
1906        let query = self.selection.select("file");
1907        File {
1908            proc: self.proc.clone(),
1909            selection: query,
1910            graphql_client: self.graphql_client.clone(),
1911        }
1912    }
1913    /// Load a file from the address.
1914    ///
1915    /// # Arguments
1916    ///
1917    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
1918    pub fn file_opts<'a>(&self, opts: AddressFileOpts<'a>) -> File {
1919        let mut query = self.selection.select("file");
1920        if let Some(exclude) = opts.exclude {
1921            query = query.arg("exclude", exclude);
1922        }
1923        if let Some(include) = opts.include {
1924            query = query.arg("include", include);
1925        }
1926        if let Some(gitignore) = opts.gitignore {
1927            query = query.arg("gitignore", gitignore);
1928        }
1929        if let Some(no_cache) = opts.no_cache {
1930            query = query.arg("noCache", no_cache);
1931        }
1932        File {
1933            proc: self.proc.clone(),
1934            selection: query,
1935            graphql_client: self.graphql_client.clone(),
1936        }
1937    }
1938    /// Load a git ref (branch, tag or commit) from the address.
1939    pub fn git_ref(&self) -> GitRef {
1940        let query = self.selection.select("gitRef");
1941        GitRef {
1942            proc: self.proc.clone(),
1943            selection: query,
1944            graphql_client: self.graphql_client.clone(),
1945        }
1946    }
1947    /// Load a git repository from the address.
1948    pub fn git_repository(&self) -> GitRepository {
1949        let query = self.selection.select("gitRepository");
1950        GitRepository {
1951            proc: self.proc.clone(),
1952            selection: query,
1953            graphql_client: self.graphql_client.clone(),
1954        }
1955    }
1956    /// A unique identifier for this Address.
1957    pub async fn id(&self) -> Result<AddressId, DaggerError> {
1958        let query = self.selection.select("id");
1959        query.execute(self.graphql_client.clone()).await
1960    }
1961    /// Load a secret from the address.
1962    pub fn secret(&self) -> Secret {
1963        let query = self.selection.select("secret");
1964        Secret {
1965            proc: self.proc.clone(),
1966            selection: query,
1967            graphql_client: self.graphql_client.clone(),
1968        }
1969    }
1970    /// Load a service from the address.
1971    pub fn service(&self) -> Service {
1972        let query = self.selection.select("service");
1973        Service {
1974            proc: self.proc.clone(),
1975            selection: query,
1976            graphql_client: self.graphql_client.clone(),
1977        }
1978    }
1979    /// Load a local socket from the address.
1980    pub fn socket(&self) -> Socket {
1981        let query = self.selection.select("socket");
1982        Socket {
1983            proc: self.proc.clone(),
1984            selection: query,
1985            graphql_client: self.graphql_client.clone(),
1986        }
1987    }
1988    /// The address value
1989    pub async fn value(&self) -> Result<String, DaggerError> {
1990        let query = self.selection.select("value");
1991        query.execute(self.graphql_client.clone()).await
1992    }
1993}
1994#[derive(Clone)]
1995pub struct Binding {
1996    pub proc: Option<Arc<DaggerSessionProc>>,
1997    pub selection: Selection,
1998    pub graphql_client: DynGraphQLClient,
1999}
2000impl Binding {
2001    /// Retrieve the binding value, as type Address
2002    pub fn as_address(&self) -> Address {
2003        let query = self.selection.select("asAddress");
2004        Address {
2005            proc: self.proc.clone(),
2006            selection: query,
2007            graphql_client: self.graphql_client.clone(),
2008        }
2009    }
2010    /// Retrieve the binding value, as type CacheVolume
2011    pub fn as_cache_volume(&self) -> CacheVolume {
2012        let query = self.selection.select("asCacheVolume");
2013        CacheVolume {
2014            proc: self.proc.clone(),
2015            selection: query,
2016            graphql_client: self.graphql_client.clone(),
2017        }
2018    }
2019    /// Retrieve the binding value, as type Changeset
2020    pub fn as_changeset(&self) -> Changeset {
2021        let query = self.selection.select("asChangeset");
2022        Changeset {
2023            proc: self.proc.clone(),
2024            selection: query,
2025            graphql_client: self.graphql_client.clone(),
2026        }
2027    }
2028    /// Retrieve the binding value, as type Cloud
2029    pub fn as_cloud(&self) -> Cloud {
2030        let query = self.selection.select("asCloud");
2031        Cloud {
2032            proc: self.proc.clone(),
2033            selection: query,
2034            graphql_client: self.graphql_client.clone(),
2035        }
2036    }
2037    /// Retrieve the binding value, as type Container
2038    pub fn as_container(&self) -> Container {
2039        let query = self.selection.select("asContainer");
2040        Container {
2041            proc: self.proc.clone(),
2042            selection: query,
2043            graphql_client: self.graphql_client.clone(),
2044        }
2045    }
2046    /// Retrieve the binding value, as type Directory
2047    pub fn as_directory(&self) -> Directory {
2048        let query = self.selection.select("asDirectory");
2049        Directory {
2050            proc: self.proc.clone(),
2051            selection: query,
2052            graphql_client: self.graphql_client.clone(),
2053        }
2054    }
2055    /// Retrieve the binding value, as type Env
2056    pub fn as_env(&self) -> Env {
2057        let query = self.selection.select("asEnv");
2058        Env {
2059            proc: self.proc.clone(),
2060            selection: query,
2061            graphql_client: self.graphql_client.clone(),
2062        }
2063    }
2064    /// Retrieve the binding value, as type EnvFile
2065    pub fn as_env_file(&self) -> EnvFile {
2066        let query = self.selection.select("asEnvFile");
2067        EnvFile {
2068            proc: self.proc.clone(),
2069            selection: query,
2070            graphql_client: self.graphql_client.clone(),
2071        }
2072    }
2073    /// Retrieve the binding value, as type File
2074    pub fn as_file(&self) -> File {
2075        let query = self.selection.select("asFile");
2076        File {
2077            proc: self.proc.clone(),
2078            selection: query,
2079            graphql_client: self.graphql_client.clone(),
2080        }
2081    }
2082    /// Retrieve the binding value, as type GitRef
2083    pub fn as_git_ref(&self) -> GitRef {
2084        let query = self.selection.select("asGitRef");
2085        GitRef {
2086            proc: self.proc.clone(),
2087            selection: query,
2088            graphql_client: self.graphql_client.clone(),
2089        }
2090    }
2091    /// Retrieve the binding value, as type GitRepository
2092    pub fn as_git_repository(&self) -> GitRepository {
2093        let query = self.selection.select("asGitRepository");
2094        GitRepository {
2095            proc: self.proc.clone(),
2096            selection: query,
2097            graphql_client: self.graphql_client.clone(),
2098        }
2099    }
2100    /// Retrieve the binding value, as type JSONValue
2101    pub fn as_json_value(&self) -> JsonValue {
2102        let query = self.selection.select("asJSONValue");
2103        JsonValue {
2104            proc: self.proc.clone(),
2105            selection: query,
2106            graphql_client: self.graphql_client.clone(),
2107        }
2108    }
2109    /// Retrieve the binding value, as type Module
2110    pub fn as_module(&self) -> Module {
2111        let query = self.selection.select("asModule");
2112        Module {
2113            proc: self.proc.clone(),
2114            selection: query,
2115            graphql_client: self.graphql_client.clone(),
2116        }
2117    }
2118    /// Retrieve the binding value, as type ModuleConfigClient
2119    pub fn as_module_config_client(&self) -> ModuleConfigClient {
2120        let query = self.selection.select("asModuleConfigClient");
2121        ModuleConfigClient {
2122            proc: self.proc.clone(),
2123            selection: query,
2124            graphql_client: self.graphql_client.clone(),
2125        }
2126    }
2127    /// Retrieve the binding value, as type ModuleSource
2128    pub fn as_module_source(&self) -> ModuleSource {
2129        let query = self.selection.select("asModuleSource");
2130        ModuleSource {
2131            proc: self.proc.clone(),
2132            selection: query,
2133            graphql_client: self.graphql_client.clone(),
2134        }
2135    }
2136    /// Retrieve the binding value, as type SearchResult
2137    pub fn as_search_result(&self) -> SearchResult {
2138        let query = self.selection.select("asSearchResult");
2139        SearchResult {
2140            proc: self.proc.clone(),
2141            selection: query,
2142            graphql_client: self.graphql_client.clone(),
2143        }
2144    }
2145    /// Retrieve the binding value, as type SearchSubmatch
2146    pub fn as_search_submatch(&self) -> SearchSubmatch {
2147        let query = self.selection.select("asSearchSubmatch");
2148        SearchSubmatch {
2149            proc: self.proc.clone(),
2150            selection: query,
2151            graphql_client: self.graphql_client.clone(),
2152        }
2153    }
2154    /// Retrieve the binding value, as type Secret
2155    pub fn as_secret(&self) -> Secret {
2156        let query = self.selection.select("asSecret");
2157        Secret {
2158            proc: self.proc.clone(),
2159            selection: query,
2160            graphql_client: self.graphql_client.clone(),
2161        }
2162    }
2163    /// Retrieve the binding value, as type Service
2164    pub fn as_service(&self) -> Service {
2165        let query = self.selection.select("asService");
2166        Service {
2167            proc: self.proc.clone(),
2168            selection: query,
2169            graphql_client: self.graphql_client.clone(),
2170        }
2171    }
2172    /// Retrieve the binding value, as type Socket
2173    pub fn as_socket(&self) -> Socket {
2174        let query = self.selection.select("asSocket");
2175        Socket {
2176            proc: self.proc.clone(),
2177            selection: query,
2178            graphql_client: self.graphql_client.clone(),
2179        }
2180    }
2181    /// Returns the binding's string value
2182    pub async fn as_string(&self) -> Result<String, DaggerError> {
2183        let query = self.selection.select("asString");
2184        query.execute(self.graphql_client.clone()).await
2185    }
2186    /// Returns the digest of the binding value
2187    pub async fn digest(&self) -> Result<String, DaggerError> {
2188        let query = self.selection.select("digest");
2189        query.execute(self.graphql_client.clone()).await
2190    }
2191    /// A unique identifier for this Binding.
2192    pub async fn id(&self) -> Result<BindingId, DaggerError> {
2193        let query = self.selection.select("id");
2194        query.execute(self.graphql_client.clone()).await
2195    }
2196    /// Returns true if the binding is null
2197    pub async fn is_null(&self) -> Result<bool, DaggerError> {
2198        let query = self.selection.select("isNull");
2199        query.execute(self.graphql_client.clone()).await
2200    }
2201    /// Returns the binding name
2202    pub async fn name(&self) -> Result<String, DaggerError> {
2203        let query = self.selection.select("name");
2204        query.execute(self.graphql_client.clone()).await
2205    }
2206    /// Returns the binding type
2207    pub async fn type_name(&self) -> Result<String, DaggerError> {
2208        let query = self.selection.select("typeName");
2209        query.execute(self.graphql_client.clone()).await
2210    }
2211}
2212#[derive(Clone)]
2213pub struct CacheVolume {
2214    pub proc: Option<Arc<DaggerSessionProc>>,
2215    pub selection: Selection,
2216    pub graphql_client: DynGraphQLClient,
2217}
2218impl CacheVolume {
2219    /// A unique identifier for this CacheVolume.
2220    pub async fn id(&self) -> Result<CacheVolumeId, DaggerError> {
2221        let query = self.selection.select("id");
2222        query.execute(self.graphql_client.clone()).await
2223    }
2224}
2225#[derive(Clone)]
2226pub struct Changeset {
2227    pub proc: Option<Arc<DaggerSessionProc>>,
2228    pub selection: Selection,
2229    pub graphql_client: DynGraphQLClient,
2230}
2231impl Changeset {
2232    /// Files and directories that were added in the newer directory.
2233    pub async fn added_paths(&self) -> Result<Vec<String>, DaggerError> {
2234        let query = self.selection.select("addedPaths");
2235        query.execute(self.graphql_client.clone()).await
2236    }
2237    /// The newer/upper snapshot.
2238    pub fn after(&self) -> Directory {
2239        let query = self.selection.select("after");
2240        Directory {
2241            proc: self.proc.clone(),
2242            selection: query,
2243            graphql_client: self.graphql_client.clone(),
2244        }
2245    }
2246    /// Return a Git-compatible patch of the changes
2247    pub fn as_patch(&self) -> File {
2248        let query = self.selection.select("asPatch");
2249        File {
2250            proc: self.proc.clone(),
2251            selection: query,
2252            graphql_client: self.graphql_client.clone(),
2253        }
2254    }
2255    /// The older/lower snapshot to compare against.
2256    pub fn before(&self) -> Directory {
2257        let query = self.selection.select("before");
2258        Directory {
2259            proc: self.proc.clone(),
2260            selection: query,
2261            graphql_client: self.graphql_client.clone(),
2262        }
2263    }
2264    /// Applies the diff represented by this changeset to a path on the host.
2265    ///
2266    /// # Arguments
2267    ///
2268    /// * `path` - Location of the copied directory (e.g., "logs/").
2269    pub async fn export(&self, path: impl Into<String>) -> Result<String, DaggerError> {
2270        let mut query = self.selection.select("export");
2271        query = query.arg("path", path.into());
2272        query.execute(self.graphql_client.clone()).await
2273    }
2274    /// A unique identifier for this Changeset.
2275    pub async fn id(&self) -> Result<ChangesetId, DaggerError> {
2276        let query = self.selection.select("id");
2277        query.execute(self.graphql_client.clone()).await
2278    }
2279    /// Returns true if the changeset is empty (i.e. there are no changes).
2280    pub async fn is_empty(&self) -> Result<bool, DaggerError> {
2281        let query = self.selection.select("isEmpty");
2282        query.execute(self.graphql_client.clone()).await
2283    }
2284    /// Return a snapshot containing only the created and modified files
2285    pub fn layer(&self) -> Directory {
2286        let query = self.selection.select("layer");
2287        Directory {
2288            proc: self.proc.clone(),
2289            selection: query,
2290            graphql_client: self.graphql_client.clone(),
2291        }
2292    }
2293    /// Files and directories that existed before and were updated in the newer directory.
2294    pub async fn modified_paths(&self) -> Result<Vec<String>, DaggerError> {
2295        let query = self.selection.select("modifiedPaths");
2296        query.execute(self.graphql_client.clone()).await
2297    }
2298    /// Files and directories that were removed. Directories are indicated by a trailing slash, and their child paths are not included.
2299    pub async fn removed_paths(&self) -> Result<Vec<String>, DaggerError> {
2300        let query = self.selection.select("removedPaths");
2301        query.execute(self.graphql_client.clone()).await
2302    }
2303    /// Force evaluation in the engine.
2304    pub async fn sync(&self) -> Result<ChangesetId, DaggerError> {
2305        let query = self.selection.select("sync");
2306        query.execute(self.graphql_client.clone()).await
2307    }
2308}
2309#[derive(Clone)]
2310pub struct Cloud {
2311    pub proc: Option<Arc<DaggerSessionProc>>,
2312    pub selection: Selection,
2313    pub graphql_client: DynGraphQLClient,
2314}
2315impl Cloud {
2316    /// A unique identifier for this Cloud.
2317    pub async fn id(&self) -> Result<CloudId, DaggerError> {
2318        let query = self.selection.select("id");
2319        query.execute(self.graphql_client.clone()).await
2320    }
2321    /// The trace URL for the current session
2322    pub async fn trace_url(&self) -> Result<String, DaggerError> {
2323        let query = self.selection.select("traceURL");
2324        query.execute(self.graphql_client.clone()).await
2325    }
2326}
2327#[derive(Clone)]
2328pub struct Container {
2329    pub proc: Option<Arc<DaggerSessionProc>>,
2330    pub selection: Selection,
2331    pub graphql_client: DynGraphQLClient,
2332}
2333#[derive(Builder, Debug, PartialEq)]
2334pub struct ContainerAsServiceOpts<'a> {
2335    /// Command to run instead of the container's default command (e.g., ["go", "run", "main.go"]).
2336    /// If empty, the container's default command is used.
2337    #[builder(setter(into, strip_option), default)]
2338    pub args: Option<Vec<&'a str>>,
2339    /// Replace "${VAR}" or "$VAR" in the args according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2340    #[builder(setter(into, strip_option), default)]
2341    pub expand: Option<bool>,
2342    /// Provides Dagger access to the executed command.
2343    #[builder(setter(into, strip_option), default)]
2344    pub experimental_privileged_nesting: Option<bool>,
2345    /// Execute the command with all root capabilities. This is similar to running a command with "sudo" or executing "docker run" with the "--privileged" flag. Containerization does not provide any security guarantees when using this option. It should only be used when absolutely necessary and only with trusted commands.
2346    #[builder(setter(into, strip_option), default)]
2347    pub insecure_root_capabilities: Option<bool>,
2348    /// If set, skip the automatic init process injected into containers by default.
2349    /// This should only be used if the user requires that their exec process be the pid 1 process in the container. Otherwise it may result in unexpected behavior.
2350    #[builder(setter(into, strip_option), default)]
2351    pub no_init: Option<bool>,
2352    /// If the container has an entrypoint, prepend it to the args.
2353    #[builder(setter(into, strip_option), default)]
2354    pub use_entrypoint: Option<bool>,
2355}
2356#[derive(Builder, Debug, PartialEq)]
2357pub struct ContainerAsTarballOpts {
2358    /// Force each layer of the image to use the specified compression algorithm.
2359    /// If this is unset, then if a layer already has a compressed blob in the engine's cache, that will be used (this can result in a mix of compression algorithms for different layers). If this is unset and a layer has no compressed blob in the engine's cache, then it will be compressed using Gzip.
2360    #[builder(setter(into, strip_option), default)]
2361    pub forced_compression: Option<ImageLayerCompression>,
2362    /// Use the specified media types for the image's layers.
2363    /// Defaults to OCI, which is largely compatible with most recent container runtimes, but Docker may be needed for older runtimes without OCI support.
2364    #[builder(setter(into, strip_option), default)]
2365    pub media_types: Option<ImageMediaTypes>,
2366    /// Identifiers for other platform specific containers.
2367    /// Used for multi-platform images.
2368    #[builder(setter(into, strip_option), default)]
2369    pub platform_variants: Option<Vec<ContainerId>>,
2370}
2371#[derive(Builder, Debug, PartialEq)]
2372pub struct ContainerDirectoryOpts {
2373    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2374    #[builder(setter(into, strip_option), default)]
2375    pub expand: Option<bool>,
2376}
2377#[derive(Builder, Debug, PartialEq)]
2378pub struct ContainerExistsOpts {
2379    /// If specified, do not follow symlinks.
2380    #[builder(setter(into, strip_option), default)]
2381    pub do_not_follow_symlinks: Option<bool>,
2382    /// If specified, also validate the type of file (e.g. "REGULAR_TYPE", "DIRECTORY_TYPE", or "SYMLINK_TYPE").
2383    #[builder(setter(into, strip_option), default)]
2384    pub expected_type: Option<ExistsType>,
2385}
2386#[derive(Builder, Debug, PartialEq)]
2387pub struct ContainerExportOpts {
2388    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2389    #[builder(setter(into, strip_option), default)]
2390    pub expand: Option<bool>,
2391    /// Force each layer of the exported image to use the specified compression algorithm.
2392    /// If this is unset, then if a layer already has a compressed blob in the engine's cache, that will be used (this can result in a mix of compression algorithms for different layers). If this is unset and a layer has no compressed blob in the engine's cache, then it will be compressed using Gzip.
2393    #[builder(setter(into, strip_option), default)]
2394    pub forced_compression: Option<ImageLayerCompression>,
2395    /// Use the specified media types for the exported image's layers.
2396    /// Defaults to OCI, which is largely compatible with most recent container runtimes, but Docker may be needed for older runtimes without OCI support.
2397    #[builder(setter(into, strip_option), default)]
2398    pub media_types: Option<ImageMediaTypes>,
2399    /// Identifiers for other platform specific containers.
2400    /// Used for multi-platform image.
2401    #[builder(setter(into, strip_option), default)]
2402    pub platform_variants: Option<Vec<ContainerId>>,
2403}
2404#[derive(Builder, Debug, PartialEq)]
2405pub struct ContainerExportImageOpts {
2406    /// Force each layer of the exported image to use the specified compression algorithm.
2407    /// If this is unset, then if a layer already has a compressed blob in the engine's cache, that will be used (this can result in a mix of compression algorithms for different layers). If this is unset and a layer has no compressed blob in the engine's cache, then it will be compressed using Gzip.
2408    #[builder(setter(into, strip_option), default)]
2409    pub forced_compression: Option<ImageLayerCompression>,
2410    /// Use the specified media types for the exported image's layers.
2411    /// Defaults to OCI, which is largely compatible with most recent container runtimes, but Docker may be needed for older runtimes without OCI support.
2412    #[builder(setter(into, strip_option), default)]
2413    pub media_types: Option<ImageMediaTypes>,
2414    /// Identifiers for other platform specific containers.
2415    /// Used for multi-platform image.
2416    #[builder(setter(into, strip_option), default)]
2417    pub platform_variants: Option<Vec<ContainerId>>,
2418}
2419#[derive(Builder, Debug, PartialEq)]
2420pub struct ContainerFileOpts {
2421    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2422    #[builder(setter(into, strip_option), default)]
2423    pub expand: Option<bool>,
2424}
2425#[derive(Builder, Debug, PartialEq)]
2426pub struct ContainerImportOpts<'a> {
2427    /// Identifies the tag to import from the archive, if the archive bundles multiple tags.
2428    #[builder(setter(into, strip_option), default)]
2429    pub tag: Option<&'a str>,
2430}
2431#[derive(Builder, Debug, PartialEq)]
2432pub struct ContainerPublishOpts {
2433    /// Force each layer of the published image to use the specified compression algorithm.
2434    /// If this is unset, then if a layer already has a compressed blob in the engine's cache, that will be used (this can result in a mix of compression algorithms for different layers). If this is unset and a layer has no compressed blob in the engine's cache, then it will be compressed using Gzip.
2435    #[builder(setter(into, strip_option), default)]
2436    pub forced_compression: Option<ImageLayerCompression>,
2437    /// Use the specified media types for the published image's layers.
2438    /// Defaults to "OCI", which is compatible with most recent registries, but "Docker" may be needed for older registries without OCI support.
2439    #[builder(setter(into, strip_option), default)]
2440    pub media_types: Option<ImageMediaTypes>,
2441    /// Identifiers for other platform specific containers.
2442    /// Used for multi-platform image.
2443    #[builder(setter(into, strip_option), default)]
2444    pub platform_variants: Option<Vec<ContainerId>>,
2445}
2446#[derive(Builder, Debug, PartialEq)]
2447pub struct ContainerTerminalOpts<'a> {
2448    /// If set, override the container's default terminal command and invoke these command arguments instead.
2449    #[builder(setter(into, strip_option), default)]
2450    pub cmd: Option<Vec<&'a str>>,
2451    /// Provides Dagger access to the executed command.
2452    #[builder(setter(into, strip_option), default)]
2453    pub experimental_privileged_nesting: Option<bool>,
2454    /// Execute the command with all root capabilities. This is similar to running a command with "sudo" or executing "docker run" with the "--privileged" flag. Containerization does not provide any security guarantees when using this option. It should only be used when absolutely necessary and only with trusted commands.
2455    #[builder(setter(into, strip_option), default)]
2456    pub insecure_root_capabilities: Option<bool>,
2457}
2458#[derive(Builder, Debug, PartialEq)]
2459pub struct ContainerUpOpts<'a> {
2460    /// Command to run instead of the container's default command (e.g., ["go", "run", "main.go"]).
2461    /// If empty, the container's default command is used.
2462    #[builder(setter(into, strip_option), default)]
2463    pub args: Option<Vec<&'a str>>,
2464    /// Replace "${VAR}" or "$VAR" in the args according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2465    #[builder(setter(into, strip_option), default)]
2466    pub expand: Option<bool>,
2467    /// Provides Dagger access to the executed command.
2468    #[builder(setter(into, strip_option), default)]
2469    pub experimental_privileged_nesting: Option<bool>,
2470    /// Execute the command with all root capabilities. This is similar to running a command with "sudo" or executing "docker run" with the "--privileged" flag. Containerization does not provide any security guarantees when using this option. It should only be used when absolutely necessary and only with trusted commands.
2471    #[builder(setter(into, strip_option), default)]
2472    pub insecure_root_capabilities: Option<bool>,
2473    /// If set, skip the automatic init process injected into containers by default.
2474    /// This should only be used if the user requires that their exec process be the pid 1 process in the container. Otherwise it may result in unexpected behavior.
2475    #[builder(setter(into, strip_option), default)]
2476    pub no_init: Option<bool>,
2477    /// List of frontend/backend port mappings to forward.
2478    /// Frontend is the port accepting traffic on the host, backend is the service port.
2479    #[builder(setter(into, strip_option), default)]
2480    pub ports: Option<Vec<PortForward>>,
2481    /// Bind each tunnel port to a random port on the host.
2482    #[builder(setter(into, strip_option), default)]
2483    pub random: Option<bool>,
2484    /// If the container has an entrypoint, prepend it to the args.
2485    #[builder(setter(into, strip_option), default)]
2486    pub use_entrypoint: Option<bool>,
2487}
2488#[derive(Builder, Debug, PartialEq)]
2489pub struct ContainerWithDefaultTerminalCmdOpts {
2490    /// Provides Dagger access to the executed command.
2491    #[builder(setter(into, strip_option), default)]
2492    pub experimental_privileged_nesting: Option<bool>,
2493    /// Execute the command with all root capabilities. This is similar to running a command with "sudo" or executing "docker run" with the "--privileged" flag. Containerization does not provide any security guarantees when using this option. It should only be used when absolutely necessary and only with trusted commands.
2494    #[builder(setter(into, strip_option), default)]
2495    pub insecure_root_capabilities: Option<bool>,
2496}
2497#[derive(Builder, Debug, PartialEq)]
2498pub struct ContainerWithDirectoryOpts<'a> {
2499    /// Patterns to exclude in the written directory (e.g. ["node_modules/**", ".gitignore", ".git/"]).
2500    #[builder(setter(into, strip_option), default)]
2501    pub exclude: Option<Vec<&'a str>>,
2502    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2503    #[builder(setter(into, strip_option), default)]
2504    pub expand: Option<bool>,
2505    /// Apply .gitignore rules when writing the directory.
2506    #[builder(setter(into, strip_option), default)]
2507    pub gitignore: Option<bool>,
2508    /// Patterns to include in the written directory (e.g. ["*.go", "go.mod", "go.sum"]).
2509    #[builder(setter(into, strip_option), default)]
2510    pub include: Option<Vec<&'a str>>,
2511    /// A user:group to set for the directory and its contents.
2512    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2513    /// If the group is omitted, it defaults to the same as the user.
2514    #[builder(setter(into, strip_option), default)]
2515    pub owner: Option<&'a str>,
2516}
2517#[derive(Builder, Debug, PartialEq)]
2518pub struct ContainerWithEntrypointOpts {
2519    /// Don't reset the default arguments when setting the entrypoint. By default it is reset, since entrypoint and default args are often tightly coupled.
2520    #[builder(setter(into, strip_option), default)]
2521    pub keep_default_args: Option<bool>,
2522}
2523#[derive(Builder, Debug, PartialEq)]
2524pub struct ContainerWithEnvVariableOpts {
2525    /// Replace "${VAR}" or "$VAR" in the value according to the current environment variables defined in the container (e.g. "/opt/bin:$PATH").
2526    #[builder(setter(into, strip_option), default)]
2527    pub expand: Option<bool>,
2528}
2529#[derive(Builder, Debug, PartialEq)]
2530pub struct ContainerWithExecOpts<'a> {
2531    /// Replace "${VAR}" or "$VAR" in the args according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2532    #[builder(setter(into, strip_option), default)]
2533    pub expand: Option<bool>,
2534    /// Exit codes this command is allowed to exit with without error
2535    #[builder(setter(into, strip_option), default)]
2536    pub expect: Option<ReturnType>,
2537    /// Provides Dagger access to the executed command.
2538    #[builder(setter(into, strip_option), default)]
2539    pub experimental_privileged_nesting: Option<bool>,
2540    /// Execute the command with all root capabilities. Like --privileged in Docker
2541    /// DANGER: this grants the command full access to the host system. Only use when 1) you trust the command being executed and 2) you specifically need this level of access.
2542    #[builder(setter(into, strip_option), default)]
2543    pub insecure_root_capabilities: Option<bool>,
2544    /// Skip the automatic init process injected into containers by default.
2545    /// Only use this if you specifically need the command to be pid 1 in the container. Otherwise it may result in unexpected behavior. If you're not sure, you don't need this.
2546    #[builder(setter(into, strip_option), default)]
2547    pub no_init: Option<bool>,
2548    /// Redirect the command's standard error to a file in the container. Example: "./stderr.txt"
2549    #[builder(setter(into, strip_option), default)]
2550    pub redirect_stderr: Option<&'a str>,
2551    /// Redirect the command's standard input from a file in the container. Example: "./stdin.txt"
2552    #[builder(setter(into, strip_option), default)]
2553    pub redirect_stdin: Option<&'a str>,
2554    /// Redirect the command's standard output to a file in the container. Example: "./stdout.txt"
2555    #[builder(setter(into, strip_option), default)]
2556    pub redirect_stdout: Option<&'a str>,
2557    /// Content to write to the command's standard input. Example: "Hello world")
2558    #[builder(setter(into, strip_option), default)]
2559    pub stdin: Option<&'a str>,
2560    /// Apply the OCI entrypoint, if present, by prepending it to the args. Ignored by default.
2561    #[builder(setter(into, strip_option), default)]
2562    pub use_entrypoint: Option<bool>,
2563}
2564#[derive(Builder, Debug, PartialEq)]
2565pub struct ContainerWithExposedPortOpts<'a> {
2566    /// Port description. Example: "payment API endpoint"
2567    #[builder(setter(into, strip_option), default)]
2568    pub description: Option<&'a str>,
2569    /// Skip the health check when run as a service.
2570    #[builder(setter(into, strip_option), default)]
2571    pub experimental_skip_healthcheck: Option<bool>,
2572    /// Network protocol. Example: "tcp"
2573    #[builder(setter(into, strip_option), default)]
2574    pub protocol: Option<NetworkProtocol>,
2575}
2576#[derive(Builder, Debug, PartialEq)]
2577pub struct ContainerWithFileOpts<'a> {
2578    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2579    #[builder(setter(into, strip_option), default)]
2580    pub expand: Option<bool>,
2581    /// A user:group to set for the file.
2582    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2583    /// If the group is omitted, it defaults to the same as the user.
2584    #[builder(setter(into, strip_option), default)]
2585    pub owner: Option<&'a str>,
2586    /// Permissions of the new file. Example: 0600
2587    #[builder(setter(into, strip_option), default)]
2588    pub permissions: Option<isize>,
2589}
2590#[derive(Builder, Debug, PartialEq)]
2591pub struct ContainerWithFilesOpts<'a> {
2592    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2593    #[builder(setter(into, strip_option), default)]
2594    pub expand: Option<bool>,
2595    /// A user:group to set for the files.
2596    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2597    /// If the group is omitted, it defaults to the same as the user.
2598    #[builder(setter(into, strip_option), default)]
2599    pub owner: Option<&'a str>,
2600    /// Permission given to the copied files (e.g., 0600).
2601    #[builder(setter(into, strip_option), default)]
2602    pub permissions: Option<isize>,
2603}
2604#[derive(Builder, Debug, PartialEq)]
2605pub struct ContainerWithMountedCacheOpts<'a> {
2606    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2607    #[builder(setter(into, strip_option), default)]
2608    pub expand: Option<bool>,
2609    /// A user:group to set for the mounted cache directory.
2610    /// Note that this changes the ownership of the specified mount along with the initial filesystem provided by source (if any). It does not have any effect if/when the cache has already been created.
2611    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2612    /// If the group is omitted, it defaults to the same as the user.
2613    #[builder(setter(into, strip_option), default)]
2614    pub owner: Option<&'a str>,
2615    /// Sharing mode of the cache volume.
2616    #[builder(setter(into, strip_option), default)]
2617    pub sharing: Option<CacheSharingMode>,
2618    /// Identifier of the directory to use as the cache volume's root.
2619    #[builder(setter(into, strip_option), default)]
2620    pub source: Option<DirectoryId>,
2621}
2622#[derive(Builder, Debug, PartialEq)]
2623pub struct ContainerWithMountedDirectoryOpts<'a> {
2624    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2625    #[builder(setter(into, strip_option), default)]
2626    pub expand: Option<bool>,
2627    /// A user:group to set for the mounted directory and its contents.
2628    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2629    /// If the group is omitted, it defaults to the same as the user.
2630    #[builder(setter(into, strip_option), default)]
2631    pub owner: Option<&'a str>,
2632}
2633#[derive(Builder, Debug, PartialEq)]
2634pub struct ContainerWithMountedFileOpts<'a> {
2635    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2636    #[builder(setter(into, strip_option), default)]
2637    pub expand: Option<bool>,
2638    /// A user or user:group to set for the mounted file.
2639    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2640    /// If the group is omitted, it defaults to the same as the user.
2641    #[builder(setter(into, strip_option), default)]
2642    pub owner: Option<&'a str>,
2643}
2644#[derive(Builder, Debug, PartialEq)]
2645pub struct ContainerWithMountedSecretOpts<'a> {
2646    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2647    #[builder(setter(into, strip_option), default)]
2648    pub expand: Option<bool>,
2649    /// Permission given to the mounted secret (e.g., 0600).
2650    /// This option requires an owner to be set to be active.
2651    #[builder(setter(into, strip_option), default)]
2652    pub mode: Option<isize>,
2653    /// A user:group to set for the mounted secret.
2654    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2655    /// If the group is omitted, it defaults to the same as the user.
2656    #[builder(setter(into, strip_option), default)]
2657    pub owner: Option<&'a str>,
2658}
2659#[derive(Builder, Debug, PartialEq)]
2660pub struct ContainerWithMountedTempOpts {
2661    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2662    #[builder(setter(into, strip_option), default)]
2663    pub expand: Option<bool>,
2664    /// Size of the temporary directory in bytes.
2665    #[builder(setter(into, strip_option), default)]
2666    pub size: Option<isize>,
2667}
2668#[derive(Builder, Debug, PartialEq)]
2669pub struct ContainerWithNewFileOpts<'a> {
2670    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2671    #[builder(setter(into, strip_option), default)]
2672    pub expand: Option<bool>,
2673    /// A user:group to set for the file.
2674    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2675    /// If the group is omitted, it defaults to the same as the user.
2676    #[builder(setter(into, strip_option), default)]
2677    pub owner: Option<&'a str>,
2678    /// Permissions of the new file. Example: 0600
2679    #[builder(setter(into, strip_option), default)]
2680    pub permissions: Option<isize>,
2681}
2682#[derive(Builder, Debug, PartialEq)]
2683pub struct ContainerWithSymlinkOpts {
2684    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2685    #[builder(setter(into, strip_option), default)]
2686    pub expand: Option<bool>,
2687}
2688#[derive(Builder, Debug, PartialEq)]
2689pub struct ContainerWithUnixSocketOpts<'a> {
2690    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2691    #[builder(setter(into, strip_option), default)]
2692    pub expand: Option<bool>,
2693    /// A user:group to set for the mounted socket.
2694    /// The user and group can either be an ID (1000:1000) or a name (foo:bar).
2695    /// If the group is omitted, it defaults to the same as the user.
2696    #[builder(setter(into, strip_option), default)]
2697    pub owner: Option<&'a str>,
2698}
2699#[derive(Builder, Debug, PartialEq)]
2700pub struct ContainerWithWorkdirOpts {
2701    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2702    #[builder(setter(into, strip_option), default)]
2703    pub expand: Option<bool>,
2704}
2705#[derive(Builder, Debug, PartialEq)]
2706pub struct ContainerWithoutDirectoryOpts {
2707    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2708    #[builder(setter(into, strip_option), default)]
2709    pub expand: Option<bool>,
2710}
2711#[derive(Builder, Debug, PartialEq)]
2712pub struct ContainerWithoutEntrypointOpts {
2713    /// Don't remove the default arguments when unsetting the entrypoint.
2714    #[builder(setter(into, strip_option), default)]
2715    pub keep_default_args: Option<bool>,
2716}
2717#[derive(Builder, Debug, PartialEq)]
2718pub struct ContainerWithoutExposedPortOpts {
2719    /// Port protocol to unexpose
2720    #[builder(setter(into, strip_option), default)]
2721    pub protocol: Option<NetworkProtocol>,
2722}
2723#[derive(Builder, Debug, PartialEq)]
2724pub struct ContainerWithoutFileOpts {
2725    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2726    #[builder(setter(into, strip_option), default)]
2727    pub expand: Option<bool>,
2728}
2729#[derive(Builder, Debug, PartialEq)]
2730pub struct ContainerWithoutFilesOpts {
2731    /// Replace "${VAR}" or "$VAR" in the value of paths according to the current environment variables defined in the container (e.g. "/$VAR/foo.txt").
2732    #[builder(setter(into, strip_option), default)]
2733    pub expand: Option<bool>,
2734}
2735#[derive(Builder, Debug, PartialEq)]
2736pub struct ContainerWithoutMountOpts {
2737    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2738    #[builder(setter(into, strip_option), default)]
2739    pub expand: Option<bool>,
2740}
2741#[derive(Builder, Debug, PartialEq)]
2742pub struct ContainerWithoutUnixSocketOpts {
2743    /// Replace "${VAR}" or "$VAR" in the value of path according to the current environment variables defined in the container (e.g. "/$VAR/foo").
2744    #[builder(setter(into, strip_option), default)]
2745    pub expand: Option<bool>,
2746}
2747impl Container {
2748    /// Turn the container into a Service.
2749    /// Be sure to set any exposed ports before this conversion.
2750    ///
2751    /// # Arguments
2752    ///
2753    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2754    pub fn as_service(&self) -> Service {
2755        let query = self.selection.select("asService");
2756        Service {
2757            proc: self.proc.clone(),
2758            selection: query,
2759            graphql_client: self.graphql_client.clone(),
2760        }
2761    }
2762    /// Turn the container into a Service.
2763    /// Be sure to set any exposed ports before this conversion.
2764    ///
2765    /// # Arguments
2766    ///
2767    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2768    pub fn as_service_opts<'a>(&self, opts: ContainerAsServiceOpts<'a>) -> Service {
2769        let mut query = self.selection.select("asService");
2770        if let Some(args) = opts.args {
2771            query = query.arg("args", args);
2772        }
2773        if let Some(use_entrypoint) = opts.use_entrypoint {
2774            query = query.arg("useEntrypoint", use_entrypoint);
2775        }
2776        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
2777            query = query.arg(
2778                "experimentalPrivilegedNesting",
2779                experimental_privileged_nesting,
2780            );
2781        }
2782        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
2783            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
2784        }
2785        if let Some(expand) = opts.expand {
2786            query = query.arg("expand", expand);
2787        }
2788        if let Some(no_init) = opts.no_init {
2789            query = query.arg("noInit", no_init);
2790        }
2791        Service {
2792            proc: self.proc.clone(),
2793            selection: query,
2794            graphql_client: self.graphql_client.clone(),
2795        }
2796    }
2797    /// Package the container state as an OCI image, and return it as a tar archive
2798    ///
2799    /// # Arguments
2800    ///
2801    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2802    pub fn as_tarball(&self) -> File {
2803        let query = self.selection.select("asTarball");
2804        File {
2805            proc: self.proc.clone(),
2806            selection: query,
2807            graphql_client: self.graphql_client.clone(),
2808        }
2809    }
2810    /// Package the container state as an OCI image, and return it as a tar archive
2811    ///
2812    /// # Arguments
2813    ///
2814    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2815    pub fn as_tarball_opts(&self, opts: ContainerAsTarballOpts) -> File {
2816        let mut query = self.selection.select("asTarball");
2817        if let Some(platform_variants) = opts.platform_variants {
2818            query = query.arg("platformVariants", platform_variants);
2819        }
2820        if let Some(forced_compression) = opts.forced_compression {
2821            query = query.arg("forcedCompression", forced_compression);
2822        }
2823        if let Some(media_types) = opts.media_types {
2824            query = query.arg("mediaTypes", media_types);
2825        }
2826        File {
2827            proc: self.proc.clone(),
2828            selection: query,
2829            graphql_client: self.graphql_client.clone(),
2830        }
2831    }
2832    /// The combined buffered standard output and standard error stream of the last executed command
2833    /// Returns an error if no command was executed
2834    pub async fn combined_output(&self) -> Result<String, DaggerError> {
2835        let query = self.selection.select("combinedOutput");
2836        query.execute(self.graphql_client.clone()).await
2837    }
2838    /// Return the container's default arguments.
2839    pub async fn default_args(&self) -> Result<Vec<String>, DaggerError> {
2840        let query = self.selection.select("defaultArgs");
2841        query.execute(self.graphql_client.clone()).await
2842    }
2843    /// Retrieve a directory from the container's root filesystem
2844    /// Mounts are included.
2845    ///
2846    /// # Arguments
2847    ///
2848    /// * `path` - The path of the directory to retrieve (e.g., "./src").
2849    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2850    pub fn directory(&self, path: impl Into<String>) -> Directory {
2851        let mut query = self.selection.select("directory");
2852        query = query.arg("path", path.into());
2853        Directory {
2854            proc: self.proc.clone(),
2855            selection: query,
2856            graphql_client: self.graphql_client.clone(),
2857        }
2858    }
2859    /// Retrieve a directory from the container's root filesystem
2860    /// Mounts are included.
2861    ///
2862    /// # Arguments
2863    ///
2864    /// * `path` - The path of the directory to retrieve (e.g., "./src").
2865    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2866    pub fn directory_opts(
2867        &self,
2868        path: impl Into<String>,
2869        opts: ContainerDirectoryOpts,
2870    ) -> Directory {
2871        let mut query = self.selection.select("directory");
2872        query = query.arg("path", path.into());
2873        if let Some(expand) = opts.expand {
2874            query = query.arg("expand", expand);
2875        }
2876        Directory {
2877            proc: self.proc.clone(),
2878            selection: query,
2879            graphql_client: self.graphql_client.clone(),
2880        }
2881    }
2882    /// Return the container's OCI entrypoint.
2883    pub async fn entrypoint(&self) -> Result<Vec<String>, DaggerError> {
2884        let query = self.selection.select("entrypoint");
2885        query.execute(self.graphql_client.clone()).await
2886    }
2887    /// Retrieves the value of the specified environment variable.
2888    ///
2889    /// # Arguments
2890    ///
2891    /// * `name` - The name of the environment variable to retrieve (e.g., "PATH").
2892    pub async fn env_variable(&self, name: impl Into<String>) -> Result<String, DaggerError> {
2893        let mut query = self.selection.select("envVariable");
2894        query = query.arg("name", name.into());
2895        query.execute(self.graphql_client.clone()).await
2896    }
2897    /// Retrieves the list of environment variables passed to commands.
2898    pub fn env_variables(&self) -> Vec<EnvVariable> {
2899        let query = self.selection.select("envVariables");
2900        vec![EnvVariable {
2901            proc: self.proc.clone(),
2902            selection: query,
2903            graphql_client: self.graphql_client.clone(),
2904        }]
2905    }
2906    /// check if a file or directory exists
2907    ///
2908    /// # Arguments
2909    ///
2910    /// * `path` - Path to check (e.g., "/file.txt").
2911    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2912    pub async fn exists(&self, path: impl Into<String>) -> Result<bool, DaggerError> {
2913        let mut query = self.selection.select("exists");
2914        query = query.arg("path", path.into());
2915        query.execute(self.graphql_client.clone()).await
2916    }
2917    /// check if a file or directory exists
2918    ///
2919    /// # Arguments
2920    ///
2921    /// * `path` - Path to check (e.g., "/file.txt").
2922    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2923    pub async fn exists_opts(
2924        &self,
2925        path: impl Into<String>,
2926        opts: ContainerExistsOpts,
2927    ) -> Result<bool, DaggerError> {
2928        let mut query = self.selection.select("exists");
2929        query = query.arg("path", path.into());
2930        if let Some(expected_type) = opts.expected_type {
2931            query = query.arg("expectedType", expected_type);
2932        }
2933        if let Some(do_not_follow_symlinks) = opts.do_not_follow_symlinks {
2934            query = query.arg("doNotFollowSymlinks", do_not_follow_symlinks);
2935        }
2936        query.execute(self.graphql_client.clone()).await
2937    }
2938    /// The exit code of the last executed command
2939    /// Returns an error if no command was executed
2940    pub async fn exit_code(&self) -> Result<isize, DaggerError> {
2941        let query = self.selection.select("exitCode");
2942        query.execute(self.graphql_client.clone()).await
2943    }
2944    /// EXPERIMENTAL API! Subject to change/removal at any time.
2945    /// Configures all available GPUs on the host to be accessible to this container.
2946    /// This currently works for Nvidia devices only.
2947    pub fn experimental_with_all_gp_us(&self) -> Container {
2948        let query = self.selection.select("experimentalWithAllGPUs");
2949        Container {
2950            proc: self.proc.clone(),
2951            selection: query,
2952            graphql_client: self.graphql_client.clone(),
2953        }
2954    }
2955    /// EXPERIMENTAL API! Subject to change/removal at any time.
2956    /// Configures the provided list of devices to be accessible to this container.
2957    /// This currently works for Nvidia devices only.
2958    ///
2959    /// # Arguments
2960    ///
2961    /// * `devices` - List of devices to be accessible to this container.
2962    pub fn experimental_with_gpu(&self, devices: Vec<impl Into<String>>) -> Container {
2963        let mut query = self.selection.select("experimentalWithGPU");
2964        query = query.arg(
2965            "devices",
2966            devices
2967                .into_iter()
2968                .map(|i| i.into())
2969                .collect::<Vec<String>>(),
2970        );
2971        Container {
2972            proc: self.proc.clone(),
2973            selection: query,
2974            graphql_client: self.graphql_client.clone(),
2975        }
2976    }
2977    /// Writes the container as an OCI tarball to the destination file path on the host.
2978    /// It can also export platform variants.
2979    ///
2980    /// # Arguments
2981    ///
2982    /// * `path` - Host's destination path (e.g., "./tarball").
2983    ///
2984    /// Path can be relative to the engine's workdir or absolute.
2985    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
2986    pub async fn export(&self, path: impl Into<String>) -> Result<String, DaggerError> {
2987        let mut query = self.selection.select("export");
2988        query = query.arg("path", path.into());
2989        query.execute(self.graphql_client.clone()).await
2990    }
2991    /// Writes the container as an OCI tarball to the destination file path on the host.
2992    /// It can also export platform variants.
2993    ///
2994    /// # Arguments
2995    ///
2996    /// * `path` - Host's destination path (e.g., "./tarball").
2997    ///
2998    /// Path can be relative to the engine's workdir or absolute.
2999    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3000    pub async fn export_opts(
3001        &self,
3002        path: impl Into<String>,
3003        opts: ContainerExportOpts,
3004    ) -> Result<String, DaggerError> {
3005        let mut query = self.selection.select("export");
3006        query = query.arg("path", path.into());
3007        if let Some(platform_variants) = opts.platform_variants {
3008            query = query.arg("platformVariants", platform_variants);
3009        }
3010        if let Some(forced_compression) = opts.forced_compression {
3011            query = query.arg("forcedCompression", forced_compression);
3012        }
3013        if let Some(media_types) = opts.media_types {
3014            query = query.arg("mediaTypes", media_types);
3015        }
3016        if let Some(expand) = opts.expand {
3017            query = query.arg("expand", expand);
3018        }
3019        query.execute(self.graphql_client.clone()).await
3020    }
3021    /// Exports the container as an image to the host's container image store.
3022    ///
3023    /// # Arguments
3024    ///
3025    /// * `name` - Name of image to export to in the host's store
3026    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3027    pub async fn export_image(&self, name: impl Into<String>) -> Result<Void, DaggerError> {
3028        let mut query = self.selection.select("exportImage");
3029        query = query.arg("name", name.into());
3030        query.execute(self.graphql_client.clone()).await
3031    }
3032    /// Exports the container as an image to the host's container image store.
3033    ///
3034    /// # Arguments
3035    ///
3036    /// * `name` - Name of image to export to in the host's store
3037    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3038    pub async fn export_image_opts(
3039        &self,
3040        name: impl Into<String>,
3041        opts: ContainerExportImageOpts,
3042    ) -> Result<Void, DaggerError> {
3043        let mut query = self.selection.select("exportImage");
3044        query = query.arg("name", name.into());
3045        if let Some(platform_variants) = opts.platform_variants {
3046            query = query.arg("platformVariants", platform_variants);
3047        }
3048        if let Some(forced_compression) = opts.forced_compression {
3049            query = query.arg("forcedCompression", forced_compression);
3050        }
3051        if let Some(media_types) = opts.media_types {
3052            query = query.arg("mediaTypes", media_types);
3053        }
3054        query.execute(self.graphql_client.clone()).await
3055    }
3056    /// Retrieves the list of exposed ports.
3057    /// This includes ports already exposed by the image, even if not explicitly added with dagger.
3058    pub fn exposed_ports(&self) -> Vec<Port> {
3059        let query = self.selection.select("exposedPorts");
3060        vec![Port {
3061            proc: self.proc.clone(),
3062            selection: query,
3063            graphql_client: self.graphql_client.clone(),
3064        }]
3065    }
3066    /// Retrieves a file at the given path.
3067    /// Mounts are included.
3068    ///
3069    /// # Arguments
3070    ///
3071    /// * `path` - The path of the file to retrieve (e.g., "./README.md").
3072    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3073    pub fn file(&self, path: impl Into<String>) -> File {
3074        let mut query = self.selection.select("file");
3075        query = query.arg("path", path.into());
3076        File {
3077            proc: self.proc.clone(),
3078            selection: query,
3079            graphql_client: self.graphql_client.clone(),
3080        }
3081    }
3082    /// Retrieves a file at the given path.
3083    /// Mounts are included.
3084    ///
3085    /// # Arguments
3086    ///
3087    /// * `path` - The path of the file to retrieve (e.g., "./README.md").
3088    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3089    pub fn file_opts(&self, path: impl Into<String>, opts: ContainerFileOpts) -> File {
3090        let mut query = self.selection.select("file");
3091        query = query.arg("path", path.into());
3092        if let Some(expand) = opts.expand {
3093            query = query.arg("expand", expand);
3094        }
3095        File {
3096            proc: self.proc.clone(),
3097            selection: query,
3098            graphql_client: self.graphql_client.clone(),
3099        }
3100    }
3101    /// Download a container image, and apply it to the container state. All previous state will be lost.
3102    ///
3103    /// # Arguments
3104    ///
3105    /// * `address` - Address of the container image to download, in standard OCI ref format. Example:"registry.dagger.io/engine:latest"
3106    pub fn from(&self, address: impl Into<String>) -> Container {
3107        let mut query = self.selection.select("from");
3108        query = query.arg("address", address.into());
3109        Container {
3110            proc: self.proc.clone(),
3111            selection: query,
3112            graphql_client: self.graphql_client.clone(),
3113        }
3114    }
3115    /// A unique identifier for this Container.
3116    pub async fn id(&self) -> Result<ContainerId, DaggerError> {
3117        let query = self.selection.select("id");
3118        query.execute(self.graphql_client.clone()).await
3119    }
3120    /// The unique image reference which can only be retrieved immediately after the 'Container.From' call.
3121    pub async fn image_ref(&self) -> Result<String, DaggerError> {
3122        let query = self.selection.select("imageRef");
3123        query.execute(self.graphql_client.clone()).await
3124    }
3125    /// Reads the container from an OCI tarball.
3126    ///
3127    /// # Arguments
3128    ///
3129    /// * `source` - File to read the container from.
3130    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3131    pub fn import(&self, source: impl IntoID<FileId>) -> Container {
3132        let mut query = self.selection.select("import");
3133        query = query.arg_lazy(
3134            "source",
3135            Box::new(move || {
3136                let source = source.clone();
3137                Box::pin(async move { source.into_id().await.unwrap().quote() })
3138            }),
3139        );
3140        Container {
3141            proc: self.proc.clone(),
3142            selection: query,
3143            graphql_client: self.graphql_client.clone(),
3144        }
3145    }
3146    /// Reads the container from an OCI tarball.
3147    ///
3148    /// # Arguments
3149    ///
3150    /// * `source` - File to read the container from.
3151    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3152    pub fn import_opts<'a>(
3153        &self,
3154        source: impl IntoID<FileId>,
3155        opts: ContainerImportOpts<'a>,
3156    ) -> Container {
3157        let mut query = self.selection.select("import");
3158        query = query.arg_lazy(
3159            "source",
3160            Box::new(move || {
3161                let source = source.clone();
3162                Box::pin(async move { source.into_id().await.unwrap().quote() })
3163            }),
3164        );
3165        if let Some(tag) = opts.tag {
3166            query = query.arg("tag", tag);
3167        }
3168        Container {
3169            proc: self.proc.clone(),
3170            selection: query,
3171            graphql_client: self.graphql_client.clone(),
3172        }
3173    }
3174    /// Retrieves the value of the specified label.
3175    ///
3176    /// # Arguments
3177    ///
3178    /// * `name` - The name of the label (e.g., "org.opencontainers.artifact.created").
3179    pub async fn label(&self, name: impl Into<String>) -> Result<String, DaggerError> {
3180        let mut query = self.selection.select("label");
3181        query = query.arg("name", name.into());
3182        query.execute(self.graphql_client.clone()).await
3183    }
3184    /// Retrieves the list of labels passed to container.
3185    pub fn labels(&self) -> Vec<Label> {
3186        let query = self.selection.select("labels");
3187        vec![Label {
3188            proc: self.proc.clone(),
3189            selection: query,
3190            graphql_client: self.graphql_client.clone(),
3191        }]
3192    }
3193    /// Retrieves the list of paths where a directory is mounted.
3194    pub async fn mounts(&self) -> Result<Vec<String>, DaggerError> {
3195        let query = self.selection.select("mounts");
3196        query.execute(self.graphql_client.clone()).await
3197    }
3198    /// The platform this container executes and publishes as.
3199    pub async fn platform(&self) -> Result<Platform, DaggerError> {
3200        let query = self.selection.select("platform");
3201        query.execute(self.graphql_client.clone()).await
3202    }
3203    /// Package the container state as an OCI image, and publish it to a registry
3204    /// Returns the fully qualified address of the published image, with digest
3205    ///
3206    /// # Arguments
3207    ///
3208    /// * `address` - The OCI address to publish to
3209    ///
3210    /// Same format as "docker push". Example: "registry.example.com/user/repo:tag"
3211    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3212    pub async fn publish(&self, address: impl Into<String>) -> Result<String, DaggerError> {
3213        let mut query = self.selection.select("publish");
3214        query = query.arg("address", address.into());
3215        query.execute(self.graphql_client.clone()).await
3216    }
3217    /// Package the container state as an OCI image, and publish it to a registry
3218    /// Returns the fully qualified address of the published image, with digest
3219    ///
3220    /// # Arguments
3221    ///
3222    /// * `address` - The OCI address to publish to
3223    ///
3224    /// Same format as "docker push". Example: "registry.example.com/user/repo:tag"
3225    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3226    pub async fn publish_opts(
3227        &self,
3228        address: impl Into<String>,
3229        opts: ContainerPublishOpts,
3230    ) -> Result<String, DaggerError> {
3231        let mut query = self.selection.select("publish");
3232        query = query.arg("address", address.into());
3233        if let Some(platform_variants) = opts.platform_variants {
3234            query = query.arg("platformVariants", platform_variants);
3235        }
3236        if let Some(forced_compression) = opts.forced_compression {
3237            query = query.arg("forcedCompression", forced_compression);
3238        }
3239        if let Some(media_types) = opts.media_types {
3240            query = query.arg("mediaTypes", media_types);
3241        }
3242        query.execute(self.graphql_client.clone()).await
3243    }
3244    /// Return a snapshot of the container's root filesystem. The snapshot can be modified then written back using withRootfs. Use that method for filesystem modifications.
3245    pub fn rootfs(&self) -> Directory {
3246        let query = self.selection.select("rootfs");
3247        Directory {
3248            proc: self.proc.clone(),
3249            selection: query,
3250            graphql_client: self.graphql_client.clone(),
3251        }
3252    }
3253    /// The buffered standard error stream of the last executed command
3254    /// Returns an error if no command was executed
3255    pub async fn stderr(&self) -> Result<String, DaggerError> {
3256        let query = self.selection.select("stderr");
3257        query.execute(self.graphql_client.clone()).await
3258    }
3259    /// The buffered standard output stream of the last executed command
3260    /// Returns an error if no command was executed
3261    pub async fn stdout(&self) -> Result<String, DaggerError> {
3262        let query = self.selection.select("stdout");
3263        query.execute(self.graphql_client.clone()).await
3264    }
3265    /// Forces evaluation of the pipeline in the engine.
3266    /// It doesn't run the default command if no exec has been set.
3267    pub async fn sync(&self) -> Result<ContainerId, DaggerError> {
3268        let query = self.selection.select("sync");
3269        query.execute(self.graphql_client.clone()).await
3270    }
3271    /// Opens an interactive terminal for this container using its configured default terminal command if not overridden by args (or sh as a fallback default).
3272    ///
3273    /// # Arguments
3274    ///
3275    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3276    pub fn terminal(&self) -> Container {
3277        let query = self.selection.select("terminal");
3278        Container {
3279            proc: self.proc.clone(),
3280            selection: query,
3281            graphql_client: self.graphql_client.clone(),
3282        }
3283    }
3284    /// Opens an interactive terminal for this container using its configured default terminal command if not overridden by args (or sh as a fallback default).
3285    ///
3286    /// # Arguments
3287    ///
3288    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3289    pub fn terminal_opts<'a>(&self, opts: ContainerTerminalOpts<'a>) -> Container {
3290        let mut query = self.selection.select("terminal");
3291        if let Some(cmd) = opts.cmd {
3292            query = query.arg("cmd", cmd);
3293        }
3294        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
3295            query = query.arg(
3296                "experimentalPrivilegedNesting",
3297                experimental_privileged_nesting,
3298            );
3299        }
3300        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
3301            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
3302        }
3303        Container {
3304            proc: self.proc.clone(),
3305            selection: query,
3306            graphql_client: self.graphql_client.clone(),
3307        }
3308    }
3309    /// Starts a Service and creates a tunnel that forwards traffic from the caller's network to that service.
3310    /// Be sure to set any exposed ports before calling this api.
3311    ///
3312    /// # Arguments
3313    ///
3314    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3315    pub async fn up(&self) -> Result<Void, DaggerError> {
3316        let query = self.selection.select("up");
3317        query.execute(self.graphql_client.clone()).await
3318    }
3319    /// Starts a Service and creates a tunnel that forwards traffic from the caller's network to that service.
3320    /// Be sure to set any exposed ports before calling this api.
3321    ///
3322    /// # Arguments
3323    ///
3324    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3325    pub async fn up_opts<'a>(&self, opts: ContainerUpOpts<'a>) -> Result<Void, DaggerError> {
3326        let mut query = self.selection.select("up");
3327        if let Some(random) = opts.random {
3328            query = query.arg("random", random);
3329        }
3330        if let Some(ports) = opts.ports {
3331            query = query.arg("ports", ports);
3332        }
3333        if let Some(args) = opts.args {
3334            query = query.arg("args", args);
3335        }
3336        if let Some(use_entrypoint) = opts.use_entrypoint {
3337            query = query.arg("useEntrypoint", use_entrypoint);
3338        }
3339        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
3340            query = query.arg(
3341                "experimentalPrivilegedNesting",
3342                experimental_privileged_nesting,
3343            );
3344        }
3345        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
3346            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
3347        }
3348        if let Some(expand) = opts.expand {
3349            query = query.arg("expand", expand);
3350        }
3351        if let Some(no_init) = opts.no_init {
3352            query = query.arg("noInit", no_init);
3353        }
3354        query.execute(self.graphql_client.clone()).await
3355    }
3356    /// Retrieves the user to be set for all commands.
3357    pub async fn user(&self) -> Result<String, DaggerError> {
3358        let query = self.selection.select("user");
3359        query.execute(self.graphql_client.clone()).await
3360    }
3361    /// Retrieves this container plus the given OCI anotation.
3362    ///
3363    /// # Arguments
3364    ///
3365    /// * `name` - The name of the annotation.
3366    /// * `value` - The value of the annotation.
3367    pub fn with_annotation(&self, name: impl Into<String>, value: impl Into<String>) -> Container {
3368        let mut query = self.selection.select("withAnnotation");
3369        query = query.arg("name", name.into());
3370        query = query.arg("value", value.into());
3371        Container {
3372            proc: self.proc.clone(),
3373            selection: query,
3374            graphql_client: self.graphql_client.clone(),
3375        }
3376    }
3377    /// Configures default arguments for future commands. Like CMD in Dockerfile.
3378    ///
3379    /// # Arguments
3380    ///
3381    /// * `args` - Arguments to prepend to future executions (e.g., ["-v", "--no-cache"]).
3382    pub fn with_default_args(&self, args: Vec<impl Into<String>>) -> Container {
3383        let mut query = self.selection.select("withDefaultArgs");
3384        query = query.arg(
3385            "args",
3386            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3387        );
3388        Container {
3389            proc: self.proc.clone(),
3390            selection: query,
3391            graphql_client: self.graphql_client.clone(),
3392        }
3393    }
3394    /// Set the default command to invoke for the container's terminal API.
3395    ///
3396    /// # Arguments
3397    ///
3398    /// * `args` - The args of the command.
3399    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3400    pub fn with_default_terminal_cmd(&self, args: Vec<impl Into<String>>) -> Container {
3401        let mut query = self.selection.select("withDefaultTerminalCmd");
3402        query = query.arg(
3403            "args",
3404            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3405        );
3406        Container {
3407            proc: self.proc.clone(),
3408            selection: query,
3409            graphql_client: self.graphql_client.clone(),
3410        }
3411    }
3412    /// Set the default command to invoke for the container's terminal API.
3413    ///
3414    /// # Arguments
3415    ///
3416    /// * `args` - The args of the command.
3417    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3418    pub fn with_default_terminal_cmd_opts(
3419        &self,
3420        args: Vec<impl Into<String>>,
3421        opts: ContainerWithDefaultTerminalCmdOpts,
3422    ) -> Container {
3423        let mut query = self.selection.select("withDefaultTerminalCmd");
3424        query = query.arg(
3425            "args",
3426            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3427        );
3428        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
3429            query = query.arg(
3430                "experimentalPrivilegedNesting",
3431                experimental_privileged_nesting,
3432            );
3433        }
3434        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
3435            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
3436        }
3437        Container {
3438            proc: self.proc.clone(),
3439            selection: query,
3440            graphql_client: self.graphql_client.clone(),
3441        }
3442    }
3443    /// Return a new container snapshot, with a directory added to its filesystem
3444    ///
3445    /// # Arguments
3446    ///
3447    /// * `path` - Location of the written directory (e.g., "/tmp/directory").
3448    /// * `source` - Identifier of the directory to write
3449    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3450    pub fn with_directory(
3451        &self,
3452        path: impl Into<String>,
3453        source: impl IntoID<DirectoryId>,
3454    ) -> Container {
3455        let mut query = self.selection.select("withDirectory");
3456        query = query.arg("path", path.into());
3457        query = query.arg_lazy(
3458            "source",
3459            Box::new(move || {
3460                let source = source.clone();
3461                Box::pin(async move { source.into_id().await.unwrap().quote() })
3462            }),
3463        );
3464        Container {
3465            proc: self.proc.clone(),
3466            selection: query,
3467            graphql_client: self.graphql_client.clone(),
3468        }
3469    }
3470    /// Return a new container snapshot, with a directory added to its filesystem
3471    ///
3472    /// # Arguments
3473    ///
3474    /// * `path` - Location of the written directory (e.g., "/tmp/directory").
3475    /// * `source` - Identifier of the directory to write
3476    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3477    pub fn with_directory_opts<'a>(
3478        &self,
3479        path: impl Into<String>,
3480        source: impl IntoID<DirectoryId>,
3481        opts: ContainerWithDirectoryOpts<'a>,
3482    ) -> Container {
3483        let mut query = self.selection.select("withDirectory");
3484        query = query.arg("path", path.into());
3485        query = query.arg_lazy(
3486            "source",
3487            Box::new(move || {
3488                let source = source.clone();
3489                Box::pin(async move { source.into_id().await.unwrap().quote() })
3490            }),
3491        );
3492        if let Some(exclude) = opts.exclude {
3493            query = query.arg("exclude", exclude);
3494        }
3495        if let Some(include) = opts.include {
3496            query = query.arg("include", include);
3497        }
3498        if let Some(gitignore) = opts.gitignore {
3499            query = query.arg("gitignore", gitignore);
3500        }
3501        if let Some(owner) = opts.owner {
3502            query = query.arg("owner", owner);
3503        }
3504        if let Some(expand) = opts.expand {
3505            query = query.arg("expand", expand);
3506        }
3507        Container {
3508            proc: self.proc.clone(),
3509            selection: query,
3510            graphql_client: self.graphql_client.clone(),
3511        }
3512    }
3513    /// Set an OCI-style entrypoint. It will be included in the container's OCI configuration. Note, withExec ignores the entrypoint by default.
3514    ///
3515    /// # Arguments
3516    ///
3517    /// * `args` - Arguments of the entrypoint. Example: ["go", "run"].
3518    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3519    pub fn with_entrypoint(&self, args: Vec<impl Into<String>>) -> Container {
3520        let mut query = self.selection.select("withEntrypoint");
3521        query = query.arg(
3522            "args",
3523            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3524        );
3525        Container {
3526            proc: self.proc.clone(),
3527            selection: query,
3528            graphql_client: self.graphql_client.clone(),
3529        }
3530    }
3531    /// Set an OCI-style entrypoint. It will be included in the container's OCI configuration. Note, withExec ignores the entrypoint by default.
3532    ///
3533    /// # Arguments
3534    ///
3535    /// * `args` - Arguments of the entrypoint. Example: ["go", "run"].
3536    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3537    pub fn with_entrypoint_opts(
3538        &self,
3539        args: Vec<impl Into<String>>,
3540        opts: ContainerWithEntrypointOpts,
3541    ) -> Container {
3542        let mut query = self.selection.select("withEntrypoint");
3543        query = query.arg(
3544            "args",
3545            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3546        );
3547        if let Some(keep_default_args) = opts.keep_default_args {
3548            query = query.arg("keepDefaultArgs", keep_default_args);
3549        }
3550        Container {
3551            proc: self.proc.clone(),
3552            selection: query,
3553            graphql_client: self.graphql_client.clone(),
3554        }
3555    }
3556    /// Set a new environment variable in the container.
3557    ///
3558    /// # Arguments
3559    ///
3560    /// * `name` - Name of the environment variable (e.g., "HOST").
3561    /// * `value` - Value of the environment variable. (e.g., "localhost").
3562    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3563    pub fn with_env_variable(
3564        &self,
3565        name: impl Into<String>,
3566        value: impl Into<String>,
3567    ) -> Container {
3568        let mut query = self.selection.select("withEnvVariable");
3569        query = query.arg("name", name.into());
3570        query = query.arg("value", value.into());
3571        Container {
3572            proc: self.proc.clone(),
3573            selection: query,
3574            graphql_client: self.graphql_client.clone(),
3575        }
3576    }
3577    /// Set a new environment variable in the container.
3578    ///
3579    /// # Arguments
3580    ///
3581    /// * `name` - Name of the environment variable (e.g., "HOST").
3582    /// * `value` - Value of the environment variable. (e.g., "localhost").
3583    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3584    pub fn with_env_variable_opts(
3585        &self,
3586        name: impl Into<String>,
3587        value: impl Into<String>,
3588        opts: ContainerWithEnvVariableOpts,
3589    ) -> Container {
3590        let mut query = self.selection.select("withEnvVariable");
3591        query = query.arg("name", name.into());
3592        query = query.arg("value", value.into());
3593        if let Some(expand) = opts.expand {
3594            query = query.arg("expand", expand);
3595        }
3596        Container {
3597            proc: self.proc.clone(),
3598            selection: query,
3599            graphql_client: self.graphql_client.clone(),
3600        }
3601    }
3602    /// Raise an error.
3603    ///
3604    /// # Arguments
3605    ///
3606    /// * `err` - Message of the error to raise. If empty, the error will be ignored.
3607    pub fn with_error(&self, err: impl Into<String>) -> Container {
3608        let mut query = self.selection.select("withError");
3609        query = query.arg("err", err.into());
3610        Container {
3611            proc: self.proc.clone(),
3612            selection: query,
3613            graphql_client: self.graphql_client.clone(),
3614        }
3615    }
3616    /// Execute a command in the container, and return a new snapshot of the container state after execution.
3617    ///
3618    /// # Arguments
3619    ///
3620    /// * `args` - Command to execute. Must be valid exec() arguments, not a shell command. Example: ["go", "run", "main.go"].
3621    ///
3622    /// To run a shell command, execute the shell and pass the shell command as argument. Example: ["sh", "-c", "ls -l | grep foo"]
3623    ///
3624    /// Defaults to the container's default arguments (see "defaultArgs" and "withDefaultArgs").
3625    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3626    pub fn with_exec(&self, args: Vec<impl Into<String>>) -> Container {
3627        let mut query = self.selection.select("withExec");
3628        query = query.arg(
3629            "args",
3630            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3631        );
3632        Container {
3633            proc: self.proc.clone(),
3634            selection: query,
3635            graphql_client: self.graphql_client.clone(),
3636        }
3637    }
3638    /// Execute a command in the container, and return a new snapshot of the container state after execution.
3639    ///
3640    /// # Arguments
3641    ///
3642    /// * `args` - Command to execute. Must be valid exec() arguments, not a shell command. Example: ["go", "run", "main.go"].
3643    ///
3644    /// To run a shell command, execute the shell and pass the shell command as argument. Example: ["sh", "-c", "ls -l | grep foo"]
3645    ///
3646    /// Defaults to the container's default arguments (see "defaultArgs" and "withDefaultArgs").
3647    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3648    pub fn with_exec_opts<'a>(
3649        &self,
3650        args: Vec<impl Into<String>>,
3651        opts: ContainerWithExecOpts<'a>,
3652    ) -> Container {
3653        let mut query = self.selection.select("withExec");
3654        query = query.arg(
3655            "args",
3656            args.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
3657        );
3658        if let Some(use_entrypoint) = opts.use_entrypoint {
3659            query = query.arg("useEntrypoint", use_entrypoint);
3660        }
3661        if let Some(stdin) = opts.stdin {
3662            query = query.arg("stdin", stdin);
3663        }
3664        if let Some(redirect_stdin) = opts.redirect_stdin {
3665            query = query.arg("redirectStdin", redirect_stdin);
3666        }
3667        if let Some(redirect_stdout) = opts.redirect_stdout {
3668            query = query.arg("redirectStdout", redirect_stdout);
3669        }
3670        if let Some(redirect_stderr) = opts.redirect_stderr {
3671            query = query.arg("redirectStderr", redirect_stderr);
3672        }
3673        if let Some(expect) = opts.expect {
3674            query = query.arg("expect", expect);
3675        }
3676        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
3677            query = query.arg(
3678                "experimentalPrivilegedNesting",
3679                experimental_privileged_nesting,
3680            );
3681        }
3682        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
3683            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
3684        }
3685        if let Some(expand) = opts.expand {
3686            query = query.arg("expand", expand);
3687        }
3688        if let Some(no_init) = opts.no_init {
3689            query = query.arg("noInit", no_init);
3690        }
3691        Container {
3692            proc: self.proc.clone(),
3693            selection: query,
3694            graphql_client: self.graphql_client.clone(),
3695        }
3696    }
3697    /// Expose a network port. Like EXPOSE in Dockerfile (but with healthcheck support)
3698    /// Exposed ports serve two purposes:
3699    /// - For health checks and introspection, when running services
3700    /// - For setting the EXPOSE OCI field when publishing the container
3701    ///
3702    /// # Arguments
3703    ///
3704    /// * `port` - Port number to expose. Example: 8080
3705    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3706    pub fn with_exposed_port(&self, port: isize) -> Container {
3707        let mut query = self.selection.select("withExposedPort");
3708        query = query.arg("port", port);
3709        Container {
3710            proc: self.proc.clone(),
3711            selection: query,
3712            graphql_client: self.graphql_client.clone(),
3713        }
3714    }
3715    /// Expose a network port. Like EXPOSE in Dockerfile (but with healthcheck support)
3716    /// Exposed ports serve two purposes:
3717    /// - For health checks and introspection, when running services
3718    /// - For setting the EXPOSE OCI field when publishing the container
3719    ///
3720    /// # Arguments
3721    ///
3722    /// * `port` - Port number to expose. Example: 8080
3723    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3724    pub fn with_exposed_port_opts<'a>(
3725        &self,
3726        port: isize,
3727        opts: ContainerWithExposedPortOpts<'a>,
3728    ) -> Container {
3729        let mut query = self.selection.select("withExposedPort");
3730        query = query.arg("port", port);
3731        if let Some(protocol) = opts.protocol {
3732            query = query.arg("protocol", protocol);
3733        }
3734        if let Some(description) = opts.description {
3735            query = query.arg("description", description);
3736        }
3737        if let Some(experimental_skip_healthcheck) = opts.experimental_skip_healthcheck {
3738            query = query.arg("experimentalSkipHealthcheck", experimental_skip_healthcheck);
3739        }
3740        Container {
3741            proc: self.proc.clone(),
3742            selection: query,
3743            graphql_client: self.graphql_client.clone(),
3744        }
3745    }
3746    /// Return a container snapshot with a file added
3747    ///
3748    /// # Arguments
3749    ///
3750    /// * `path` - Path of the new file. Example: "/path/to/new-file.txt"
3751    /// * `source` - File to add
3752    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3753    pub fn with_file(&self, path: impl Into<String>, source: impl IntoID<FileId>) -> Container {
3754        let mut query = self.selection.select("withFile");
3755        query = query.arg("path", path.into());
3756        query = query.arg_lazy(
3757            "source",
3758            Box::new(move || {
3759                let source = source.clone();
3760                Box::pin(async move { source.into_id().await.unwrap().quote() })
3761            }),
3762        );
3763        Container {
3764            proc: self.proc.clone(),
3765            selection: query,
3766            graphql_client: self.graphql_client.clone(),
3767        }
3768    }
3769    /// Return a container snapshot with a file added
3770    ///
3771    /// # Arguments
3772    ///
3773    /// * `path` - Path of the new file. Example: "/path/to/new-file.txt"
3774    /// * `source` - File to add
3775    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3776    pub fn with_file_opts<'a>(
3777        &self,
3778        path: impl Into<String>,
3779        source: impl IntoID<FileId>,
3780        opts: ContainerWithFileOpts<'a>,
3781    ) -> Container {
3782        let mut query = self.selection.select("withFile");
3783        query = query.arg("path", path.into());
3784        query = query.arg_lazy(
3785            "source",
3786            Box::new(move || {
3787                let source = source.clone();
3788                Box::pin(async move { source.into_id().await.unwrap().quote() })
3789            }),
3790        );
3791        if let Some(permissions) = opts.permissions {
3792            query = query.arg("permissions", permissions);
3793        }
3794        if let Some(owner) = opts.owner {
3795            query = query.arg("owner", owner);
3796        }
3797        if let Some(expand) = opts.expand {
3798            query = query.arg("expand", expand);
3799        }
3800        Container {
3801            proc: self.proc.clone(),
3802            selection: query,
3803            graphql_client: self.graphql_client.clone(),
3804        }
3805    }
3806    /// Retrieves this container plus the contents of the given files copied to the given path.
3807    ///
3808    /// # Arguments
3809    ///
3810    /// * `path` - Location where copied files should be placed (e.g., "/src").
3811    /// * `sources` - Identifiers of the files to copy.
3812    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3813    pub fn with_files(&self, path: impl Into<String>, sources: Vec<FileId>) -> Container {
3814        let mut query = self.selection.select("withFiles");
3815        query = query.arg("path", path.into());
3816        query = query.arg("sources", sources);
3817        Container {
3818            proc: self.proc.clone(),
3819            selection: query,
3820            graphql_client: self.graphql_client.clone(),
3821        }
3822    }
3823    /// Retrieves this container plus the contents of the given files copied to the given path.
3824    ///
3825    /// # Arguments
3826    ///
3827    /// * `path` - Location where copied files should be placed (e.g., "/src").
3828    /// * `sources` - Identifiers of the files to copy.
3829    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3830    pub fn with_files_opts<'a>(
3831        &self,
3832        path: impl Into<String>,
3833        sources: Vec<FileId>,
3834        opts: ContainerWithFilesOpts<'a>,
3835    ) -> Container {
3836        let mut query = self.selection.select("withFiles");
3837        query = query.arg("path", path.into());
3838        query = query.arg("sources", sources);
3839        if let Some(permissions) = opts.permissions {
3840            query = query.arg("permissions", permissions);
3841        }
3842        if let Some(owner) = opts.owner {
3843            query = query.arg("owner", owner);
3844        }
3845        if let Some(expand) = opts.expand {
3846            query = query.arg("expand", expand);
3847        }
3848        Container {
3849            proc: self.proc.clone(),
3850            selection: query,
3851            graphql_client: self.graphql_client.clone(),
3852        }
3853    }
3854    /// Retrieves this container plus the given label.
3855    ///
3856    /// # Arguments
3857    ///
3858    /// * `name` - The name of the label (e.g., "org.opencontainers.artifact.created").
3859    /// * `value` - The value of the label (e.g., "2023-01-01T00:00:00Z").
3860    pub fn with_label(&self, name: impl Into<String>, value: impl Into<String>) -> Container {
3861        let mut query = self.selection.select("withLabel");
3862        query = query.arg("name", name.into());
3863        query = query.arg("value", value.into());
3864        Container {
3865            proc: self.proc.clone(),
3866            selection: query,
3867            graphql_client: self.graphql_client.clone(),
3868        }
3869    }
3870    /// Retrieves this container plus a cache volume mounted at the given path.
3871    ///
3872    /// # Arguments
3873    ///
3874    /// * `path` - Location of the cache directory (e.g., "/root/.npm").
3875    /// * `cache` - Identifier of the cache volume to mount.
3876    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3877    pub fn with_mounted_cache(
3878        &self,
3879        path: impl Into<String>,
3880        cache: impl IntoID<CacheVolumeId>,
3881    ) -> Container {
3882        let mut query = self.selection.select("withMountedCache");
3883        query = query.arg("path", path.into());
3884        query = query.arg_lazy(
3885            "cache",
3886            Box::new(move || {
3887                let cache = cache.clone();
3888                Box::pin(async move { cache.into_id().await.unwrap().quote() })
3889            }),
3890        );
3891        Container {
3892            proc: self.proc.clone(),
3893            selection: query,
3894            graphql_client: self.graphql_client.clone(),
3895        }
3896    }
3897    /// Retrieves this container plus a cache volume mounted at the given path.
3898    ///
3899    /// # Arguments
3900    ///
3901    /// * `path` - Location of the cache directory (e.g., "/root/.npm").
3902    /// * `cache` - Identifier of the cache volume to mount.
3903    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3904    pub fn with_mounted_cache_opts<'a>(
3905        &self,
3906        path: impl Into<String>,
3907        cache: impl IntoID<CacheVolumeId>,
3908        opts: ContainerWithMountedCacheOpts<'a>,
3909    ) -> Container {
3910        let mut query = self.selection.select("withMountedCache");
3911        query = query.arg("path", path.into());
3912        query = query.arg_lazy(
3913            "cache",
3914            Box::new(move || {
3915                let cache = cache.clone();
3916                Box::pin(async move { cache.into_id().await.unwrap().quote() })
3917            }),
3918        );
3919        if let Some(source) = opts.source {
3920            query = query.arg("source", source);
3921        }
3922        if let Some(sharing) = opts.sharing {
3923            query = query.arg("sharing", sharing);
3924        }
3925        if let Some(owner) = opts.owner {
3926            query = query.arg("owner", owner);
3927        }
3928        if let Some(expand) = opts.expand {
3929            query = query.arg("expand", expand);
3930        }
3931        Container {
3932            proc: self.proc.clone(),
3933            selection: query,
3934            graphql_client: self.graphql_client.clone(),
3935        }
3936    }
3937    /// Retrieves this container plus a directory mounted at the given path.
3938    ///
3939    /// # Arguments
3940    ///
3941    /// * `path` - Location of the mounted directory (e.g., "/mnt/directory").
3942    /// * `source` - Identifier of the mounted directory.
3943    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3944    pub fn with_mounted_directory(
3945        &self,
3946        path: impl Into<String>,
3947        source: impl IntoID<DirectoryId>,
3948    ) -> Container {
3949        let mut query = self.selection.select("withMountedDirectory");
3950        query = query.arg("path", path.into());
3951        query = query.arg_lazy(
3952            "source",
3953            Box::new(move || {
3954                let source = source.clone();
3955                Box::pin(async move { source.into_id().await.unwrap().quote() })
3956            }),
3957        );
3958        Container {
3959            proc: self.proc.clone(),
3960            selection: query,
3961            graphql_client: self.graphql_client.clone(),
3962        }
3963    }
3964    /// Retrieves this container plus a directory mounted at the given path.
3965    ///
3966    /// # Arguments
3967    ///
3968    /// * `path` - Location of the mounted directory (e.g., "/mnt/directory").
3969    /// * `source` - Identifier of the mounted directory.
3970    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
3971    pub fn with_mounted_directory_opts<'a>(
3972        &self,
3973        path: impl Into<String>,
3974        source: impl IntoID<DirectoryId>,
3975        opts: ContainerWithMountedDirectoryOpts<'a>,
3976    ) -> Container {
3977        let mut query = self.selection.select("withMountedDirectory");
3978        query = query.arg("path", path.into());
3979        query = query.arg_lazy(
3980            "source",
3981            Box::new(move || {
3982                let source = source.clone();
3983                Box::pin(async move { source.into_id().await.unwrap().quote() })
3984            }),
3985        );
3986        if let Some(owner) = opts.owner {
3987            query = query.arg("owner", owner);
3988        }
3989        if let Some(expand) = opts.expand {
3990            query = query.arg("expand", expand);
3991        }
3992        Container {
3993            proc: self.proc.clone(),
3994            selection: query,
3995            graphql_client: self.graphql_client.clone(),
3996        }
3997    }
3998    /// Retrieves this container plus a file mounted at the given path.
3999    ///
4000    /// # Arguments
4001    ///
4002    /// * `path` - Location of the mounted file (e.g., "/tmp/file.txt").
4003    /// * `source` - Identifier of the mounted file.
4004    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4005    pub fn with_mounted_file(
4006        &self,
4007        path: impl Into<String>,
4008        source: impl IntoID<FileId>,
4009    ) -> Container {
4010        let mut query = self.selection.select("withMountedFile");
4011        query = query.arg("path", path.into());
4012        query = query.arg_lazy(
4013            "source",
4014            Box::new(move || {
4015                let source = source.clone();
4016                Box::pin(async move { source.into_id().await.unwrap().quote() })
4017            }),
4018        );
4019        Container {
4020            proc: self.proc.clone(),
4021            selection: query,
4022            graphql_client: self.graphql_client.clone(),
4023        }
4024    }
4025    /// Retrieves this container plus a file mounted at the given path.
4026    ///
4027    /// # Arguments
4028    ///
4029    /// * `path` - Location of the mounted file (e.g., "/tmp/file.txt").
4030    /// * `source` - Identifier of the mounted file.
4031    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4032    pub fn with_mounted_file_opts<'a>(
4033        &self,
4034        path: impl Into<String>,
4035        source: impl IntoID<FileId>,
4036        opts: ContainerWithMountedFileOpts<'a>,
4037    ) -> Container {
4038        let mut query = self.selection.select("withMountedFile");
4039        query = query.arg("path", path.into());
4040        query = query.arg_lazy(
4041            "source",
4042            Box::new(move || {
4043                let source = source.clone();
4044                Box::pin(async move { source.into_id().await.unwrap().quote() })
4045            }),
4046        );
4047        if let Some(owner) = opts.owner {
4048            query = query.arg("owner", owner);
4049        }
4050        if let Some(expand) = opts.expand {
4051            query = query.arg("expand", expand);
4052        }
4053        Container {
4054            proc: self.proc.clone(),
4055            selection: query,
4056            graphql_client: self.graphql_client.clone(),
4057        }
4058    }
4059    /// Retrieves this container plus a secret mounted into a file at the given path.
4060    ///
4061    /// # Arguments
4062    ///
4063    /// * `path` - Location of the secret file (e.g., "/tmp/secret.txt").
4064    /// * `source` - Identifier of the secret to mount.
4065    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4066    pub fn with_mounted_secret(
4067        &self,
4068        path: impl Into<String>,
4069        source: impl IntoID<SecretId>,
4070    ) -> Container {
4071        let mut query = self.selection.select("withMountedSecret");
4072        query = query.arg("path", path.into());
4073        query = query.arg_lazy(
4074            "source",
4075            Box::new(move || {
4076                let source = source.clone();
4077                Box::pin(async move { source.into_id().await.unwrap().quote() })
4078            }),
4079        );
4080        Container {
4081            proc: self.proc.clone(),
4082            selection: query,
4083            graphql_client: self.graphql_client.clone(),
4084        }
4085    }
4086    /// Retrieves this container plus a secret mounted into a file at the given path.
4087    ///
4088    /// # Arguments
4089    ///
4090    /// * `path` - Location of the secret file (e.g., "/tmp/secret.txt").
4091    /// * `source` - Identifier of the secret to mount.
4092    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4093    pub fn with_mounted_secret_opts<'a>(
4094        &self,
4095        path: impl Into<String>,
4096        source: impl IntoID<SecretId>,
4097        opts: ContainerWithMountedSecretOpts<'a>,
4098    ) -> Container {
4099        let mut query = self.selection.select("withMountedSecret");
4100        query = query.arg("path", path.into());
4101        query = query.arg_lazy(
4102            "source",
4103            Box::new(move || {
4104                let source = source.clone();
4105                Box::pin(async move { source.into_id().await.unwrap().quote() })
4106            }),
4107        );
4108        if let Some(owner) = opts.owner {
4109            query = query.arg("owner", owner);
4110        }
4111        if let Some(mode) = opts.mode {
4112            query = query.arg("mode", mode);
4113        }
4114        if let Some(expand) = opts.expand {
4115            query = query.arg("expand", expand);
4116        }
4117        Container {
4118            proc: self.proc.clone(),
4119            selection: query,
4120            graphql_client: self.graphql_client.clone(),
4121        }
4122    }
4123    /// Retrieves this container plus a temporary directory mounted at the given path. Any writes will be ephemeral to a single withExec call; they will not be persisted to subsequent withExecs.
4124    ///
4125    /// # Arguments
4126    ///
4127    /// * `path` - Location of the temporary directory (e.g., "/tmp/temp_dir").
4128    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4129    pub fn with_mounted_temp(&self, path: impl Into<String>) -> Container {
4130        let mut query = self.selection.select("withMountedTemp");
4131        query = query.arg("path", path.into());
4132        Container {
4133            proc: self.proc.clone(),
4134            selection: query,
4135            graphql_client: self.graphql_client.clone(),
4136        }
4137    }
4138    /// Retrieves this container plus a temporary directory mounted at the given path. Any writes will be ephemeral to a single withExec call; they will not be persisted to subsequent withExecs.
4139    ///
4140    /// # Arguments
4141    ///
4142    /// * `path` - Location of the temporary directory (e.g., "/tmp/temp_dir").
4143    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4144    pub fn with_mounted_temp_opts(
4145        &self,
4146        path: impl Into<String>,
4147        opts: ContainerWithMountedTempOpts,
4148    ) -> Container {
4149        let mut query = self.selection.select("withMountedTemp");
4150        query = query.arg("path", path.into());
4151        if let Some(size) = opts.size {
4152            query = query.arg("size", size);
4153        }
4154        if let Some(expand) = opts.expand {
4155            query = query.arg("expand", expand);
4156        }
4157        Container {
4158            proc: self.proc.clone(),
4159            selection: query,
4160            graphql_client: self.graphql_client.clone(),
4161        }
4162    }
4163    /// Return a new container snapshot, with a file added to its filesystem with text content
4164    ///
4165    /// # Arguments
4166    ///
4167    /// * `path` - Path of the new file. May be relative or absolute. Example: "README.md" or "/etc/profile"
4168    /// * `contents` - Contents of the new file. Example: "Hello world!"
4169    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4170    pub fn with_new_file(&self, path: impl Into<String>, contents: impl Into<String>) -> Container {
4171        let mut query = self.selection.select("withNewFile");
4172        query = query.arg("path", path.into());
4173        query = query.arg("contents", contents.into());
4174        Container {
4175            proc: self.proc.clone(),
4176            selection: query,
4177            graphql_client: self.graphql_client.clone(),
4178        }
4179    }
4180    /// Return a new container snapshot, with a file added to its filesystem with text content
4181    ///
4182    /// # Arguments
4183    ///
4184    /// * `path` - Path of the new file. May be relative or absolute. Example: "README.md" or "/etc/profile"
4185    /// * `contents` - Contents of the new file. Example: "Hello world!"
4186    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4187    pub fn with_new_file_opts<'a>(
4188        &self,
4189        path: impl Into<String>,
4190        contents: impl Into<String>,
4191        opts: ContainerWithNewFileOpts<'a>,
4192    ) -> Container {
4193        let mut query = self.selection.select("withNewFile");
4194        query = query.arg("path", path.into());
4195        query = query.arg("contents", contents.into());
4196        if let Some(permissions) = opts.permissions {
4197            query = query.arg("permissions", permissions);
4198        }
4199        if let Some(owner) = opts.owner {
4200            query = query.arg("owner", owner);
4201        }
4202        if let Some(expand) = opts.expand {
4203            query = query.arg("expand", expand);
4204        }
4205        Container {
4206            proc: self.proc.clone(),
4207            selection: query,
4208            graphql_client: self.graphql_client.clone(),
4209        }
4210    }
4211    /// Attach credentials for future publishing to a registry. Use in combination with publish
4212    ///
4213    /// # Arguments
4214    ///
4215    /// * `address` - The image address that needs authentication. Same format as "docker push". Example: "registry.dagger.io/dagger:latest"
4216    /// * `username` - The username to authenticate with. Example: "alice"
4217    /// * `secret` - The API key, password or token to authenticate to this registry
4218    pub fn with_registry_auth(
4219        &self,
4220        address: impl Into<String>,
4221        username: impl Into<String>,
4222        secret: impl IntoID<SecretId>,
4223    ) -> Container {
4224        let mut query = self.selection.select("withRegistryAuth");
4225        query = query.arg("address", address.into());
4226        query = query.arg("username", username.into());
4227        query = query.arg_lazy(
4228            "secret",
4229            Box::new(move || {
4230                let secret = secret.clone();
4231                Box::pin(async move { secret.into_id().await.unwrap().quote() })
4232            }),
4233        );
4234        Container {
4235            proc: self.proc.clone(),
4236            selection: query,
4237            graphql_client: self.graphql_client.clone(),
4238        }
4239    }
4240    /// Change the container's root filesystem. The previous root filesystem will be lost.
4241    ///
4242    /// # Arguments
4243    ///
4244    /// * `directory` - The new root filesystem.
4245    pub fn with_rootfs(&self, directory: impl IntoID<DirectoryId>) -> Container {
4246        let mut query = self.selection.select("withRootfs");
4247        query = query.arg_lazy(
4248            "directory",
4249            Box::new(move || {
4250                let directory = directory.clone();
4251                Box::pin(async move { directory.into_id().await.unwrap().quote() })
4252            }),
4253        );
4254        Container {
4255            proc: self.proc.clone(),
4256            selection: query,
4257            graphql_client: self.graphql_client.clone(),
4258        }
4259    }
4260    /// Set a new environment variable, using a secret value
4261    ///
4262    /// # Arguments
4263    ///
4264    /// * `name` - Name of the secret variable (e.g., "API_SECRET").
4265    /// * `secret` - Identifier of the secret value.
4266    pub fn with_secret_variable(
4267        &self,
4268        name: impl Into<String>,
4269        secret: impl IntoID<SecretId>,
4270    ) -> Container {
4271        let mut query = self.selection.select("withSecretVariable");
4272        query = query.arg("name", name.into());
4273        query = query.arg_lazy(
4274            "secret",
4275            Box::new(move || {
4276                let secret = secret.clone();
4277                Box::pin(async move { secret.into_id().await.unwrap().quote() })
4278            }),
4279        );
4280        Container {
4281            proc: self.proc.clone(),
4282            selection: query,
4283            graphql_client: self.graphql_client.clone(),
4284        }
4285    }
4286    /// Establish a runtime dependency from a container to a network service.
4287    /// The service will be started automatically when needed and detached when it is no longer needed, executing the default command if none is set.
4288    /// The service will be reachable from the container via the provided hostname alias.
4289    /// The service dependency will also convey to any files or directories produced by the container.
4290    ///
4291    /// # Arguments
4292    ///
4293    /// * `alias` - Hostname that will resolve to the target service (only accessible from within this container)
4294    /// * `service` - The target service
4295    pub fn with_service_binding(
4296        &self,
4297        alias: impl Into<String>,
4298        service: impl IntoID<ServiceId>,
4299    ) -> Container {
4300        let mut query = self.selection.select("withServiceBinding");
4301        query = query.arg("alias", alias.into());
4302        query = query.arg_lazy(
4303            "service",
4304            Box::new(move || {
4305                let service = service.clone();
4306                Box::pin(async move { service.into_id().await.unwrap().quote() })
4307            }),
4308        );
4309        Container {
4310            proc: self.proc.clone(),
4311            selection: query,
4312            graphql_client: self.graphql_client.clone(),
4313        }
4314    }
4315    /// Return a snapshot with a symlink
4316    ///
4317    /// # Arguments
4318    ///
4319    /// * `target` - Location of the file or directory to link to (e.g., "/existing/file").
4320    /// * `link_name` - Location where the symbolic link will be created (e.g., "/new-file-link").
4321    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4322    pub fn with_symlink(
4323        &self,
4324        target: impl Into<String>,
4325        link_name: impl Into<String>,
4326    ) -> Container {
4327        let mut query = self.selection.select("withSymlink");
4328        query = query.arg("target", target.into());
4329        query = query.arg("linkName", link_name.into());
4330        Container {
4331            proc: self.proc.clone(),
4332            selection: query,
4333            graphql_client: self.graphql_client.clone(),
4334        }
4335    }
4336    /// Return a snapshot with a symlink
4337    ///
4338    /// # Arguments
4339    ///
4340    /// * `target` - Location of the file or directory to link to (e.g., "/existing/file").
4341    /// * `link_name` - Location where the symbolic link will be created (e.g., "/new-file-link").
4342    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4343    pub fn with_symlink_opts(
4344        &self,
4345        target: impl Into<String>,
4346        link_name: impl Into<String>,
4347        opts: ContainerWithSymlinkOpts,
4348    ) -> Container {
4349        let mut query = self.selection.select("withSymlink");
4350        query = query.arg("target", target.into());
4351        query = query.arg("linkName", link_name.into());
4352        if let Some(expand) = opts.expand {
4353            query = query.arg("expand", expand);
4354        }
4355        Container {
4356            proc: self.proc.clone(),
4357            selection: query,
4358            graphql_client: self.graphql_client.clone(),
4359        }
4360    }
4361    /// Retrieves this container plus a socket forwarded to the given Unix socket path.
4362    ///
4363    /// # Arguments
4364    ///
4365    /// * `path` - Location of the forwarded Unix socket (e.g., "/tmp/socket").
4366    /// * `source` - Identifier of the socket to forward.
4367    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4368    pub fn with_unix_socket(
4369        &self,
4370        path: impl Into<String>,
4371        source: impl IntoID<SocketId>,
4372    ) -> Container {
4373        let mut query = self.selection.select("withUnixSocket");
4374        query = query.arg("path", path.into());
4375        query = query.arg_lazy(
4376            "source",
4377            Box::new(move || {
4378                let source = source.clone();
4379                Box::pin(async move { source.into_id().await.unwrap().quote() })
4380            }),
4381        );
4382        Container {
4383            proc: self.proc.clone(),
4384            selection: query,
4385            graphql_client: self.graphql_client.clone(),
4386        }
4387    }
4388    /// Retrieves this container plus a socket forwarded to the given Unix socket path.
4389    ///
4390    /// # Arguments
4391    ///
4392    /// * `path` - Location of the forwarded Unix socket (e.g., "/tmp/socket").
4393    /// * `source` - Identifier of the socket to forward.
4394    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4395    pub fn with_unix_socket_opts<'a>(
4396        &self,
4397        path: impl Into<String>,
4398        source: impl IntoID<SocketId>,
4399        opts: ContainerWithUnixSocketOpts<'a>,
4400    ) -> Container {
4401        let mut query = self.selection.select("withUnixSocket");
4402        query = query.arg("path", path.into());
4403        query = query.arg_lazy(
4404            "source",
4405            Box::new(move || {
4406                let source = source.clone();
4407                Box::pin(async move { source.into_id().await.unwrap().quote() })
4408            }),
4409        );
4410        if let Some(owner) = opts.owner {
4411            query = query.arg("owner", owner);
4412        }
4413        if let Some(expand) = opts.expand {
4414            query = query.arg("expand", expand);
4415        }
4416        Container {
4417            proc: self.proc.clone(),
4418            selection: query,
4419            graphql_client: self.graphql_client.clone(),
4420        }
4421    }
4422    /// Retrieves this container with a different command user.
4423    ///
4424    /// # Arguments
4425    ///
4426    /// * `name` - The user to set (e.g., "root").
4427    pub fn with_user(&self, name: impl Into<String>) -> Container {
4428        let mut query = self.selection.select("withUser");
4429        query = query.arg("name", name.into());
4430        Container {
4431            proc: self.proc.clone(),
4432            selection: query,
4433            graphql_client: self.graphql_client.clone(),
4434        }
4435    }
4436    /// Change the container's working directory. Like WORKDIR in Dockerfile.
4437    ///
4438    /// # Arguments
4439    ///
4440    /// * `path` - The path to set as the working directory (e.g., "/app").
4441    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4442    pub fn with_workdir(&self, path: impl Into<String>) -> Container {
4443        let mut query = self.selection.select("withWorkdir");
4444        query = query.arg("path", path.into());
4445        Container {
4446            proc: self.proc.clone(),
4447            selection: query,
4448            graphql_client: self.graphql_client.clone(),
4449        }
4450    }
4451    /// Change the container's working directory. Like WORKDIR in Dockerfile.
4452    ///
4453    /// # Arguments
4454    ///
4455    /// * `path` - The path to set as the working directory (e.g., "/app").
4456    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4457    pub fn with_workdir_opts(
4458        &self,
4459        path: impl Into<String>,
4460        opts: ContainerWithWorkdirOpts,
4461    ) -> Container {
4462        let mut query = self.selection.select("withWorkdir");
4463        query = query.arg("path", path.into());
4464        if let Some(expand) = opts.expand {
4465            query = query.arg("expand", expand);
4466        }
4467        Container {
4468            proc: self.proc.clone(),
4469            selection: query,
4470            graphql_client: self.graphql_client.clone(),
4471        }
4472    }
4473    /// Retrieves this container minus the given OCI annotation.
4474    ///
4475    /// # Arguments
4476    ///
4477    /// * `name` - The name of the annotation.
4478    pub fn without_annotation(&self, name: impl Into<String>) -> Container {
4479        let mut query = self.selection.select("withoutAnnotation");
4480        query = query.arg("name", name.into());
4481        Container {
4482            proc: self.proc.clone(),
4483            selection: query,
4484            graphql_client: self.graphql_client.clone(),
4485        }
4486    }
4487    /// Remove the container's default arguments.
4488    pub fn without_default_args(&self) -> Container {
4489        let query = self.selection.select("withoutDefaultArgs");
4490        Container {
4491            proc: self.proc.clone(),
4492            selection: query,
4493            graphql_client: self.graphql_client.clone(),
4494        }
4495    }
4496    /// Return a new container snapshot, with a directory removed from its filesystem
4497    ///
4498    /// # Arguments
4499    ///
4500    /// * `path` - Location of the directory to remove (e.g., ".github/").
4501    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4502    pub fn without_directory(&self, path: impl Into<String>) -> Container {
4503        let mut query = self.selection.select("withoutDirectory");
4504        query = query.arg("path", path.into());
4505        Container {
4506            proc: self.proc.clone(),
4507            selection: query,
4508            graphql_client: self.graphql_client.clone(),
4509        }
4510    }
4511    /// Return a new container snapshot, with a directory removed from its filesystem
4512    ///
4513    /// # Arguments
4514    ///
4515    /// * `path` - Location of the directory to remove (e.g., ".github/").
4516    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4517    pub fn without_directory_opts(
4518        &self,
4519        path: impl Into<String>,
4520        opts: ContainerWithoutDirectoryOpts,
4521    ) -> Container {
4522        let mut query = self.selection.select("withoutDirectory");
4523        query = query.arg("path", path.into());
4524        if let Some(expand) = opts.expand {
4525            query = query.arg("expand", expand);
4526        }
4527        Container {
4528            proc: self.proc.clone(),
4529            selection: query,
4530            graphql_client: self.graphql_client.clone(),
4531        }
4532    }
4533    /// Reset the container's OCI entrypoint.
4534    ///
4535    /// # Arguments
4536    ///
4537    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4538    pub fn without_entrypoint(&self) -> Container {
4539        let query = self.selection.select("withoutEntrypoint");
4540        Container {
4541            proc: self.proc.clone(),
4542            selection: query,
4543            graphql_client: self.graphql_client.clone(),
4544        }
4545    }
4546    /// Reset the container's OCI entrypoint.
4547    ///
4548    /// # Arguments
4549    ///
4550    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4551    pub fn without_entrypoint_opts(&self, opts: ContainerWithoutEntrypointOpts) -> Container {
4552        let mut query = self.selection.select("withoutEntrypoint");
4553        if let Some(keep_default_args) = opts.keep_default_args {
4554            query = query.arg("keepDefaultArgs", keep_default_args);
4555        }
4556        Container {
4557            proc: self.proc.clone(),
4558            selection: query,
4559            graphql_client: self.graphql_client.clone(),
4560        }
4561    }
4562    /// Retrieves this container minus the given environment variable.
4563    ///
4564    /// # Arguments
4565    ///
4566    /// * `name` - The name of the environment variable (e.g., "HOST").
4567    pub fn without_env_variable(&self, name: impl Into<String>) -> Container {
4568        let mut query = self.selection.select("withoutEnvVariable");
4569        query = query.arg("name", name.into());
4570        Container {
4571            proc: self.proc.clone(),
4572            selection: query,
4573            graphql_client: self.graphql_client.clone(),
4574        }
4575    }
4576    /// Unexpose a previously exposed port.
4577    ///
4578    /// # Arguments
4579    ///
4580    /// * `port` - Port number to unexpose
4581    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4582    pub fn without_exposed_port(&self, port: isize) -> Container {
4583        let mut query = self.selection.select("withoutExposedPort");
4584        query = query.arg("port", port);
4585        Container {
4586            proc: self.proc.clone(),
4587            selection: query,
4588            graphql_client: self.graphql_client.clone(),
4589        }
4590    }
4591    /// Unexpose a previously exposed port.
4592    ///
4593    /// # Arguments
4594    ///
4595    /// * `port` - Port number to unexpose
4596    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4597    pub fn without_exposed_port_opts(
4598        &self,
4599        port: isize,
4600        opts: ContainerWithoutExposedPortOpts,
4601    ) -> Container {
4602        let mut query = self.selection.select("withoutExposedPort");
4603        query = query.arg("port", port);
4604        if let Some(protocol) = opts.protocol {
4605            query = query.arg("protocol", protocol);
4606        }
4607        Container {
4608            proc: self.proc.clone(),
4609            selection: query,
4610            graphql_client: self.graphql_client.clone(),
4611        }
4612    }
4613    /// Retrieves this container with the file at the given path removed.
4614    ///
4615    /// # Arguments
4616    ///
4617    /// * `path` - Location of the file to remove (e.g., "/file.txt").
4618    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4619    pub fn without_file(&self, path: impl Into<String>) -> Container {
4620        let mut query = self.selection.select("withoutFile");
4621        query = query.arg("path", path.into());
4622        Container {
4623            proc: self.proc.clone(),
4624            selection: query,
4625            graphql_client: self.graphql_client.clone(),
4626        }
4627    }
4628    /// Retrieves this container with the file at the given path removed.
4629    ///
4630    /// # Arguments
4631    ///
4632    /// * `path` - Location of the file to remove (e.g., "/file.txt").
4633    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4634    pub fn without_file_opts(
4635        &self,
4636        path: impl Into<String>,
4637        opts: ContainerWithoutFileOpts,
4638    ) -> Container {
4639        let mut query = self.selection.select("withoutFile");
4640        query = query.arg("path", path.into());
4641        if let Some(expand) = opts.expand {
4642            query = query.arg("expand", expand);
4643        }
4644        Container {
4645            proc: self.proc.clone(),
4646            selection: query,
4647            graphql_client: self.graphql_client.clone(),
4648        }
4649    }
4650    /// Return a new container spanshot with specified files removed
4651    ///
4652    /// # Arguments
4653    ///
4654    /// * `paths` - Paths of the files to remove. Example: ["foo.txt, "/root/.ssh/config"
4655    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4656    pub fn without_files(&self, paths: Vec<impl Into<String>>) -> Container {
4657        let mut query = self.selection.select("withoutFiles");
4658        query = query.arg(
4659            "paths",
4660            paths.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
4661        );
4662        Container {
4663            proc: self.proc.clone(),
4664            selection: query,
4665            graphql_client: self.graphql_client.clone(),
4666        }
4667    }
4668    /// Return a new container spanshot with specified files removed
4669    ///
4670    /// # Arguments
4671    ///
4672    /// * `paths` - Paths of the files to remove. Example: ["foo.txt, "/root/.ssh/config"
4673    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4674    pub fn without_files_opts(
4675        &self,
4676        paths: Vec<impl Into<String>>,
4677        opts: ContainerWithoutFilesOpts,
4678    ) -> Container {
4679        let mut query = self.selection.select("withoutFiles");
4680        query = query.arg(
4681            "paths",
4682            paths.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
4683        );
4684        if let Some(expand) = opts.expand {
4685            query = query.arg("expand", expand);
4686        }
4687        Container {
4688            proc: self.proc.clone(),
4689            selection: query,
4690            graphql_client: self.graphql_client.clone(),
4691        }
4692    }
4693    /// Retrieves this container minus the given environment label.
4694    ///
4695    /// # Arguments
4696    ///
4697    /// * `name` - The name of the label to remove (e.g., "org.opencontainers.artifact.created").
4698    pub fn without_label(&self, name: impl Into<String>) -> Container {
4699        let mut query = self.selection.select("withoutLabel");
4700        query = query.arg("name", name.into());
4701        Container {
4702            proc: self.proc.clone(),
4703            selection: query,
4704            graphql_client: self.graphql_client.clone(),
4705        }
4706    }
4707    /// Retrieves this container after unmounting everything at the given path.
4708    ///
4709    /// # Arguments
4710    ///
4711    /// * `path` - Location of the cache directory (e.g., "/root/.npm").
4712    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4713    pub fn without_mount(&self, path: impl Into<String>) -> Container {
4714        let mut query = self.selection.select("withoutMount");
4715        query = query.arg("path", path.into());
4716        Container {
4717            proc: self.proc.clone(),
4718            selection: query,
4719            graphql_client: self.graphql_client.clone(),
4720        }
4721    }
4722    /// Retrieves this container after unmounting everything at the given path.
4723    ///
4724    /// # Arguments
4725    ///
4726    /// * `path` - Location of the cache directory (e.g., "/root/.npm").
4727    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4728    pub fn without_mount_opts(
4729        &self,
4730        path: impl Into<String>,
4731        opts: ContainerWithoutMountOpts,
4732    ) -> Container {
4733        let mut query = self.selection.select("withoutMount");
4734        query = query.arg("path", path.into());
4735        if let Some(expand) = opts.expand {
4736            query = query.arg("expand", expand);
4737        }
4738        Container {
4739            proc: self.proc.clone(),
4740            selection: query,
4741            graphql_client: self.graphql_client.clone(),
4742        }
4743    }
4744    /// Retrieves this container without the registry authentication of a given address.
4745    ///
4746    /// # Arguments
4747    ///
4748    /// * `address` - Registry's address to remove the authentication from.
4749    ///
4750    /// Formatted as [host]/[user]/[repo]:[tag] (e.g. docker.io/dagger/dagger:main).
4751    pub fn without_registry_auth(&self, address: impl Into<String>) -> Container {
4752        let mut query = self.selection.select("withoutRegistryAuth");
4753        query = query.arg("address", address.into());
4754        Container {
4755            proc: self.proc.clone(),
4756            selection: query,
4757            graphql_client: self.graphql_client.clone(),
4758        }
4759    }
4760    /// Retrieves this container minus the given environment variable containing the secret.
4761    ///
4762    /// # Arguments
4763    ///
4764    /// * `name` - The name of the environment variable (e.g., "HOST").
4765    pub fn without_secret_variable(&self, name: impl Into<String>) -> Container {
4766        let mut query = self.selection.select("withoutSecretVariable");
4767        query = query.arg("name", name.into());
4768        Container {
4769            proc: self.proc.clone(),
4770            selection: query,
4771            graphql_client: self.graphql_client.clone(),
4772        }
4773    }
4774    /// Retrieves this container with a previously added Unix socket removed.
4775    ///
4776    /// # Arguments
4777    ///
4778    /// * `path` - Location of the socket to remove (e.g., "/tmp/socket").
4779    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4780    pub fn without_unix_socket(&self, path: impl Into<String>) -> Container {
4781        let mut query = self.selection.select("withoutUnixSocket");
4782        query = query.arg("path", path.into());
4783        Container {
4784            proc: self.proc.clone(),
4785            selection: query,
4786            graphql_client: self.graphql_client.clone(),
4787        }
4788    }
4789    /// Retrieves this container with a previously added Unix socket removed.
4790    ///
4791    /// # Arguments
4792    ///
4793    /// * `path` - Location of the socket to remove (e.g., "/tmp/socket").
4794    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4795    pub fn without_unix_socket_opts(
4796        &self,
4797        path: impl Into<String>,
4798        opts: ContainerWithoutUnixSocketOpts,
4799    ) -> Container {
4800        let mut query = self.selection.select("withoutUnixSocket");
4801        query = query.arg("path", path.into());
4802        if let Some(expand) = opts.expand {
4803            query = query.arg("expand", expand);
4804        }
4805        Container {
4806            proc: self.proc.clone(),
4807            selection: query,
4808            graphql_client: self.graphql_client.clone(),
4809        }
4810    }
4811    /// Retrieves this container with an unset command user.
4812    /// Should default to root.
4813    pub fn without_user(&self) -> Container {
4814        let query = self.selection.select("withoutUser");
4815        Container {
4816            proc: self.proc.clone(),
4817            selection: query,
4818            graphql_client: self.graphql_client.clone(),
4819        }
4820    }
4821    /// Unset the container's working directory.
4822    /// Should default to "/".
4823    pub fn without_workdir(&self) -> Container {
4824        let query = self.selection.select("withoutWorkdir");
4825        Container {
4826            proc: self.proc.clone(),
4827            selection: query,
4828            graphql_client: self.graphql_client.clone(),
4829        }
4830    }
4831    /// Retrieves the working directory for all commands.
4832    pub async fn workdir(&self) -> Result<String, DaggerError> {
4833        let query = self.selection.select("workdir");
4834        query.execute(self.graphql_client.clone()).await
4835    }
4836}
4837#[derive(Clone)]
4838pub struct CurrentModule {
4839    pub proc: Option<Arc<DaggerSessionProc>>,
4840    pub selection: Selection,
4841    pub graphql_client: DynGraphQLClient,
4842}
4843#[derive(Builder, Debug, PartialEq)]
4844pub struct CurrentModuleWorkdirOpts<'a> {
4845    /// Exclude artifacts that match the given pattern (e.g., ["node_modules/", ".git*"]).
4846    #[builder(setter(into, strip_option), default)]
4847    pub exclude: Option<Vec<&'a str>>,
4848    /// Apply .gitignore filter rules inside the directory
4849    #[builder(setter(into, strip_option), default)]
4850    pub gitignore: Option<bool>,
4851    /// Include only artifacts that match the given pattern (e.g., ["app/", "package.*"]).
4852    #[builder(setter(into, strip_option), default)]
4853    pub include: Option<Vec<&'a str>>,
4854}
4855impl CurrentModule {
4856    /// A unique identifier for this CurrentModule.
4857    pub async fn id(&self) -> Result<CurrentModuleId, DaggerError> {
4858        let query = self.selection.select("id");
4859        query.execute(self.graphql_client.clone()).await
4860    }
4861    /// The name of the module being executed in
4862    pub async fn name(&self) -> Result<String, DaggerError> {
4863        let query = self.selection.select("name");
4864        query.execute(self.graphql_client.clone()).await
4865    }
4866    /// The directory containing the module's source code loaded into the engine (plus any generated code that may have been created).
4867    pub fn source(&self) -> Directory {
4868        let query = self.selection.select("source");
4869        Directory {
4870            proc: self.proc.clone(),
4871            selection: query,
4872            graphql_client: self.graphql_client.clone(),
4873        }
4874    }
4875    /// Load a directory from the module's scratch working directory, including any changes that may have been made to it during module function execution.
4876    ///
4877    /// # Arguments
4878    ///
4879    /// * `path` - Location of the directory to access (e.g., ".").
4880    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4881    pub fn workdir(&self, path: impl Into<String>) -> Directory {
4882        let mut query = self.selection.select("workdir");
4883        query = query.arg("path", path.into());
4884        Directory {
4885            proc: self.proc.clone(),
4886            selection: query,
4887            graphql_client: self.graphql_client.clone(),
4888        }
4889    }
4890    /// Load a directory from the module's scratch working directory, including any changes that may have been made to it during module function execution.
4891    ///
4892    /// # Arguments
4893    ///
4894    /// * `path` - Location of the directory to access (e.g., ".").
4895    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
4896    pub fn workdir_opts<'a>(
4897        &self,
4898        path: impl Into<String>,
4899        opts: CurrentModuleWorkdirOpts<'a>,
4900    ) -> Directory {
4901        let mut query = self.selection.select("workdir");
4902        query = query.arg("path", path.into());
4903        if let Some(exclude) = opts.exclude {
4904            query = query.arg("exclude", exclude);
4905        }
4906        if let Some(include) = opts.include {
4907            query = query.arg("include", include);
4908        }
4909        if let Some(gitignore) = opts.gitignore {
4910            query = query.arg("gitignore", gitignore);
4911        }
4912        Directory {
4913            proc: self.proc.clone(),
4914            selection: query,
4915            graphql_client: self.graphql_client.clone(),
4916        }
4917    }
4918    /// Load a file from the module's scratch working directory, including any changes that may have been made to it during module function execution.Load a file from the module's scratch working directory, including any changes that may have been made to it during module function execution.
4919    ///
4920    /// # Arguments
4921    ///
4922    /// * `path` - Location of the file to retrieve (e.g., "README.md").
4923    pub fn workdir_file(&self, path: impl Into<String>) -> File {
4924        let mut query = self.selection.select("workdirFile");
4925        query = query.arg("path", path.into());
4926        File {
4927            proc: self.proc.clone(),
4928            selection: query,
4929            graphql_client: self.graphql_client.clone(),
4930        }
4931    }
4932}
4933#[derive(Clone)]
4934pub struct Directory {
4935    pub proc: Option<Arc<DaggerSessionProc>>,
4936    pub selection: Selection,
4937    pub graphql_client: DynGraphQLClient,
4938}
4939#[derive(Builder, Debug, PartialEq)]
4940pub struct DirectoryAsModuleOpts<'a> {
4941    /// An optional subpath of the directory which contains the module's configuration file.
4942    /// If not set, the module source code is loaded from the root of the directory.
4943    #[builder(setter(into, strip_option), default)]
4944    pub source_root_path: Option<&'a str>,
4945}
4946#[derive(Builder, Debug, PartialEq)]
4947pub struct DirectoryAsModuleSourceOpts<'a> {
4948    /// An optional subpath of the directory which contains the module's configuration file.
4949    /// If not set, the module source code is loaded from the root of the directory.
4950    #[builder(setter(into, strip_option), default)]
4951    pub source_root_path: Option<&'a str>,
4952}
4953#[derive(Builder, Debug, PartialEq)]
4954pub struct DirectoryDockerBuildOpts<'a> {
4955    /// Build arguments to use in the build.
4956    #[builder(setter(into, strip_option), default)]
4957    pub build_args: Option<Vec<BuildArg>>,
4958    /// Path to the Dockerfile to use (e.g., "frontend.Dockerfile").
4959    #[builder(setter(into, strip_option), default)]
4960    pub dockerfile: Option<&'a str>,
4961    /// If set, skip the automatic init process injected into containers created by RUN statements.
4962    /// This should only be used if the user requires that their exec processes be the pid 1 process in the container. Otherwise it may result in unexpected behavior.
4963    #[builder(setter(into, strip_option), default)]
4964    pub no_init: Option<bool>,
4965    /// The platform to build.
4966    #[builder(setter(into, strip_option), default)]
4967    pub platform: Option<Platform>,
4968    /// Secrets to pass to the build.
4969    /// They will be mounted at /run/secrets/[secret-name].
4970    #[builder(setter(into, strip_option), default)]
4971    pub secrets: Option<Vec<SecretId>>,
4972    /// Target build stage to build.
4973    #[builder(setter(into, strip_option), default)]
4974    pub target: Option<&'a str>,
4975}
4976#[derive(Builder, Debug, PartialEq)]
4977pub struct DirectoryEntriesOpts<'a> {
4978    /// Location of the directory to look at (e.g., "/src").
4979    #[builder(setter(into, strip_option), default)]
4980    pub path: Option<&'a str>,
4981}
4982#[derive(Builder, Debug, PartialEq)]
4983pub struct DirectoryExistsOpts {
4984    /// If specified, do not follow symlinks.
4985    #[builder(setter(into, strip_option), default)]
4986    pub do_not_follow_symlinks: Option<bool>,
4987    /// If specified, also validate the type of file (e.g. "REGULAR_TYPE", "DIRECTORY_TYPE", or "SYMLINK_TYPE").
4988    #[builder(setter(into, strip_option), default)]
4989    pub expected_type: Option<ExistsType>,
4990}
4991#[derive(Builder, Debug, PartialEq)]
4992pub struct DirectoryExportOpts {
4993    /// If true, then the host directory will be wiped clean before exporting so that it exactly matches the directory being exported; this means it will delete any files on the host that aren't in the exported dir. If false (the default), the contents of the directory will be merged with any existing contents of the host directory, leaving any existing files on the host that aren't in the exported directory alone.
4994    #[builder(setter(into, strip_option), default)]
4995    pub wipe: Option<bool>,
4996}
4997#[derive(Builder, Debug, PartialEq)]
4998pub struct DirectoryFilterOpts<'a> {
4999    /// If set, paths matching one of these glob patterns is excluded from the new snapshot. Example: ["node_modules/", ".git*", ".env"]
5000    #[builder(setter(into, strip_option), default)]
5001    pub exclude: Option<Vec<&'a str>>,
5002    /// If set, apply .gitignore rules when filtering the directory.
5003    #[builder(setter(into, strip_option), default)]
5004    pub gitignore: Option<bool>,
5005    /// If set, only paths matching one of these glob patterns is included in the new snapshot. Example: (e.g., ["app/", "package.*"]).
5006    #[builder(setter(into, strip_option), default)]
5007    pub include: Option<Vec<&'a str>>,
5008}
5009#[derive(Builder, Debug, PartialEq)]
5010pub struct DirectorySearchOpts<'a> {
5011    /// Allow the . pattern to match newlines in multiline mode.
5012    #[builder(setter(into, strip_option), default)]
5013    pub dotall: Option<bool>,
5014    /// Only return matching files, not lines and content
5015    #[builder(setter(into, strip_option), default)]
5016    pub files_only: Option<bool>,
5017    /// Glob patterns to match (e.g., "*.md")
5018    #[builder(setter(into, strip_option), default)]
5019    pub globs: Option<Vec<&'a str>>,
5020    /// Enable case-insensitive matching.
5021    #[builder(setter(into, strip_option), default)]
5022    pub insensitive: Option<bool>,
5023    /// Limit the number of results to return
5024    #[builder(setter(into, strip_option), default)]
5025    pub limit: Option<isize>,
5026    /// Interpret the pattern as a literal string instead of a regular expression.
5027    #[builder(setter(into, strip_option), default)]
5028    pub literal: Option<bool>,
5029    /// Enable searching across multiple lines.
5030    #[builder(setter(into, strip_option), default)]
5031    pub multiline: Option<bool>,
5032    /// Directory or file paths to search
5033    #[builder(setter(into, strip_option), default)]
5034    pub paths: Option<Vec<&'a str>>,
5035    /// Skip hidden files (files starting with .).
5036    #[builder(setter(into, strip_option), default)]
5037    pub skip_hidden: Option<bool>,
5038    /// Honor .gitignore, .ignore, and .rgignore files.
5039    #[builder(setter(into, strip_option), default)]
5040    pub skip_ignored: Option<bool>,
5041}
5042#[derive(Builder, Debug, PartialEq)]
5043pub struct DirectoryTerminalOpts<'a> {
5044    /// If set, override the container's default terminal command and invoke these command arguments instead.
5045    #[builder(setter(into, strip_option), default)]
5046    pub cmd: Option<Vec<&'a str>>,
5047    /// If set, override the default container used for the terminal.
5048    #[builder(setter(into, strip_option), default)]
5049    pub container: Option<ContainerId>,
5050    /// Provides Dagger access to the executed command.
5051    #[builder(setter(into, strip_option), default)]
5052    pub experimental_privileged_nesting: Option<bool>,
5053    /// Execute the command with all root capabilities. This is similar to running a command with "sudo" or executing "docker run" with the "--privileged" flag. Containerization does not provide any security guarantees when using this option. It should only be used when absolutely necessary and only with trusted commands.
5054    #[builder(setter(into, strip_option), default)]
5055    pub insecure_root_capabilities: Option<bool>,
5056}
5057#[derive(Builder, Debug, PartialEq)]
5058pub struct DirectoryWithDirectoryOpts<'a> {
5059    /// Exclude artifacts that match the given pattern (e.g., ["node_modules/", ".git*"]).
5060    #[builder(setter(into, strip_option), default)]
5061    pub exclude: Option<Vec<&'a str>>,
5062    /// Apply .gitignore filter rules inside the directory
5063    #[builder(setter(into, strip_option), default)]
5064    pub gitignore: Option<bool>,
5065    /// Include only artifacts that match the given pattern (e.g., ["app/", "package.*"]).
5066    #[builder(setter(into, strip_option), default)]
5067    pub include: Option<Vec<&'a str>>,
5068    /// A user:group to set for the copied directory and its contents.
5069    /// The user and group must be an ID (1000:1000), not a name (foo:bar).
5070    /// If the group is omitted, it defaults to the same as the user.
5071    #[builder(setter(into, strip_option), default)]
5072    pub owner: Option<&'a str>,
5073}
5074#[derive(Builder, Debug, PartialEq)]
5075pub struct DirectoryWithFileOpts<'a> {
5076    /// A user:group to set for the copied directory and its contents.
5077    /// The user and group must be an ID (1000:1000), not a name (foo:bar).
5078    /// If the group is omitted, it defaults to the same as the user.
5079    #[builder(setter(into, strip_option), default)]
5080    pub owner: Option<&'a str>,
5081    /// Permission given to the copied file (e.g., 0600).
5082    #[builder(setter(into, strip_option), default)]
5083    pub permissions: Option<isize>,
5084}
5085#[derive(Builder, Debug, PartialEq)]
5086pub struct DirectoryWithFilesOpts {
5087    /// Permission given to the copied files (e.g., 0600).
5088    #[builder(setter(into, strip_option), default)]
5089    pub permissions: Option<isize>,
5090}
5091#[derive(Builder, Debug, PartialEq)]
5092pub struct DirectoryWithNewDirectoryOpts {
5093    /// Permission granted to the created directory (e.g., 0777).
5094    #[builder(setter(into, strip_option), default)]
5095    pub permissions: Option<isize>,
5096}
5097#[derive(Builder, Debug, PartialEq)]
5098pub struct DirectoryWithNewFileOpts {
5099    /// Permissions of the new file. Example: 0600
5100    #[builder(setter(into, strip_option), default)]
5101    pub permissions: Option<isize>,
5102}
5103impl Directory {
5104    /// Converts this directory to a local git repository
5105    pub fn as_git(&self) -> GitRepository {
5106        let query = self.selection.select("asGit");
5107        GitRepository {
5108            proc: self.proc.clone(),
5109            selection: query,
5110            graphql_client: self.graphql_client.clone(),
5111        }
5112    }
5113    /// Load the directory as a Dagger module source
5114    ///
5115    /// # Arguments
5116    ///
5117    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5118    pub fn as_module(&self) -> Module {
5119        let query = self.selection.select("asModule");
5120        Module {
5121            proc: self.proc.clone(),
5122            selection: query,
5123            graphql_client: self.graphql_client.clone(),
5124        }
5125    }
5126    /// Load the directory as a Dagger module source
5127    ///
5128    /// # Arguments
5129    ///
5130    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5131    pub fn as_module_opts<'a>(&self, opts: DirectoryAsModuleOpts<'a>) -> Module {
5132        let mut query = self.selection.select("asModule");
5133        if let Some(source_root_path) = opts.source_root_path {
5134            query = query.arg("sourceRootPath", source_root_path);
5135        }
5136        Module {
5137            proc: self.proc.clone(),
5138            selection: query,
5139            graphql_client: self.graphql_client.clone(),
5140        }
5141    }
5142    /// Load the directory as a Dagger module source
5143    ///
5144    /// # Arguments
5145    ///
5146    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5147    pub fn as_module_source(&self) -> ModuleSource {
5148        let query = self.selection.select("asModuleSource");
5149        ModuleSource {
5150            proc: self.proc.clone(),
5151            selection: query,
5152            graphql_client: self.graphql_client.clone(),
5153        }
5154    }
5155    /// Load the directory as a Dagger module source
5156    ///
5157    /// # Arguments
5158    ///
5159    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5160    pub fn as_module_source_opts<'a>(&self, opts: DirectoryAsModuleSourceOpts<'a>) -> ModuleSource {
5161        let mut query = self.selection.select("asModuleSource");
5162        if let Some(source_root_path) = opts.source_root_path {
5163            query = query.arg("sourceRootPath", source_root_path);
5164        }
5165        ModuleSource {
5166            proc: self.proc.clone(),
5167            selection: query,
5168            graphql_client: self.graphql_client.clone(),
5169        }
5170    }
5171    /// Return the difference between this directory and another directory, typically an older snapshot.
5172    /// The difference is encoded as a changeset, which also tracks removed files, and can be applied to other directories.
5173    ///
5174    /// # Arguments
5175    ///
5176    /// * `from` - The base directory snapshot to compare against
5177    pub fn changes(&self, from: impl IntoID<DirectoryId>) -> Changeset {
5178        let mut query = self.selection.select("changes");
5179        query = query.arg_lazy(
5180            "from",
5181            Box::new(move || {
5182                let from = from.clone();
5183                Box::pin(async move { from.into_id().await.unwrap().quote() })
5184            }),
5185        );
5186        Changeset {
5187            proc: self.proc.clone(),
5188            selection: query,
5189            graphql_client: self.graphql_client.clone(),
5190        }
5191    }
5192    /// Change the owner of the directory contents recursively.
5193    ///
5194    /// # Arguments
5195    ///
5196    /// * `path` - Path of the directory to change ownership of (e.g., "/").
5197    /// * `owner` - A user:group to set for the mounted directory and its contents.
5198    ///
5199    /// The user and group must be an ID (1000:1000), not a name (foo:bar).
5200    ///
5201    /// If the group is omitted, it defaults to the same as the user.
5202    pub fn chown(&self, path: impl Into<String>, owner: impl Into<String>) -> Directory {
5203        let mut query = self.selection.select("chown");
5204        query = query.arg("path", path.into());
5205        query = query.arg("owner", owner.into());
5206        Directory {
5207            proc: self.proc.clone(),
5208            selection: query,
5209            graphql_client: self.graphql_client.clone(),
5210        }
5211    }
5212    /// Return the difference between this directory and an another directory. The difference is encoded as a directory.
5213    ///
5214    /// # Arguments
5215    ///
5216    /// * `other` - The directory to compare against
5217    pub fn diff(&self, other: impl IntoID<DirectoryId>) -> Directory {
5218        let mut query = self.selection.select("diff");
5219        query = query.arg_lazy(
5220            "other",
5221            Box::new(move || {
5222                let other = other.clone();
5223                Box::pin(async move { other.into_id().await.unwrap().quote() })
5224            }),
5225        );
5226        Directory {
5227            proc: self.proc.clone(),
5228            selection: query,
5229            graphql_client: self.graphql_client.clone(),
5230        }
5231    }
5232    /// Return the directory's digest. The format of the digest is not guaranteed to be stable between releases of Dagger. It is guaranteed to be stable between invocations of the same Dagger engine.
5233    pub async fn digest(&self) -> Result<String, DaggerError> {
5234        let query = self.selection.select("digest");
5235        query.execute(self.graphql_client.clone()).await
5236    }
5237    /// Retrieves a directory at the given path.
5238    ///
5239    /// # Arguments
5240    ///
5241    /// * `path` - Location of the directory to retrieve. Example: "/src"
5242    pub fn directory(&self, path: impl Into<String>) -> Directory {
5243        let mut query = self.selection.select("directory");
5244        query = query.arg("path", path.into());
5245        Directory {
5246            proc: self.proc.clone(),
5247            selection: query,
5248            graphql_client: self.graphql_client.clone(),
5249        }
5250    }
5251    /// Use Dockerfile compatibility to build a container from this directory. Only use this function for Dockerfile compatibility. Otherwise use the native Container type directly, it is feature-complete and supports all Dockerfile features.
5252    ///
5253    /// # Arguments
5254    ///
5255    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5256    pub fn docker_build(&self) -> Container {
5257        let query = self.selection.select("dockerBuild");
5258        Container {
5259            proc: self.proc.clone(),
5260            selection: query,
5261            graphql_client: self.graphql_client.clone(),
5262        }
5263    }
5264    /// Use Dockerfile compatibility to build a container from this directory. Only use this function for Dockerfile compatibility. Otherwise use the native Container type directly, it is feature-complete and supports all Dockerfile features.
5265    ///
5266    /// # Arguments
5267    ///
5268    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5269    pub fn docker_build_opts<'a>(&self, opts: DirectoryDockerBuildOpts<'a>) -> Container {
5270        let mut query = self.selection.select("dockerBuild");
5271        if let Some(dockerfile) = opts.dockerfile {
5272            query = query.arg("dockerfile", dockerfile);
5273        }
5274        if let Some(platform) = opts.platform {
5275            query = query.arg("platform", platform);
5276        }
5277        if let Some(build_args) = opts.build_args {
5278            query = query.arg("buildArgs", build_args);
5279        }
5280        if let Some(target) = opts.target {
5281            query = query.arg("target", target);
5282        }
5283        if let Some(secrets) = opts.secrets {
5284            query = query.arg("secrets", secrets);
5285        }
5286        if let Some(no_init) = opts.no_init {
5287            query = query.arg("noInit", no_init);
5288        }
5289        Container {
5290            proc: self.proc.clone(),
5291            selection: query,
5292            graphql_client: self.graphql_client.clone(),
5293        }
5294    }
5295    /// Returns a list of files and directories at the given path.
5296    ///
5297    /// # Arguments
5298    ///
5299    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5300    pub async fn entries(&self) -> Result<Vec<String>, DaggerError> {
5301        let query = self.selection.select("entries");
5302        query.execute(self.graphql_client.clone()).await
5303    }
5304    /// Returns a list of files and directories at the given path.
5305    ///
5306    /// # Arguments
5307    ///
5308    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5309    pub async fn entries_opts<'a>(
5310        &self,
5311        opts: DirectoryEntriesOpts<'a>,
5312    ) -> Result<Vec<String>, DaggerError> {
5313        let mut query = self.selection.select("entries");
5314        if let Some(path) = opts.path {
5315            query = query.arg("path", path);
5316        }
5317        query.execute(self.graphql_client.clone()).await
5318    }
5319    /// check if a file or directory exists
5320    ///
5321    /// # Arguments
5322    ///
5323    /// * `path` - Path to check (e.g., "/file.txt").
5324    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5325    pub async fn exists(&self, path: impl Into<String>) -> Result<bool, DaggerError> {
5326        let mut query = self.selection.select("exists");
5327        query = query.arg("path", path.into());
5328        query.execute(self.graphql_client.clone()).await
5329    }
5330    /// check if a file or directory exists
5331    ///
5332    /// # Arguments
5333    ///
5334    /// * `path` - Path to check (e.g., "/file.txt").
5335    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5336    pub async fn exists_opts(
5337        &self,
5338        path: impl Into<String>,
5339        opts: DirectoryExistsOpts,
5340    ) -> Result<bool, DaggerError> {
5341        let mut query = self.selection.select("exists");
5342        query = query.arg("path", path.into());
5343        if let Some(expected_type) = opts.expected_type {
5344            query = query.arg("expectedType", expected_type);
5345        }
5346        if let Some(do_not_follow_symlinks) = opts.do_not_follow_symlinks {
5347            query = query.arg("doNotFollowSymlinks", do_not_follow_symlinks);
5348        }
5349        query.execute(self.graphql_client.clone()).await
5350    }
5351    /// Writes the contents of the directory to a path on the host.
5352    ///
5353    /// # Arguments
5354    ///
5355    /// * `path` - Location of the copied directory (e.g., "logs/").
5356    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5357    pub async fn export(&self, path: impl Into<String>) -> Result<String, DaggerError> {
5358        let mut query = self.selection.select("export");
5359        query = query.arg("path", path.into());
5360        query.execute(self.graphql_client.clone()).await
5361    }
5362    /// Writes the contents of the directory to a path on the host.
5363    ///
5364    /// # Arguments
5365    ///
5366    /// * `path` - Location of the copied directory (e.g., "logs/").
5367    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5368    pub async fn export_opts(
5369        &self,
5370        path: impl Into<String>,
5371        opts: DirectoryExportOpts,
5372    ) -> Result<String, DaggerError> {
5373        let mut query = self.selection.select("export");
5374        query = query.arg("path", path.into());
5375        if let Some(wipe) = opts.wipe {
5376            query = query.arg("wipe", wipe);
5377        }
5378        query.execute(self.graphql_client.clone()).await
5379    }
5380    /// Retrieve a file at the given path.
5381    ///
5382    /// # Arguments
5383    ///
5384    /// * `path` - Location of the file to retrieve (e.g., "README.md").
5385    pub fn file(&self, path: impl Into<String>) -> File {
5386        let mut query = self.selection.select("file");
5387        query = query.arg("path", path.into());
5388        File {
5389            proc: self.proc.clone(),
5390            selection: query,
5391            graphql_client: self.graphql_client.clone(),
5392        }
5393    }
5394    /// Return a snapshot with some paths included or excluded
5395    ///
5396    /// # Arguments
5397    ///
5398    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5399    pub fn filter(&self) -> Directory {
5400        let query = self.selection.select("filter");
5401        Directory {
5402            proc: self.proc.clone(),
5403            selection: query,
5404            graphql_client: self.graphql_client.clone(),
5405        }
5406    }
5407    /// Return a snapshot with some paths included or excluded
5408    ///
5409    /// # Arguments
5410    ///
5411    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5412    pub fn filter_opts<'a>(&self, opts: DirectoryFilterOpts<'a>) -> Directory {
5413        let mut query = self.selection.select("filter");
5414        if let Some(exclude) = opts.exclude {
5415            query = query.arg("exclude", exclude);
5416        }
5417        if let Some(include) = opts.include {
5418            query = query.arg("include", include);
5419        }
5420        if let Some(gitignore) = opts.gitignore {
5421            query = query.arg("gitignore", gitignore);
5422        }
5423        Directory {
5424            proc: self.proc.clone(),
5425            selection: query,
5426            graphql_client: self.graphql_client.clone(),
5427        }
5428    }
5429    /// Search up the directory tree for a file or directory, and return its path. If no match, return null
5430    ///
5431    /// # Arguments
5432    ///
5433    /// * `name` - The name of the file or directory to search for
5434    /// * `start` - The path to start the search from
5435    pub async fn find_up(
5436        &self,
5437        name: impl Into<String>,
5438        start: impl Into<String>,
5439    ) -> Result<String, DaggerError> {
5440        let mut query = self.selection.select("findUp");
5441        query = query.arg("name", name.into());
5442        query = query.arg("start", start.into());
5443        query.execute(self.graphql_client.clone()).await
5444    }
5445    /// Returns a list of files and directories that matche the given pattern.
5446    ///
5447    /// # Arguments
5448    ///
5449    /// * `pattern` - Pattern to match (e.g., "*.md").
5450    pub async fn glob(&self, pattern: impl Into<String>) -> Result<Vec<String>, DaggerError> {
5451        let mut query = self.selection.select("glob");
5452        query = query.arg("pattern", pattern.into());
5453        query.execute(self.graphql_client.clone()).await
5454    }
5455    /// A unique identifier for this Directory.
5456    pub async fn id(&self) -> Result<DirectoryId, DaggerError> {
5457        let query = self.selection.select("id");
5458        query.execute(self.graphql_client.clone()).await
5459    }
5460    /// Returns the name of the directory.
5461    pub async fn name(&self) -> Result<String, DaggerError> {
5462        let query = self.selection.select("name");
5463        query.execute(self.graphql_client.clone()).await
5464    }
5465    /// Searches for content matching the given regular expression or literal string.
5466    /// Uses Rust regex syntax; escape literal ., [, ], {, }, | with backslashes.
5467    ///
5468    /// # Arguments
5469    ///
5470    /// * `pattern` - The text to match.
5471    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5472    pub fn search(&self, pattern: impl Into<String>) -> Vec<SearchResult> {
5473        let mut query = self.selection.select("search");
5474        query = query.arg("pattern", pattern.into());
5475        vec![SearchResult {
5476            proc: self.proc.clone(),
5477            selection: query,
5478            graphql_client: self.graphql_client.clone(),
5479        }]
5480    }
5481    /// Searches for content matching the given regular expression or literal string.
5482    /// Uses Rust regex syntax; escape literal ., [, ], {, }, | with backslashes.
5483    ///
5484    /// # Arguments
5485    ///
5486    /// * `pattern` - The text to match.
5487    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5488    pub fn search_opts<'a>(
5489        &self,
5490        pattern: impl Into<String>,
5491        opts: DirectorySearchOpts<'a>,
5492    ) -> Vec<SearchResult> {
5493        let mut query = self.selection.select("search");
5494        query = query.arg("pattern", pattern.into());
5495        if let Some(paths) = opts.paths {
5496            query = query.arg("paths", paths);
5497        }
5498        if let Some(globs) = opts.globs {
5499            query = query.arg("globs", globs);
5500        }
5501        if let Some(literal) = opts.literal {
5502            query = query.arg("literal", literal);
5503        }
5504        if let Some(multiline) = opts.multiline {
5505            query = query.arg("multiline", multiline);
5506        }
5507        if let Some(dotall) = opts.dotall {
5508            query = query.arg("dotall", dotall);
5509        }
5510        if let Some(insensitive) = opts.insensitive {
5511            query = query.arg("insensitive", insensitive);
5512        }
5513        if let Some(skip_ignored) = opts.skip_ignored {
5514            query = query.arg("skipIgnored", skip_ignored);
5515        }
5516        if let Some(skip_hidden) = opts.skip_hidden {
5517            query = query.arg("skipHidden", skip_hidden);
5518        }
5519        if let Some(files_only) = opts.files_only {
5520            query = query.arg("filesOnly", files_only);
5521        }
5522        if let Some(limit) = opts.limit {
5523            query = query.arg("limit", limit);
5524        }
5525        vec![SearchResult {
5526            proc: self.proc.clone(),
5527            selection: query,
5528            graphql_client: self.graphql_client.clone(),
5529        }]
5530    }
5531    /// Force evaluation in the engine.
5532    pub async fn sync(&self) -> Result<DirectoryId, DaggerError> {
5533        let query = self.selection.select("sync");
5534        query.execute(self.graphql_client.clone()).await
5535    }
5536    /// Opens an interactive terminal in new container with this directory mounted inside.
5537    ///
5538    /// # Arguments
5539    ///
5540    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5541    pub fn terminal(&self) -> Directory {
5542        let query = self.selection.select("terminal");
5543        Directory {
5544            proc: self.proc.clone(),
5545            selection: query,
5546            graphql_client: self.graphql_client.clone(),
5547        }
5548    }
5549    /// Opens an interactive terminal in new container with this directory mounted inside.
5550    ///
5551    /// # Arguments
5552    ///
5553    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5554    pub fn terminal_opts<'a>(&self, opts: DirectoryTerminalOpts<'a>) -> Directory {
5555        let mut query = self.selection.select("terminal");
5556        if let Some(container) = opts.container {
5557            query = query.arg("container", container);
5558        }
5559        if let Some(cmd) = opts.cmd {
5560            query = query.arg("cmd", cmd);
5561        }
5562        if let Some(experimental_privileged_nesting) = opts.experimental_privileged_nesting {
5563            query = query.arg(
5564                "experimentalPrivilegedNesting",
5565                experimental_privileged_nesting,
5566            );
5567        }
5568        if let Some(insecure_root_capabilities) = opts.insecure_root_capabilities {
5569            query = query.arg("insecureRootCapabilities", insecure_root_capabilities);
5570        }
5571        Directory {
5572            proc: self.proc.clone(),
5573            selection: query,
5574            graphql_client: self.graphql_client.clone(),
5575        }
5576    }
5577    /// Return a directory with changes from another directory applied to it.
5578    ///
5579    /// # Arguments
5580    ///
5581    /// * `changes` - Changes to apply to the directory
5582    pub fn with_changes(&self, changes: impl IntoID<ChangesetId>) -> Directory {
5583        let mut query = self.selection.select("withChanges");
5584        query = query.arg_lazy(
5585            "changes",
5586            Box::new(move || {
5587                let changes = changes.clone();
5588                Box::pin(async move { changes.into_id().await.unwrap().quote() })
5589            }),
5590        );
5591        Directory {
5592            proc: self.proc.clone(),
5593            selection: query,
5594            graphql_client: self.graphql_client.clone(),
5595        }
5596    }
5597    /// Return a snapshot with a directory added
5598    ///
5599    /// # Arguments
5600    ///
5601    /// * `path` - Location of the written directory (e.g., "/src/").
5602    /// * `source` - Identifier of the directory to copy.
5603    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5604    pub fn with_directory(
5605        &self,
5606        path: impl Into<String>,
5607        source: impl IntoID<DirectoryId>,
5608    ) -> Directory {
5609        let mut query = self.selection.select("withDirectory");
5610        query = query.arg("path", path.into());
5611        query = query.arg_lazy(
5612            "source",
5613            Box::new(move || {
5614                let source = source.clone();
5615                Box::pin(async move { source.into_id().await.unwrap().quote() })
5616            }),
5617        );
5618        Directory {
5619            proc: self.proc.clone(),
5620            selection: query,
5621            graphql_client: self.graphql_client.clone(),
5622        }
5623    }
5624    /// Return a snapshot with a directory added
5625    ///
5626    /// # Arguments
5627    ///
5628    /// * `path` - Location of the written directory (e.g., "/src/").
5629    /// * `source` - Identifier of the directory to copy.
5630    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5631    pub fn with_directory_opts<'a>(
5632        &self,
5633        path: impl Into<String>,
5634        source: impl IntoID<DirectoryId>,
5635        opts: DirectoryWithDirectoryOpts<'a>,
5636    ) -> Directory {
5637        let mut query = self.selection.select("withDirectory");
5638        query = query.arg("path", path.into());
5639        query = query.arg_lazy(
5640            "source",
5641            Box::new(move || {
5642                let source = source.clone();
5643                Box::pin(async move { source.into_id().await.unwrap().quote() })
5644            }),
5645        );
5646        if let Some(exclude) = opts.exclude {
5647            query = query.arg("exclude", exclude);
5648        }
5649        if let Some(include) = opts.include {
5650            query = query.arg("include", include);
5651        }
5652        if let Some(gitignore) = opts.gitignore {
5653            query = query.arg("gitignore", gitignore);
5654        }
5655        if let Some(owner) = opts.owner {
5656            query = query.arg("owner", owner);
5657        }
5658        Directory {
5659            proc: self.proc.clone(),
5660            selection: query,
5661            graphql_client: self.graphql_client.clone(),
5662        }
5663    }
5664    /// Raise an error.
5665    ///
5666    /// # Arguments
5667    ///
5668    /// * `err` - Message of the error to raise. If empty, the error will be ignored.
5669    pub fn with_error(&self, err: impl Into<String>) -> Directory {
5670        let mut query = self.selection.select("withError");
5671        query = query.arg("err", err.into());
5672        Directory {
5673            proc: self.proc.clone(),
5674            selection: query,
5675            graphql_client: self.graphql_client.clone(),
5676        }
5677    }
5678    /// Retrieves this directory plus the contents of the given file copied to the given path.
5679    ///
5680    /// # Arguments
5681    ///
5682    /// * `path` - Location of the copied file (e.g., "/file.txt").
5683    /// * `source` - Identifier of the file to copy.
5684    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5685    pub fn with_file(&self, path: impl Into<String>, source: impl IntoID<FileId>) -> Directory {
5686        let mut query = self.selection.select("withFile");
5687        query = query.arg("path", path.into());
5688        query = query.arg_lazy(
5689            "source",
5690            Box::new(move || {
5691                let source = source.clone();
5692                Box::pin(async move { source.into_id().await.unwrap().quote() })
5693            }),
5694        );
5695        Directory {
5696            proc: self.proc.clone(),
5697            selection: query,
5698            graphql_client: self.graphql_client.clone(),
5699        }
5700    }
5701    /// Retrieves this directory plus the contents of the given file copied to the given path.
5702    ///
5703    /// # Arguments
5704    ///
5705    /// * `path` - Location of the copied file (e.g., "/file.txt").
5706    /// * `source` - Identifier of the file to copy.
5707    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5708    pub fn with_file_opts<'a>(
5709        &self,
5710        path: impl Into<String>,
5711        source: impl IntoID<FileId>,
5712        opts: DirectoryWithFileOpts<'a>,
5713    ) -> Directory {
5714        let mut query = self.selection.select("withFile");
5715        query = query.arg("path", path.into());
5716        query = query.arg_lazy(
5717            "source",
5718            Box::new(move || {
5719                let source = source.clone();
5720                Box::pin(async move { source.into_id().await.unwrap().quote() })
5721            }),
5722        );
5723        if let Some(permissions) = opts.permissions {
5724            query = query.arg("permissions", permissions);
5725        }
5726        if let Some(owner) = opts.owner {
5727            query = query.arg("owner", owner);
5728        }
5729        Directory {
5730            proc: self.proc.clone(),
5731            selection: query,
5732            graphql_client: self.graphql_client.clone(),
5733        }
5734    }
5735    /// Retrieves this directory plus the contents of the given files copied to the given path.
5736    ///
5737    /// # Arguments
5738    ///
5739    /// * `path` - Location where copied files should be placed (e.g., "/src").
5740    /// * `sources` - Identifiers of the files to copy.
5741    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5742    pub fn with_files(&self, path: impl Into<String>, sources: Vec<FileId>) -> Directory {
5743        let mut query = self.selection.select("withFiles");
5744        query = query.arg("path", path.into());
5745        query = query.arg("sources", sources);
5746        Directory {
5747            proc: self.proc.clone(),
5748            selection: query,
5749            graphql_client: self.graphql_client.clone(),
5750        }
5751    }
5752    /// Retrieves this directory plus the contents of the given files copied to the given path.
5753    ///
5754    /// # Arguments
5755    ///
5756    /// * `path` - Location where copied files should be placed (e.g., "/src").
5757    /// * `sources` - Identifiers of the files to copy.
5758    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5759    pub fn with_files_opts(
5760        &self,
5761        path: impl Into<String>,
5762        sources: Vec<FileId>,
5763        opts: DirectoryWithFilesOpts,
5764    ) -> Directory {
5765        let mut query = self.selection.select("withFiles");
5766        query = query.arg("path", path.into());
5767        query = query.arg("sources", sources);
5768        if let Some(permissions) = opts.permissions {
5769            query = query.arg("permissions", permissions);
5770        }
5771        Directory {
5772            proc: self.proc.clone(),
5773            selection: query,
5774            graphql_client: self.graphql_client.clone(),
5775        }
5776    }
5777    /// Retrieves this directory plus a new directory created at the given path.
5778    ///
5779    /// # Arguments
5780    ///
5781    /// * `path` - Location of the directory created (e.g., "/logs").
5782    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5783    pub fn with_new_directory(&self, path: impl Into<String>) -> Directory {
5784        let mut query = self.selection.select("withNewDirectory");
5785        query = query.arg("path", path.into());
5786        Directory {
5787            proc: self.proc.clone(),
5788            selection: query,
5789            graphql_client: self.graphql_client.clone(),
5790        }
5791    }
5792    /// Retrieves this directory plus a new directory created at the given path.
5793    ///
5794    /// # Arguments
5795    ///
5796    /// * `path` - Location of the directory created (e.g., "/logs").
5797    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5798    pub fn with_new_directory_opts(
5799        &self,
5800        path: impl Into<String>,
5801        opts: DirectoryWithNewDirectoryOpts,
5802    ) -> Directory {
5803        let mut query = self.selection.select("withNewDirectory");
5804        query = query.arg("path", path.into());
5805        if let Some(permissions) = opts.permissions {
5806            query = query.arg("permissions", permissions);
5807        }
5808        Directory {
5809            proc: self.proc.clone(),
5810            selection: query,
5811            graphql_client: self.graphql_client.clone(),
5812        }
5813    }
5814    /// Return a snapshot with a new file added
5815    ///
5816    /// # Arguments
5817    ///
5818    /// * `path` - Path of the new file. Example: "foo/bar.txt"
5819    /// * `contents` - Contents of the new file. Example: "Hello world!"
5820    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5821    pub fn with_new_file(&self, path: impl Into<String>, contents: impl Into<String>) -> Directory {
5822        let mut query = self.selection.select("withNewFile");
5823        query = query.arg("path", path.into());
5824        query = query.arg("contents", contents.into());
5825        Directory {
5826            proc: self.proc.clone(),
5827            selection: query,
5828            graphql_client: self.graphql_client.clone(),
5829        }
5830    }
5831    /// Return a snapshot with a new file added
5832    ///
5833    /// # Arguments
5834    ///
5835    /// * `path` - Path of the new file. Example: "foo/bar.txt"
5836    /// * `contents` - Contents of the new file. Example: "Hello world!"
5837    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
5838    pub fn with_new_file_opts(
5839        &self,
5840        path: impl Into<String>,
5841        contents: impl Into<String>,
5842        opts: DirectoryWithNewFileOpts,
5843    ) -> Directory {
5844        let mut query = self.selection.select("withNewFile");
5845        query = query.arg("path", path.into());
5846        query = query.arg("contents", contents.into());
5847        if let Some(permissions) = opts.permissions {
5848            query = query.arg("permissions", permissions);
5849        }
5850        Directory {
5851            proc: self.proc.clone(),
5852            selection: query,
5853            graphql_client: self.graphql_client.clone(),
5854        }
5855    }
5856    /// Retrieves this directory with the given Git-compatible patch applied.
5857    ///
5858    /// # Arguments
5859    ///
5860    /// * `patch` - Patch to apply (e.g., "diff --git a/file.txt b/file.txt\nindex 1234567..abcdef8 100644\n--- a/file.txt\n+++ b/file.txt\n@@ -1,1 +1,1 @@\n-Hello\n+World\n").
5861    pub fn with_patch(&self, patch: impl Into<String>) -> Directory {
5862        let mut query = self.selection.select("withPatch");
5863        query = query.arg("patch", patch.into());
5864        Directory {
5865            proc: self.proc.clone(),
5866            selection: query,
5867            graphql_client: self.graphql_client.clone(),
5868        }
5869    }
5870    /// Retrieves this directory with the given Git-compatible patch file applied.
5871    ///
5872    /// # Arguments
5873    ///
5874    /// * `patch` - File containing the patch to apply
5875    pub fn with_patch_file(&self, patch: impl IntoID<FileId>) -> Directory {
5876        let mut query = self.selection.select("withPatchFile");
5877        query = query.arg_lazy(
5878            "patch",
5879            Box::new(move || {
5880                let patch = patch.clone();
5881                Box::pin(async move { patch.into_id().await.unwrap().quote() })
5882            }),
5883        );
5884        Directory {
5885            proc: self.proc.clone(),
5886            selection: query,
5887            graphql_client: self.graphql_client.clone(),
5888        }
5889    }
5890    /// Return a snapshot with a symlink
5891    ///
5892    /// # Arguments
5893    ///
5894    /// * `target` - Location of the file or directory to link to (e.g., "/existing/file").
5895    /// * `link_name` - Location where the symbolic link will be created (e.g., "/new-file-link").
5896    pub fn with_symlink(
5897        &self,
5898        target: impl Into<String>,
5899        link_name: impl Into<String>,
5900    ) -> Directory {
5901        let mut query = self.selection.select("withSymlink");
5902        query = query.arg("target", target.into());
5903        query = query.arg("linkName", link_name.into());
5904        Directory {
5905            proc: self.proc.clone(),
5906            selection: query,
5907            graphql_client: self.graphql_client.clone(),
5908        }
5909    }
5910    /// Retrieves this directory with all file/dir timestamps set to the given time.
5911    ///
5912    /// # Arguments
5913    ///
5914    /// * `timestamp` - Timestamp to set dir/files in.
5915    ///
5916    /// Formatted in seconds following Unix epoch (e.g., 1672531199).
5917    pub fn with_timestamps(&self, timestamp: isize) -> Directory {
5918        let mut query = self.selection.select("withTimestamps");
5919        query = query.arg("timestamp", timestamp);
5920        Directory {
5921            proc: self.proc.clone(),
5922            selection: query,
5923            graphql_client: self.graphql_client.clone(),
5924        }
5925    }
5926    /// Return a snapshot with a subdirectory removed
5927    ///
5928    /// # Arguments
5929    ///
5930    /// * `path` - Path of the subdirectory to remove. Example: ".github/workflows"
5931    pub fn without_directory(&self, path: impl Into<String>) -> Directory {
5932        let mut query = self.selection.select("withoutDirectory");
5933        query = query.arg("path", path.into());
5934        Directory {
5935            proc: self.proc.clone(),
5936            selection: query,
5937            graphql_client: self.graphql_client.clone(),
5938        }
5939    }
5940    /// Return a snapshot with a file removed
5941    ///
5942    /// # Arguments
5943    ///
5944    /// * `path` - Path of the file to remove (e.g., "/file.txt").
5945    pub fn without_file(&self, path: impl Into<String>) -> Directory {
5946        let mut query = self.selection.select("withoutFile");
5947        query = query.arg("path", path.into());
5948        Directory {
5949            proc: self.proc.clone(),
5950            selection: query,
5951            graphql_client: self.graphql_client.clone(),
5952        }
5953    }
5954    /// Return a snapshot with files removed
5955    ///
5956    /// # Arguments
5957    ///
5958    /// * `paths` - Paths of the files to remove (e.g., ["/file.txt"]).
5959    pub fn without_files(&self, paths: Vec<impl Into<String>>) -> Directory {
5960        let mut query = self.selection.select("withoutFiles");
5961        query = query.arg(
5962            "paths",
5963            paths.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
5964        );
5965        Directory {
5966            proc: self.proc.clone(),
5967            selection: query,
5968            graphql_client: self.graphql_client.clone(),
5969        }
5970    }
5971}
5972#[derive(Clone)]
5973pub struct Engine {
5974    pub proc: Option<Arc<DaggerSessionProc>>,
5975    pub selection: Selection,
5976    pub graphql_client: DynGraphQLClient,
5977}
5978impl Engine {
5979    /// The list of connected client IDs
5980    pub async fn clients(&self) -> Result<Vec<String>, DaggerError> {
5981        let query = self.selection.select("clients");
5982        query.execute(self.graphql_client.clone()).await
5983    }
5984    /// A unique identifier for this Engine.
5985    pub async fn id(&self) -> Result<EngineId, DaggerError> {
5986        let query = self.selection.select("id");
5987        query.execute(self.graphql_client.clone()).await
5988    }
5989    /// The local (on-disk) cache for the Dagger engine
5990    pub fn local_cache(&self) -> EngineCache {
5991        let query = self.selection.select("localCache");
5992        EngineCache {
5993            proc: self.proc.clone(),
5994            selection: query,
5995            graphql_client: self.graphql_client.clone(),
5996        }
5997    }
5998    /// The name of the engine instance.
5999    pub async fn name(&self) -> Result<String, DaggerError> {
6000        let query = self.selection.select("name");
6001        query.execute(self.graphql_client.clone()).await
6002    }
6003}
6004#[derive(Clone)]
6005pub struct EngineCache {
6006    pub proc: Option<Arc<DaggerSessionProc>>,
6007    pub selection: Selection,
6008    pub graphql_client: DynGraphQLClient,
6009}
6010#[derive(Builder, Debug, PartialEq)]
6011pub struct EngineCacheEntrySetOpts<'a> {
6012    #[builder(setter(into, strip_option), default)]
6013    pub key: Option<&'a str>,
6014}
6015#[derive(Builder, Debug, PartialEq)]
6016pub struct EngineCachePruneOpts {
6017    /// Use the engine-wide default pruning policy if true, otherwise prune the whole cache of any releasable entries.
6018    #[builder(setter(into, strip_option), default)]
6019    pub use_default_policy: Option<bool>,
6020}
6021impl EngineCache {
6022    /// The current set of entries in the cache
6023    ///
6024    /// # Arguments
6025    ///
6026    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
6027    pub fn entry_set(&self) -> EngineCacheEntrySet {
6028        let query = self.selection.select("entrySet");
6029        EngineCacheEntrySet {
6030            proc: self.proc.clone(),
6031            selection: query,
6032            graphql_client: self.graphql_client.clone(),
6033        }
6034    }
6035    /// The current set of entries in the cache
6036    ///
6037    /// # Arguments
6038    ///
6039    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
6040    pub fn entry_set_opts<'a>(&self, opts: EngineCacheEntrySetOpts<'a>) -> EngineCacheEntrySet {
6041        let mut query = self.selection.select("entrySet");
6042        if let Some(key) = opts.key {
6043            query = query.arg("key", key);
6044        }
6045        EngineCacheEntrySet {
6046            proc: self.proc.clone(),
6047            selection: query,
6048            graphql_client: self.graphql_client.clone(),
6049        }
6050    }
6051    /// A unique identifier for this EngineCache.
6052    pub async fn id(&self) -> Result<EngineCacheId, DaggerError> {
6053        let query = self.selection.select("id");
6054        query.execute(self.graphql_client.clone()).await
6055    }
6056    /// The maximum bytes to keep in the cache without pruning.
6057    pub async fn max_used_space(&self) -> Result<isize, DaggerError> {
6058        let query = self.selection.select("maxUsedSpace");
6059        query.execute(self.graphql_client.clone()).await
6060    }
6061    /// The target amount of free disk space the garbage collector will attempt to leave.
6062    pub async fn min_free_space(&self) -> Result<isize, DaggerError> {
6063        let query = self.selection.select("minFreeSpace");
6064        query.execute(self.graphql_client.clone()).await
6065    }
6066    /// Prune the cache of releaseable entries
6067    ///
6068    /// # Arguments
6069    ///
6070    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
6071    pub async fn prune(&self) -> Result<Void, DaggerError> {
6072        let query = self.selection.select("prune");
6073        query.execute(self.graphql_client.clone()).await
6074    }
6075    /// Prune the cache of releaseable entries
6076    ///
6077    /// # Arguments
6078    ///
6079    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
6080    pub async fn prune_opts(&self, opts: EngineCachePruneOpts) -> Result<Void, DaggerError> {
6081        let mut query = self.selection.select("prune");
6082        if let Some(use_default_policy) = opts.use_default_policy {
6083            query = query.arg("useDefaultPolicy", use_default_policy);
6084        }
6085        query.execute(self.graphql_client.clone()).await
6086    }
6087    /// The minimum amount of disk space this policy is guaranteed to retain.
6088    pub async fn reserved_space(&self) -> Result<isize, DaggerError> {
6089        let query = self.selection.select("reservedSpace");
6090        query.execute(self.graphql_client.clone()).await
6091    }
6092    /// The target number of bytes to keep when pruning.
6093    pub async fn target_space(&self) -> Result<isize, DaggerError> {
6094        let query = self.selection.select("targetSpace");
6095        query.execute(self.graphql_client.clone()).await
6096    }
6097}
6098#[derive(Clone)]
6099pub struct EngineCacheEntry {
6100    pub proc: Option<Arc<DaggerSessionProc>>,
6101    pub selection: Selection,
6102    pub graphql_client: DynGraphQLClient,
6103}
6104impl EngineCacheEntry {
6105    /// Whether the cache entry is actively being used.
6106    pub async fn actively_used(&self) -> Result<bool, DaggerError> {
6107        let query = self.selection.select("activelyUsed");
6108        query.execute(self.graphql_client.clone()).await
6109    }
6110    /// The time the cache entry was created, in Unix nanoseconds.
6111    pub async fn created_time_unix_nano(&self) -> Result<isize, DaggerError> {
6112        let query = self.selection.select("createdTimeUnixNano");
6113        query.execute(self.graphql_client.clone()).await
6114    }
6115    /// The description of the cache entry.
6116    pub async fn description(&self) -> Result<String, DaggerError> {
6117        let query = self.selection.select("description");
6118        query.execute(self.graphql_client.clone()).await
6119    }
6120    /// The disk space used by the cache entry.
6121    pub async fn disk_space_bytes(&self) -> Result<isize, DaggerError> {
6122        let query = self.selection.select("diskSpaceBytes");
6123        query.execute(self.graphql_client.clone()).await
6124    }
6125    /// A unique identifier for this EngineCacheEntry.
6126    pub async fn id(&self) -> Result<EngineCacheEntryId, DaggerError> {
6127        let query = self.selection.select("id");
6128        query.execute(self.graphql_client.clone()).await
6129    }
6130    /// The most recent time the cache entry was used, in Unix nanoseconds.
6131    pub async fn most_recent_use_time_unix_nano(&self) -> Result<isize, DaggerError> {
6132        let query = self.selection.select("mostRecentUseTimeUnixNano");
6133        query.execute(self.graphql_client.clone()).await
6134    }
6135}
6136#[derive(Clone)]
6137pub struct EngineCacheEntrySet {
6138    pub proc: Option<Arc<DaggerSessionProc>>,
6139    pub selection: Selection,
6140    pub graphql_client: DynGraphQLClient,
6141}
6142impl EngineCacheEntrySet {
6143    /// The total disk space used by the cache entries in this set.
6144    pub async fn disk_space_bytes(&self) -> Result<isize, DaggerError> {
6145        let query = self.selection.select("diskSpaceBytes");
6146        query.execute(self.graphql_client.clone()).await
6147    }
6148    /// The list of individual cache entries in the set
6149    pub fn entries(&self) -> Vec<EngineCacheEntry> {
6150        let query = self.selection.select("entries");
6151        vec![EngineCacheEntry {
6152            proc: self.proc.clone(),
6153            selection: query,
6154            graphql_client: self.graphql_client.clone(),
6155        }]
6156    }
6157    /// The number of cache entries in this set.
6158    pub async fn entry_count(&self) -> Result<isize, DaggerError> {
6159        let query = self.selection.select("entryCount");
6160        query.execute(self.graphql_client.clone()).await
6161    }
6162    /// A unique identifier for this EngineCacheEntrySet.
6163    pub async fn id(&self) -> Result<EngineCacheEntrySetId, DaggerError> {
6164        let query = self.selection.select("id");
6165        query.execute(self.graphql_client.clone()).await
6166    }
6167}
6168#[derive(Clone)]
6169pub struct EnumTypeDef {
6170    pub proc: Option<Arc<DaggerSessionProc>>,
6171    pub selection: Selection,
6172    pub graphql_client: DynGraphQLClient,
6173}
6174impl EnumTypeDef {
6175    /// A doc string for the enum, if any.
6176    pub async fn description(&self) -> Result<String, DaggerError> {
6177        let query = self.selection.select("description");
6178        query.execute(self.graphql_client.clone()).await
6179    }
6180    /// A unique identifier for this EnumTypeDef.
6181    pub async fn id(&self) -> Result<EnumTypeDefId, DaggerError> {
6182        let query = self.selection.select("id");
6183        query.execute(self.graphql_client.clone()).await
6184    }
6185    /// The members of the enum.
6186    pub fn members(&self) -> Vec<EnumValueTypeDef> {
6187        let query = self.selection.select("members");
6188        vec![EnumValueTypeDef {
6189            proc: self.proc.clone(),
6190            selection: query,
6191            graphql_client: self.graphql_client.clone(),
6192        }]
6193    }
6194    /// The name of the enum.
6195    pub async fn name(&self) -> Result<String, DaggerError> {
6196        let query = self.selection.select("name");
6197        query.execute(self.graphql_client.clone()).await
6198    }
6199    /// The location of this enum declaration.
6200    pub fn source_map(&self) -> SourceMap {
6201        let query = self.selection.select("sourceMap");
6202        SourceMap {
6203            proc: self.proc.clone(),
6204            selection: query,
6205            graphql_client: self.graphql_client.clone(),
6206        }
6207    }
6208    /// If this EnumTypeDef is associated with a Module, the name of the module. Unset otherwise.
6209    pub async fn source_module_name(&self) -> Result<String, DaggerError> {
6210        let query = self.selection.select("sourceModuleName");
6211        query.execute(self.graphql_client.clone()).await
6212    }
6213    pub fn values(&self) -> Vec<EnumValueTypeDef> {
6214        let query = self.selection.select("values");
6215        vec![EnumValueTypeDef {
6216            proc: self.proc.clone(),
6217            selection: query,
6218            graphql_client: self.graphql_client.clone(),
6219        }]
6220    }
6221}
6222#[derive(Clone)]
6223pub struct EnumValueTypeDef {
6224    pub proc: Option<Arc<DaggerSessionProc>>,
6225    pub selection: Selection,
6226    pub graphql_client: DynGraphQLClient,
6227}
6228impl EnumValueTypeDef {
6229    /// The reason this enum member is deprecated, if any.
6230    pub async fn deprecated(&self) -> Result<String, DaggerError> {
6231        let query = self.selection.select("deprecated");
6232        query.execute(self.graphql_client.clone()).await
6233    }
6234    /// A doc string for the enum member, if any.
6235    pub async fn description(&self) -> Result<String, DaggerError> {
6236        let query = self.selection.select("description");
6237        query.execute(self.graphql_client.clone()).await
6238    }
6239    /// A unique identifier for this EnumValueTypeDef.
6240    pub async fn id(&self) -> Result<EnumValueTypeDefId, DaggerError> {
6241        let query = self.selection.select("id");
6242        query.execute(self.graphql_client.clone()).await
6243    }
6244    /// The name of the enum member.
6245    pub async fn name(&self) -> Result<String, DaggerError> {
6246        let query = self.selection.select("name");
6247        query.execute(self.graphql_client.clone()).await
6248    }
6249    /// The location of this enum member declaration.
6250    pub fn source_map(&self) -> SourceMap {
6251        let query = self.selection.select("sourceMap");
6252        SourceMap {
6253            proc: self.proc.clone(),
6254            selection: query,
6255            graphql_client: self.graphql_client.clone(),
6256        }
6257    }
6258    /// The value of the enum member
6259    pub async fn value(&self) -> Result<String, DaggerError> {
6260        let query = self.selection.select("value");
6261        query.execute(self.graphql_client.clone()).await
6262    }
6263}
6264#[derive(Clone)]
6265pub struct Env {
6266    pub proc: Option<Arc<DaggerSessionProc>>,
6267    pub selection: Selection,
6268    pub graphql_client: DynGraphQLClient,
6269}
6270impl Env {
6271    /// A unique identifier for this Env.
6272    pub async fn id(&self) -> Result<EnvId, DaggerError> {
6273        let query = self.selection.select("id");
6274        query.execute(self.graphql_client.clone()).await
6275    }
6276    /// Retrieves an input binding by name
6277    pub fn input(&self, name: impl Into<String>) -> Binding {
6278        let mut query = self.selection.select("input");
6279        query = query.arg("name", name.into());
6280        Binding {
6281            proc: self.proc.clone(),
6282            selection: query,
6283            graphql_client: self.graphql_client.clone(),
6284        }
6285    }
6286    /// Returns all input bindings provided to the environment
6287    pub fn inputs(&self) -> Vec<Binding> {
6288        let query = self.selection.select("inputs");
6289        vec![Binding {
6290            proc: self.proc.clone(),
6291            selection: query,
6292            graphql_client: self.graphql_client.clone(),
6293        }]
6294    }
6295    /// Retrieves an output binding by name
6296    pub fn output(&self, name: impl Into<String>) -> Binding {
6297        let mut query = self.selection.select("output");
6298        query = query.arg("name", name.into());
6299        Binding {
6300            proc: self.proc.clone(),
6301            selection: query,
6302            graphql_client: self.graphql_client.clone(),
6303        }
6304    }
6305    /// Returns all declared output bindings for the environment
6306    pub fn outputs(&self) -> Vec<Binding> {
6307        let query = self.selection.select("outputs");
6308        vec![Binding {
6309            proc: self.proc.clone(),
6310            selection: query,
6311            graphql_client: self.graphql_client.clone(),
6312        }]
6313    }
6314    /// Create or update a binding of type Address in the environment
6315    ///
6316    /// # Arguments
6317    ///
6318    /// * `name` - The name of the binding
6319    /// * `value` - The Address value to assign to the binding
6320    /// * `description` - The purpose of the input
6321    pub fn with_address_input(
6322        &self,
6323        name: impl Into<String>,
6324        value: impl IntoID<AddressId>,
6325        description: impl Into<String>,
6326    ) -> Env {
6327        let mut query = self.selection.select("withAddressInput");
6328        query = query.arg("name", name.into());
6329        query = query.arg_lazy(
6330            "value",
6331            Box::new(move || {
6332                let value = value.clone();
6333                Box::pin(async move { value.into_id().await.unwrap().quote() })
6334            }),
6335        );
6336        query = query.arg("description", description.into());
6337        Env {
6338            proc: self.proc.clone(),
6339            selection: query,
6340            graphql_client: self.graphql_client.clone(),
6341        }
6342    }
6343    /// Declare a desired Address output to be assigned in the environment
6344    ///
6345    /// # Arguments
6346    ///
6347    /// * `name` - The name of the binding
6348    /// * `description` - A description of the desired value of the binding
6349    pub fn with_address_output(
6350        &self,
6351        name: impl Into<String>,
6352        description: impl Into<String>,
6353    ) -> Env {
6354        let mut query = self.selection.select("withAddressOutput");
6355        query = query.arg("name", name.into());
6356        query = query.arg("description", description.into());
6357        Env {
6358            proc: self.proc.clone(),
6359            selection: query,
6360            graphql_client: self.graphql_client.clone(),
6361        }
6362    }
6363    /// Create or update a binding of type CacheVolume in the environment
6364    ///
6365    /// # Arguments
6366    ///
6367    /// * `name` - The name of the binding
6368    /// * `value` - The CacheVolume value to assign to the binding
6369    /// * `description` - The purpose of the input
6370    pub fn with_cache_volume_input(
6371        &self,
6372        name: impl Into<String>,
6373        value: impl IntoID<CacheVolumeId>,
6374        description: impl Into<String>,
6375    ) -> Env {
6376        let mut query = self.selection.select("withCacheVolumeInput");
6377        query = query.arg("name", name.into());
6378        query = query.arg_lazy(
6379            "value",
6380            Box::new(move || {
6381                let value = value.clone();
6382                Box::pin(async move { value.into_id().await.unwrap().quote() })
6383            }),
6384        );
6385        query = query.arg("description", description.into());
6386        Env {
6387            proc: self.proc.clone(),
6388            selection: query,
6389            graphql_client: self.graphql_client.clone(),
6390        }
6391    }
6392    /// Declare a desired CacheVolume output to be assigned in the environment
6393    ///
6394    /// # Arguments
6395    ///
6396    /// * `name` - The name of the binding
6397    /// * `description` - A description of the desired value of the binding
6398    pub fn with_cache_volume_output(
6399        &self,
6400        name: impl Into<String>,
6401        description: impl Into<String>,
6402    ) -> Env {
6403        let mut query = self.selection.select("withCacheVolumeOutput");
6404        query = query.arg("name", name.into());
6405        query = query.arg("description", description.into());
6406        Env {
6407            proc: self.proc.clone(),
6408            selection: query,
6409            graphql_client: self.graphql_client.clone(),
6410        }
6411    }
6412    /// Create or update a binding of type Changeset in the environment
6413    ///
6414    /// # Arguments
6415    ///
6416    /// * `name` - The name of the binding
6417    /// * `value` - The Changeset value to assign to the binding
6418    /// * `description` - The purpose of the input
6419    pub fn with_changeset_input(
6420        &self,
6421        name: impl Into<String>,
6422        value: impl IntoID<ChangesetId>,
6423        description: impl Into<String>,
6424    ) -> Env {
6425        let mut query = self.selection.select("withChangesetInput");
6426        query = query.arg("name", name.into());
6427        query = query.arg_lazy(
6428            "value",
6429            Box::new(move || {
6430                let value = value.clone();
6431                Box::pin(async move { value.into_id().await.unwrap().quote() })
6432            }),
6433        );
6434        query = query.arg("description", description.into());
6435        Env {
6436            proc: self.proc.clone(),
6437            selection: query,
6438            graphql_client: self.graphql_client.clone(),
6439        }
6440    }
6441    /// Declare a desired Changeset output to be assigned in the environment
6442    ///
6443    /// # Arguments
6444    ///
6445    /// * `name` - The name of the binding
6446    /// * `description` - A description of the desired value of the binding
6447    pub fn with_changeset_output(
6448        &self,
6449        name: impl Into<String>,
6450        description: impl Into<String>,
6451    ) -> Env {
6452        let mut query = self.selection.select("withChangesetOutput");
6453        query = query.arg("name", name.into());
6454        query = query.arg("description", description.into());
6455        Env {
6456            proc: self.proc.clone(),
6457            selection: query,
6458            graphql_client: self.graphql_client.clone(),
6459        }
6460    }
6461    /// Create or update a binding of type Cloud in the environment
6462    ///
6463    /// # Arguments
6464    ///
6465    /// * `name` - The name of the binding
6466    /// * `value` - The Cloud value to assign to the binding
6467    /// * `description` - The purpose of the input
6468    pub fn with_cloud_input(
6469        &self,
6470        name: impl Into<String>,
6471        value: impl IntoID<CloudId>,
6472        description: impl Into<String>,
6473    ) -> Env {
6474        let mut query = self.selection.select("withCloudInput");
6475        query = query.arg("name", name.into());
6476        query = query.arg_lazy(
6477            "value",
6478            Box::new(move || {
6479                let value = value.clone();
6480                Box::pin(async move { value.into_id().await.unwrap().quote() })
6481            }),
6482        );
6483        query = query.arg("description", description.into());
6484        Env {
6485            proc: self.proc.clone(),
6486            selection: query,
6487            graphql_client: self.graphql_client.clone(),
6488        }
6489    }
6490    /// Declare a desired Cloud output to be assigned in the environment
6491    ///
6492    /// # Arguments
6493    ///
6494    /// * `name` - The name of the binding
6495    /// * `description` - A description of the desired value of the binding
6496    pub fn with_cloud_output(
6497        &self,
6498        name: impl Into<String>,
6499        description: impl Into<String>,
6500    ) -> Env {
6501        let mut query = self.selection.select("withCloudOutput");
6502        query = query.arg("name", name.into());
6503        query = query.arg("description", description.into());
6504        Env {
6505            proc: self.proc.clone(),
6506            selection: query,
6507            graphql_client: self.graphql_client.clone(),
6508        }
6509    }
6510    /// Create or update a binding of type Container in the environment
6511    ///
6512    /// # Arguments
6513    ///
6514    /// * `name` - The name of the binding
6515    /// * `value` - The Container value to assign to the binding
6516    /// * `description` - The purpose of the input
6517    pub fn with_container_input(
6518        &self,
6519        name: impl Into<String>,
6520        value: impl IntoID<ContainerId>,
6521        description: impl Into<String>,
6522    ) -> Env {
6523        let mut query = self.selection.select("withContainerInput");
6524        query = query.arg("name", name.into());
6525        query = query.arg_lazy(
6526            "value",
6527            Box::new(move || {
6528                let value = value.clone();
6529                Box::pin(async move { value.into_id().await.unwrap().quote() })
6530            }),
6531        );
6532        query = query.arg("description", description.into());
6533        Env {
6534            proc: self.proc.clone(),
6535            selection: query,
6536            graphql_client: self.graphql_client.clone(),
6537        }
6538    }
6539    /// Declare a desired Container output to be assigned in the environment
6540    ///
6541    /// # Arguments
6542    ///
6543    /// * `name` - The name of the binding
6544    /// * `description` - A description of the desired value of the binding
6545    pub fn with_container_output(
6546        &self,
6547        name: impl Into<String>,
6548        description: impl Into<String>,
6549    ) -> Env {
6550        let mut query = self.selection.select("withContainerOutput");
6551        query = query.arg("name", name.into());
6552        query = query.arg("description", description.into());
6553        Env {
6554            proc: self.proc.clone(),
6555            selection: query,
6556            graphql_client: self.graphql_client.clone(),
6557        }
6558    }
6559    /// Installs the current module into the environment, exposing its functions to the model
6560    /// Contextual path arguments will be populated using the environment's workspace.
6561    pub fn with_current_module(&self) -> Env {
6562        let query = self.selection.select("withCurrentModule");
6563        Env {
6564            proc: self.proc.clone(),
6565            selection: query,
6566            graphql_client: self.graphql_client.clone(),
6567        }
6568    }
6569    /// Create or update a binding of type Directory in the environment
6570    ///
6571    /// # Arguments
6572    ///
6573    /// * `name` - The name of the binding
6574    /// * `value` - The Directory value to assign to the binding
6575    /// * `description` - The purpose of the input
6576    pub fn with_directory_input(
6577        &self,
6578        name: impl Into<String>,
6579        value: impl IntoID<DirectoryId>,
6580        description: impl Into<String>,
6581    ) -> Env {
6582        let mut query = self.selection.select("withDirectoryInput");
6583        query = query.arg("name", name.into());
6584        query = query.arg_lazy(
6585            "value",
6586            Box::new(move || {
6587                let value = value.clone();
6588                Box::pin(async move { value.into_id().await.unwrap().quote() })
6589            }),
6590        );
6591        query = query.arg("description", description.into());
6592        Env {
6593            proc: self.proc.clone(),
6594            selection: query,
6595            graphql_client: self.graphql_client.clone(),
6596        }
6597    }
6598    /// Declare a desired Directory output to be assigned in the environment
6599    ///
6600    /// # Arguments
6601    ///
6602    /// * `name` - The name of the binding
6603    /// * `description` - A description of the desired value of the binding
6604    pub fn with_directory_output(
6605        &self,
6606        name: impl Into<String>,
6607        description: impl Into<String>,
6608    ) -> Env {
6609        let mut query = self.selection.select("withDirectoryOutput");
6610        query = query.arg("name", name.into());
6611        query = query.arg("description", description.into());
6612        Env {
6613            proc: self.proc.clone(),
6614            selection: query,
6615            graphql_client: self.graphql_client.clone(),
6616        }
6617    }
6618    /// Create or update a binding of type EnvFile in the environment
6619    ///
6620    /// # Arguments
6621    ///
6622    /// * `name` - The name of the binding
6623    /// * `value` - The EnvFile value to assign to the binding
6624    /// * `description` - The purpose of the input
6625    pub fn with_env_file_input(
6626        &self,
6627        name: impl Into<String>,
6628        value: impl IntoID<EnvFileId>,
6629        description: impl Into<String>,
6630    ) -> Env {
6631        let mut query = self.selection.select("withEnvFileInput");
6632        query = query.arg("name", name.into());
6633        query = query.arg_lazy(
6634            "value",
6635            Box::new(move || {
6636                let value = value.clone();
6637                Box::pin(async move { value.into_id().await.unwrap().quote() })
6638            }),
6639        );
6640        query = query.arg("description", description.into());
6641        Env {
6642            proc: self.proc.clone(),
6643            selection: query,
6644            graphql_client: self.graphql_client.clone(),
6645        }
6646    }
6647    /// Declare a desired EnvFile output to be assigned in the environment
6648    ///
6649    /// # Arguments
6650    ///
6651    /// * `name` - The name of the binding
6652    /// * `description` - A description of the desired value of the binding
6653    pub fn with_env_file_output(
6654        &self,
6655        name: impl Into<String>,
6656        description: impl Into<String>,
6657    ) -> Env {
6658        let mut query = self.selection.select("withEnvFileOutput");
6659        query = query.arg("name", name.into());
6660        query = query.arg("description", description.into());
6661        Env {
6662            proc: self.proc.clone(),
6663            selection: query,
6664            graphql_client: self.graphql_client.clone(),
6665        }
6666    }
6667    /// Create or update a binding of type Env in the environment
6668    ///
6669    /// # Arguments
6670    ///
6671    /// * `name` - The name of the binding
6672    /// * `value` - The Env value to assign to the binding
6673    /// * `description` - The purpose of the input
6674    pub fn with_env_input(
6675        &self,
6676        name: impl Into<String>,
6677        value: impl IntoID<EnvId>,
6678        description: impl Into<String>,
6679    ) -> Env {
6680        let mut query = self.selection.select("withEnvInput");
6681        query = query.arg("name", name.into());
6682        query = query.arg_lazy(
6683            "value",
6684            Box::new(move || {
6685                let value = value.clone();
6686                Box::pin(async move { value.into_id().await.unwrap().quote() })
6687            }),
6688        );
6689        query = query.arg("description", description.into());
6690        Env {
6691            proc: self.proc.clone(),
6692            selection: query,
6693            graphql_client: self.graphql_client.clone(),
6694        }
6695    }
6696    /// Declare a desired Env output to be assigned in the environment
6697    ///
6698    /// # Arguments
6699    ///
6700    /// * `name` - The name of the binding
6701    /// * `description` - A description of the desired value of the binding
6702    pub fn with_env_output(&self, name: impl Into<String>, description: impl Into<String>) -> Env {
6703        let mut query = self.selection.select("withEnvOutput");
6704        query = query.arg("name", name.into());
6705        query = query.arg("description", description.into());
6706        Env {
6707            proc: self.proc.clone(),
6708            selection: query,
6709            graphql_client: self.graphql_client.clone(),
6710        }
6711    }
6712    /// Create or update a binding of type File in the environment
6713    ///
6714    /// # Arguments
6715    ///
6716    /// * `name` - The name of the binding
6717    /// * `value` - The File value to assign to the binding
6718    /// * `description` - The purpose of the input
6719    pub fn with_file_input(
6720        &self,
6721        name: impl Into<String>,
6722        value: impl IntoID<FileId>,
6723        description: impl Into<String>,
6724    ) -> Env {
6725        let mut query = self.selection.select("withFileInput");
6726        query = query.arg("name", name.into());
6727        query = query.arg_lazy(
6728            "value",
6729            Box::new(move || {
6730                let value = value.clone();
6731                Box::pin(async move { value.into_id().await.unwrap().quote() })
6732            }),
6733        );
6734        query = query.arg("description", description.into());
6735        Env {
6736            proc: self.proc.clone(),
6737            selection: query,
6738            graphql_client: self.graphql_client.clone(),
6739        }
6740    }
6741    /// Declare a desired File output to be assigned in the environment
6742    ///
6743    /// # Arguments
6744    ///
6745    /// * `name` - The name of the binding
6746    /// * `description` - A description of the desired value of the binding
6747    pub fn with_file_output(&self, name: impl Into<String>, description: impl Into<String>) -> Env {
6748        let mut query = self.selection.select("withFileOutput");
6749        query = query.arg("name", name.into());
6750        query = query.arg("description", description.into());
6751        Env {
6752            proc: self.proc.clone(),
6753            selection: query,
6754            graphql_client: self.graphql_client.clone(),
6755        }
6756    }
6757    /// Create or update a binding of type GitRef in the environment
6758    ///
6759    /// # Arguments
6760    ///
6761    /// * `name` - The name of the binding
6762    /// * `value` - The GitRef value to assign to the binding
6763    /// * `description` - The purpose of the input
6764    pub fn with_git_ref_input(
6765        &self,
6766        name: impl Into<String>,
6767        value: impl IntoID<GitRefId>,
6768        description: impl Into<String>,
6769    ) -> Env {
6770        let mut query = self.selection.select("withGitRefInput");
6771        query = query.arg("name", name.into());
6772        query = query.arg_lazy(
6773            "value",
6774            Box::new(move || {
6775                let value = value.clone();
6776                Box::pin(async move { value.into_id().await.unwrap().quote() })
6777            }),
6778        );
6779        query = query.arg("description", description.into());
6780        Env {
6781            proc: self.proc.clone(),
6782            selection: query,
6783            graphql_client: self.graphql_client.clone(),
6784        }
6785    }
6786    /// Declare a desired GitRef output to be assigned in the environment
6787    ///
6788    /// # Arguments
6789    ///
6790    /// * `name` - The name of the binding
6791    /// * `description` - A description of the desired value of the binding
6792    pub fn with_git_ref_output(
6793        &self,
6794        name: impl Into<String>,
6795        description: impl Into<String>,
6796    ) -> Env {
6797        let mut query = self.selection.select("withGitRefOutput");
6798        query = query.arg("name", name.into());
6799        query = query.arg("description", description.into());
6800        Env {
6801            proc: self.proc.clone(),
6802            selection: query,
6803            graphql_client: self.graphql_client.clone(),
6804        }
6805    }
6806    /// Create or update a binding of type GitRepository in the environment
6807    ///
6808    /// # Arguments
6809    ///
6810    /// * `name` - The name of the binding
6811    /// * `value` - The GitRepository value to assign to the binding
6812    /// * `description` - The purpose of the input
6813    pub fn with_git_repository_input(
6814        &self,
6815        name: impl Into<String>,
6816        value: impl IntoID<GitRepositoryId>,
6817        description: impl Into<String>,
6818    ) -> Env {
6819        let mut query = self.selection.select("withGitRepositoryInput");
6820        query = query.arg("name", name.into());
6821        query = query.arg_lazy(
6822            "value",
6823            Box::new(move || {
6824                let value = value.clone();
6825                Box::pin(async move { value.into_id().await.unwrap().quote() })
6826            }),
6827        );
6828        query = query.arg("description", description.into());
6829        Env {
6830            proc: self.proc.clone(),
6831            selection: query,
6832            graphql_client: self.graphql_client.clone(),
6833        }
6834    }
6835    /// Declare a desired GitRepository output to be assigned in the environment
6836    ///
6837    /// # Arguments
6838    ///
6839    /// * `name` - The name of the binding
6840    /// * `description` - A description of the desired value of the binding
6841    pub fn with_git_repository_output(
6842        &self,
6843        name: impl Into<String>,
6844        description: impl Into<String>,
6845    ) -> Env {
6846        let mut query = self.selection.select("withGitRepositoryOutput");
6847        query = query.arg("name", name.into());
6848        query = query.arg("description", description.into());
6849        Env {
6850            proc: self.proc.clone(),
6851            selection: query,
6852            graphql_client: self.graphql_client.clone(),
6853        }
6854    }
6855    /// Create or update a binding of type JSONValue in the environment
6856    ///
6857    /// # Arguments
6858    ///
6859    /// * `name` - The name of the binding
6860    /// * `value` - The JSONValue value to assign to the binding
6861    /// * `description` - The purpose of the input
6862    pub fn with_json_value_input(
6863        &self,
6864        name: impl Into<String>,
6865        value: impl IntoID<JsonValueId>,
6866        description: impl Into<String>,
6867    ) -> Env {
6868        let mut query = self.selection.select("withJSONValueInput");
6869        query = query.arg("name", name.into());
6870        query = query.arg_lazy(
6871            "value",
6872            Box::new(move || {
6873                let value = value.clone();
6874                Box::pin(async move { value.into_id().await.unwrap().quote() })
6875            }),
6876        );
6877        query = query.arg("description", description.into());
6878        Env {
6879            proc: self.proc.clone(),
6880            selection: query,
6881            graphql_client: self.graphql_client.clone(),
6882        }
6883    }
6884    /// Declare a desired JSONValue output to be assigned in the environment
6885    ///
6886    /// # Arguments
6887    ///
6888    /// * `name` - The name of the binding
6889    /// * `description` - A description of the desired value of the binding
6890    pub fn with_json_value_output(
6891        &self,
6892        name: impl Into<String>,
6893        description: impl Into<String>,
6894    ) -> Env {
6895        let mut query = self.selection.select("withJSONValueOutput");
6896        query = query.arg("name", name.into());
6897        query = query.arg("description", description.into());
6898        Env {
6899            proc: self.proc.clone(),
6900            selection: query,
6901            graphql_client: self.graphql_client.clone(),
6902        }
6903    }
6904    /// Installs a module into the environment, exposing its functions to the model
6905    /// Contextual path arguments will be populated using the environment's workspace.
6906    pub fn with_module(&self, module: impl IntoID<ModuleId>) -> Env {
6907        let mut query = self.selection.select("withModule");
6908        query = query.arg_lazy(
6909            "module",
6910            Box::new(move || {
6911                let module = module.clone();
6912                Box::pin(async move { module.into_id().await.unwrap().quote() })
6913            }),
6914        );
6915        Env {
6916            proc: self.proc.clone(),
6917            selection: query,
6918            graphql_client: self.graphql_client.clone(),
6919        }
6920    }
6921    /// Create or update a binding of type ModuleConfigClient in the environment
6922    ///
6923    /// # Arguments
6924    ///
6925    /// * `name` - The name of the binding
6926    /// * `value` - The ModuleConfigClient value to assign to the binding
6927    /// * `description` - The purpose of the input
6928    pub fn with_module_config_client_input(
6929        &self,
6930        name: impl Into<String>,
6931        value: impl IntoID<ModuleConfigClientId>,
6932        description: impl Into<String>,
6933    ) -> Env {
6934        let mut query = self.selection.select("withModuleConfigClientInput");
6935        query = query.arg("name", name.into());
6936        query = query.arg_lazy(
6937            "value",
6938            Box::new(move || {
6939                let value = value.clone();
6940                Box::pin(async move { value.into_id().await.unwrap().quote() })
6941            }),
6942        );
6943        query = query.arg("description", description.into());
6944        Env {
6945            proc: self.proc.clone(),
6946            selection: query,
6947            graphql_client: self.graphql_client.clone(),
6948        }
6949    }
6950    /// Declare a desired ModuleConfigClient output to be assigned in the environment
6951    ///
6952    /// # Arguments
6953    ///
6954    /// * `name` - The name of the binding
6955    /// * `description` - A description of the desired value of the binding
6956    pub fn with_module_config_client_output(
6957        &self,
6958        name: impl Into<String>,
6959        description: impl Into<String>,
6960    ) -> Env {
6961        let mut query = self.selection.select("withModuleConfigClientOutput");
6962        query = query.arg("name", name.into());
6963        query = query.arg("description", description.into());
6964        Env {
6965            proc: self.proc.clone(),
6966            selection: query,
6967            graphql_client: self.graphql_client.clone(),
6968        }
6969    }
6970    /// Create or update a binding of type Module in the environment
6971    ///
6972    /// # Arguments
6973    ///
6974    /// * `name` - The name of the binding
6975    /// * `value` - The Module value to assign to the binding
6976    /// * `description` - The purpose of the input
6977    pub fn with_module_input(
6978        &self,
6979        name: impl Into<String>,
6980        value: impl IntoID<ModuleId>,
6981        description: impl Into<String>,
6982    ) -> Env {
6983        let mut query = self.selection.select("withModuleInput");
6984        query = query.arg("name", name.into());
6985        query = query.arg_lazy(
6986            "value",
6987            Box::new(move || {
6988                let value = value.clone();
6989                Box::pin(async move { value.into_id().await.unwrap().quote() })
6990            }),
6991        );
6992        query = query.arg("description", description.into());
6993        Env {
6994            proc: self.proc.clone(),
6995            selection: query,
6996            graphql_client: self.graphql_client.clone(),
6997        }
6998    }
6999    /// Declare a desired Module output to be assigned in the environment
7000    ///
7001    /// # Arguments
7002    ///
7003    /// * `name` - The name of the binding
7004    /// * `description` - A description of the desired value of the binding
7005    pub fn with_module_output(
7006        &self,
7007        name: impl Into<String>,
7008        description: impl Into<String>,
7009    ) -> Env {
7010        let mut query = self.selection.select("withModuleOutput");
7011        query = query.arg("name", name.into());
7012        query = query.arg("description", description.into());
7013        Env {
7014            proc: self.proc.clone(),
7015            selection: query,
7016            graphql_client: self.graphql_client.clone(),
7017        }
7018    }
7019    /// Create or update a binding of type ModuleSource in the environment
7020    ///
7021    /// # Arguments
7022    ///
7023    /// * `name` - The name of the binding
7024    /// * `value` - The ModuleSource value to assign to the binding
7025    /// * `description` - The purpose of the input
7026    pub fn with_module_source_input(
7027        &self,
7028        name: impl Into<String>,
7029        value: impl IntoID<ModuleSourceId>,
7030        description: impl Into<String>,
7031    ) -> Env {
7032        let mut query = self.selection.select("withModuleSourceInput");
7033        query = query.arg("name", name.into());
7034        query = query.arg_lazy(
7035            "value",
7036            Box::new(move || {
7037                let value = value.clone();
7038                Box::pin(async move { value.into_id().await.unwrap().quote() })
7039            }),
7040        );
7041        query = query.arg("description", description.into());
7042        Env {
7043            proc: self.proc.clone(),
7044            selection: query,
7045            graphql_client: self.graphql_client.clone(),
7046        }
7047    }
7048    /// Declare a desired ModuleSource output to be assigned in the environment
7049    ///
7050    /// # Arguments
7051    ///
7052    /// * `name` - The name of the binding
7053    /// * `description` - A description of the desired value of the binding
7054    pub fn with_module_source_output(
7055        &self,
7056        name: impl Into<String>,
7057        description: impl Into<String>,
7058    ) -> Env {
7059        let mut query = self.selection.select("withModuleSourceOutput");
7060        query = query.arg("name", name.into());
7061        query = query.arg("description", description.into());
7062        Env {
7063            proc: self.proc.clone(),
7064            selection: query,
7065            graphql_client: self.graphql_client.clone(),
7066        }
7067    }
7068    /// Create or update a binding of type SearchResult in the environment
7069    ///
7070    /// # Arguments
7071    ///
7072    /// * `name` - The name of the binding
7073    /// * `value` - The SearchResult value to assign to the binding
7074    /// * `description` - The purpose of the input
7075    pub fn with_search_result_input(
7076        &self,
7077        name: impl Into<String>,
7078        value: impl IntoID<SearchResultId>,
7079        description: impl Into<String>,
7080    ) -> Env {
7081        let mut query = self.selection.select("withSearchResultInput");
7082        query = query.arg("name", name.into());
7083        query = query.arg_lazy(
7084            "value",
7085            Box::new(move || {
7086                let value = value.clone();
7087                Box::pin(async move { value.into_id().await.unwrap().quote() })
7088            }),
7089        );
7090        query = query.arg("description", description.into());
7091        Env {
7092            proc: self.proc.clone(),
7093            selection: query,
7094            graphql_client: self.graphql_client.clone(),
7095        }
7096    }
7097    /// Declare a desired SearchResult output to be assigned in the environment
7098    ///
7099    /// # Arguments
7100    ///
7101    /// * `name` - The name of the binding
7102    /// * `description` - A description of the desired value of the binding
7103    pub fn with_search_result_output(
7104        &self,
7105        name: impl Into<String>,
7106        description: impl Into<String>,
7107    ) -> Env {
7108        let mut query = self.selection.select("withSearchResultOutput");
7109        query = query.arg("name", name.into());
7110        query = query.arg("description", description.into());
7111        Env {
7112            proc: self.proc.clone(),
7113            selection: query,
7114            graphql_client: self.graphql_client.clone(),
7115        }
7116    }
7117    /// Create or update a binding of type SearchSubmatch in the environment
7118    ///
7119    /// # Arguments
7120    ///
7121    /// * `name` - The name of the binding
7122    /// * `value` - The SearchSubmatch value to assign to the binding
7123    /// * `description` - The purpose of the input
7124    pub fn with_search_submatch_input(
7125        &self,
7126        name: impl Into<String>,
7127        value: impl IntoID<SearchSubmatchId>,
7128        description: impl Into<String>,
7129    ) -> Env {
7130        let mut query = self.selection.select("withSearchSubmatchInput");
7131        query = query.arg("name", name.into());
7132        query = query.arg_lazy(
7133            "value",
7134            Box::new(move || {
7135                let value = value.clone();
7136                Box::pin(async move { value.into_id().await.unwrap().quote() })
7137            }),
7138        );
7139        query = query.arg("description", description.into());
7140        Env {
7141            proc: self.proc.clone(),
7142            selection: query,
7143            graphql_client: self.graphql_client.clone(),
7144        }
7145    }
7146    /// Declare a desired SearchSubmatch output to be assigned in the environment
7147    ///
7148    /// # Arguments
7149    ///
7150    /// * `name` - The name of the binding
7151    /// * `description` - A description of the desired value of the binding
7152    pub fn with_search_submatch_output(
7153        &self,
7154        name: impl Into<String>,
7155        description: impl Into<String>,
7156    ) -> Env {
7157        let mut query = self.selection.select("withSearchSubmatchOutput");
7158        query = query.arg("name", name.into());
7159        query = query.arg("description", description.into());
7160        Env {
7161            proc: self.proc.clone(),
7162            selection: query,
7163            graphql_client: self.graphql_client.clone(),
7164        }
7165    }
7166    /// Create or update a binding of type Secret in the environment
7167    ///
7168    /// # Arguments
7169    ///
7170    /// * `name` - The name of the binding
7171    /// * `value` - The Secret value to assign to the binding
7172    /// * `description` - The purpose of the input
7173    pub fn with_secret_input(
7174        &self,
7175        name: impl Into<String>,
7176        value: impl IntoID<SecretId>,
7177        description: impl Into<String>,
7178    ) -> Env {
7179        let mut query = self.selection.select("withSecretInput");
7180        query = query.arg("name", name.into());
7181        query = query.arg_lazy(
7182            "value",
7183            Box::new(move || {
7184                let value = value.clone();
7185                Box::pin(async move { value.into_id().await.unwrap().quote() })
7186            }),
7187        );
7188        query = query.arg("description", description.into());
7189        Env {
7190            proc: self.proc.clone(),
7191            selection: query,
7192            graphql_client: self.graphql_client.clone(),
7193        }
7194    }
7195    /// Declare a desired Secret output to be assigned in the environment
7196    ///
7197    /// # Arguments
7198    ///
7199    /// * `name` - The name of the binding
7200    /// * `description` - A description of the desired value of the binding
7201    pub fn with_secret_output(
7202        &self,
7203        name: impl Into<String>,
7204        description: impl Into<String>,
7205    ) -> Env {
7206        let mut query = self.selection.select("withSecretOutput");
7207        query = query.arg("name", name.into());
7208        query = query.arg("description", description.into());
7209        Env {
7210            proc: self.proc.clone(),
7211            selection: query,
7212            graphql_client: self.graphql_client.clone(),
7213        }
7214    }
7215    /// Create or update a binding of type Service in the environment
7216    ///
7217    /// # Arguments
7218    ///
7219    /// * `name` - The name of the binding
7220    /// * `value` - The Service value to assign to the binding
7221    /// * `description` - The purpose of the input
7222    pub fn with_service_input(
7223        &self,
7224        name: impl Into<String>,
7225        value: impl IntoID<ServiceId>,
7226        description: impl Into<String>,
7227    ) -> Env {
7228        let mut query = self.selection.select("withServiceInput");
7229        query = query.arg("name", name.into());
7230        query = query.arg_lazy(
7231            "value",
7232            Box::new(move || {
7233                let value = value.clone();
7234                Box::pin(async move { value.into_id().await.unwrap().quote() })
7235            }),
7236        );
7237        query = query.arg("description", description.into());
7238        Env {
7239            proc: self.proc.clone(),
7240            selection: query,
7241            graphql_client: self.graphql_client.clone(),
7242        }
7243    }
7244    /// Declare a desired Service output to be assigned in the environment
7245    ///
7246    /// # Arguments
7247    ///
7248    /// * `name` - The name of the binding
7249    /// * `description` - A description of the desired value of the binding
7250    pub fn with_service_output(
7251        &self,
7252        name: impl Into<String>,
7253        description: impl Into<String>,
7254    ) -> Env {
7255        let mut query = self.selection.select("withServiceOutput");
7256        query = query.arg("name", name.into());
7257        query = query.arg("description", description.into());
7258        Env {
7259            proc: self.proc.clone(),
7260            selection: query,
7261            graphql_client: self.graphql_client.clone(),
7262        }
7263    }
7264    /// Create or update a binding of type Socket in the environment
7265    ///
7266    /// # Arguments
7267    ///
7268    /// * `name` - The name of the binding
7269    /// * `value` - The Socket value to assign to the binding
7270    /// * `description` - The purpose of the input
7271    pub fn with_socket_input(
7272        &self,
7273        name: impl Into<String>,
7274        value: impl IntoID<SocketId>,
7275        description: impl Into<String>,
7276    ) -> Env {
7277        let mut query = self.selection.select("withSocketInput");
7278        query = query.arg("name", name.into());
7279        query = query.arg_lazy(
7280            "value",
7281            Box::new(move || {
7282                let value = value.clone();
7283                Box::pin(async move { value.into_id().await.unwrap().quote() })
7284            }),
7285        );
7286        query = query.arg("description", description.into());
7287        Env {
7288            proc: self.proc.clone(),
7289            selection: query,
7290            graphql_client: self.graphql_client.clone(),
7291        }
7292    }
7293    /// Declare a desired Socket output to be assigned in the environment
7294    ///
7295    /// # Arguments
7296    ///
7297    /// * `name` - The name of the binding
7298    /// * `description` - A description of the desired value of the binding
7299    pub fn with_socket_output(
7300        &self,
7301        name: impl Into<String>,
7302        description: impl Into<String>,
7303    ) -> Env {
7304        let mut query = self.selection.select("withSocketOutput");
7305        query = query.arg("name", name.into());
7306        query = query.arg("description", description.into());
7307        Env {
7308            proc: self.proc.clone(),
7309            selection: query,
7310            graphql_client: self.graphql_client.clone(),
7311        }
7312    }
7313    /// Provides a string input binding to the environment
7314    ///
7315    /// # Arguments
7316    ///
7317    /// * `name` - The name of the binding
7318    /// * `value` - The string value to assign to the binding
7319    /// * `description` - The description of the input
7320    pub fn with_string_input(
7321        &self,
7322        name: impl Into<String>,
7323        value: impl Into<String>,
7324        description: impl Into<String>,
7325    ) -> Env {
7326        let mut query = self.selection.select("withStringInput");
7327        query = query.arg("name", name.into());
7328        query = query.arg("value", value.into());
7329        query = query.arg("description", description.into());
7330        Env {
7331            proc: self.proc.clone(),
7332            selection: query,
7333            graphql_client: self.graphql_client.clone(),
7334        }
7335    }
7336    /// Declares a desired string output binding
7337    ///
7338    /// # Arguments
7339    ///
7340    /// * `name` - The name of the binding
7341    /// * `description` - The description of the output
7342    pub fn with_string_output(
7343        &self,
7344        name: impl Into<String>,
7345        description: impl Into<String>,
7346    ) -> Env {
7347        let mut query = self.selection.select("withStringOutput");
7348        query = query.arg("name", name.into());
7349        query = query.arg("description", description.into());
7350        Env {
7351            proc: self.proc.clone(),
7352            selection: query,
7353            graphql_client: self.graphql_client.clone(),
7354        }
7355    }
7356    /// Returns a new environment with the provided workspace
7357    ///
7358    /// # Arguments
7359    ///
7360    /// * `workspace` - The directory to set as the host filesystem
7361    pub fn with_workspace(&self, workspace: impl IntoID<DirectoryId>) -> Env {
7362        let mut query = self.selection.select("withWorkspace");
7363        query = query.arg_lazy(
7364            "workspace",
7365            Box::new(move || {
7366                let workspace = workspace.clone();
7367                Box::pin(async move { workspace.into_id().await.unwrap().quote() })
7368            }),
7369        );
7370        Env {
7371            proc: self.proc.clone(),
7372            selection: query,
7373            graphql_client: self.graphql_client.clone(),
7374        }
7375    }
7376    /// Returns a new environment without any outputs
7377    pub fn without_outputs(&self) -> Env {
7378        let query = self.selection.select("withoutOutputs");
7379        Env {
7380            proc: self.proc.clone(),
7381            selection: query,
7382            graphql_client: self.graphql_client.clone(),
7383        }
7384    }
7385    pub fn workspace(&self) -> Directory {
7386        let query = self.selection.select("workspace");
7387        Directory {
7388            proc: self.proc.clone(),
7389            selection: query,
7390            graphql_client: self.graphql_client.clone(),
7391        }
7392    }
7393}
7394#[derive(Clone)]
7395pub struct EnvFile {
7396    pub proc: Option<Arc<DaggerSessionProc>>,
7397    pub selection: Selection,
7398    pub graphql_client: DynGraphQLClient,
7399}
7400#[derive(Builder, Debug, PartialEq)]
7401pub struct EnvFileGetOpts {
7402    /// Return the value exactly as written to the file. No quote removal or variable expansion
7403    #[builder(setter(into, strip_option), default)]
7404    pub raw: Option<bool>,
7405}
7406#[derive(Builder, Debug, PartialEq)]
7407pub struct EnvFileVariablesOpts {
7408    /// Return values exactly as written to the file. No quote removal or variable expansion
7409    #[builder(setter(into, strip_option), default)]
7410    pub raw: Option<bool>,
7411}
7412impl EnvFile {
7413    /// Return as a file
7414    pub fn as_file(&self) -> File {
7415        let query = self.selection.select("asFile");
7416        File {
7417            proc: self.proc.clone(),
7418            selection: query,
7419            graphql_client: self.graphql_client.clone(),
7420        }
7421    }
7422    /// Check if a variable exists
7423    ///
7424    /// # Arguments
7425    ///
7426    /// * `name` - Variable name
7427    pub async fn exists(&self, name: impl Into<String>) -> Result<bool, DaggerError> {
7428        let mut query = self.selection.select("exists");
7429        query = query.arg("name", name.into());
7430        query.execute(self.graphql_client.clone()).await
7431    }
7432    /// Lookup a variable (last occurrence wins) and return its value, or an empty string
7433    ///
7434    /// # Arguments
7435    ///
7436    /// * `name` - Variable name
7437    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7438    pub async fn get(&self, name: impl Into<String>) -> Result<String, DaggerError> {
7439        let mut query = self.selection.select("get");
7440        query = query.arg("name", name.into());
7441        query.execute(self.graphql_client.clone()).await
7442    }
7443    /// Lookup a variable (last occurrence wins) and return its value, or an empty string
7444    ///
7445    /// # Arguments
7446    ///
7447    /// * `name` - Variable name
7448    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7449    pub async fn get_opts(
7450        &self,
7451        name: impl Into<String>,
7452        opts: EnvFileGetOpts,
7453    ) -> Result<String, DaggerError> {
7454        let mut query = self.selection.select("get");
7455        query = query.arg("name", name.into());
7456        if let Some(raw) = opts.raw {
7457            query = query.arg("raw", raw);
7458        }
7459        query.execute(self.graphql_client.clone()).await
7460    }
7461    /// A unique identifier for this EnvFile.
7462    pub async fn id(&self) -> Result<EnvFileId, DaggerError> {
7463        let query = self.selection.select("id");
7464        query.execute(self.graphql_client.clone()).await
7465    }
7466    /// Filters variables by prefix and removes the pref from keys. Variables without the prefix are excluded. For example, with the prefix "MY_APP_" and variables: MY_APP_TOKEN=topsecret MY_APP_NAME=hello FOO=bar the resulting environment will contain: TOKEN=topsecret NAME=hello
7467    ///
7468    /// # Arguments
7469    ///
7470    /// * `prefix` - The prefix to filter by
7471    pub fn namespace(&self, prefix: impl Into<String>) -> EnvFile {
7472        let mut query = self.selection.select("namespace");
7473        query = query.arg("prefix", prefix.into());
7474        EnvFile {
7475            proc: self.proc.clone(),
7476            selection: query,
7477            graphql_client: self.graphql_client.clone(),
7478        }
7479    }
7480    /// Return all variables
7481    ///
7482    /// # Arguments
7483    ///
7484    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7485    pub fn variables(&self) -> Vec<EnvVariable> {
7486        let query = self.selection.select("variables");
7487        vec![EnvVariable {
7488            proc: self.proc.clone(),
7489            selection: query,
7490            graphql_client: self.graphql_client.clone(),
7491        }]
7492    }
7493    /// Return all variables
7494    ///
7495    /// # Arguments
7496    ///
7497    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7498    pub fn variables_opts(&self, opts: EnvFileVariablesOpts) -> Vec<EnvVariable> {
7499        let mut query = self.selection.select("variables");
7500        if let Some(raw) = opts.raw {
7501            query = query.arg("raw", raw);
7502        }
7503        vec![EnvVariable {
7504            proc: self.proc.clone(),
7505            selection: query,
7506            graphql_client: self.graphql_client.clone(),
7507        }]
7508    }
7509    /// Add a variable
7510    ///
7511    /// # Arguments
7512    ///
7513    /// * `name` - Variable name
7514    /// * `value` - Variable value
7515    pub fn with_variable(&self, name: impl Into<String>, value: impl Into<String>) -> EnvFile {
7516        let mut query = self.selection.select("withVariable");
7517        query = query.arg("name", name.into());
7518        query = query.arg("value", value.into());
7519        EnvFile {
7520            proc: self.proc.clone(),
7521            selection: query,
7522            graphql_client: self.graphql_client.clone(),
7523        }
7524    }
7525    /// Remove all occurrences of the named variable
7526    ///
7527    /// # Arguments
7528    ///
7529    /// * `name` - Variable name
7530    pub fn without_variable(&self, name: impl Into<String>) -> EnvFile {
7531        let mut query = self.selection.select("withoutVariable");
7532        query = query.arg("name", name.into());
7533        EnvFile {
7534            proc: self.proc.clone(),
7535            selection: query,
7536            graphql_client: self.graphql_client.clone(),
7537        }
7538    }
7539}
7540#[derive(Clone)]
7541pub struct EnvVariable {
7542    pub proc: Option<Arc<DaggerSessionProc>>,
7543    pub selection: Selection,
7544    pub graphql_client: DynGraphQLClient,
7545}
7546impl EnvVariable {
7547    /// A unique identifier for this EnvVariable.
7548    pub async fn id(&self) -> Result<EnvVariableId, DaggerError> {
7549        let query = self.selection.select("id");
7550        query.execute(self.graphql_client.clone()).await
7551    }
7552    /// The environment variable name.
7553    pub async fn name(&self) -> Result<String, DaggerError> {
7554        let query = self.selection.select("name");
7555        query.execute(self.graphql_client.clone()).await
7556    }
7557    /// The environment variable value.
7558    pub async fn value(&self) -> Result<String, DaggerError> {
7559        let query = self.selection.select("value");
7560        query.execute(self.graphql_client.clone()).await
7561    }
7562}
7563#[derive(Clone)]
7564pub struct Error {
7565    pub proc: Option<Arc<DaggerSessionProc>>,
7566    pub selection: Selection,
7567    pub graphql_client: DynGraphQLClient,
7568}
7569impl Error {
7570    /// A unique identifier for this Error.
7571    pub async fn id(&self) -> Result<ErrorId, DaggerError> {
7572        let query = self.selection.select("id");
7573        query.execute(self.graphql_client.clone()).await
7574    }
7575    /// A description of the error.
7576    pub async fn message(&self) -> Result<String, DaggerError> {
7577        let query = self.selection.select("message");
7578        query.execute(self.graphql_client.clone()).await
7579    }
7580    /// The extensions of the error.
7581    pub fn values(&self) -> Vec<ErrorValue> {
7582        let query = self.selection.select("values");
7583        vec![ErrorValue {
7584            proc: self.proc.clone(),
7585            selection: query,
7586            graphql_client: self.graphql_client.clone(),
7587        }]
7588    }
7589    /// Add a value to the error.
7590    ///
7591    /// # Arguments
7592    ///
7593    /// * `name` - The name of the value.
7594    /// * `value` - The value to store on the error.
7595    pub fn with_value(&self, name: impl Into<String>, value: Json) -> Error {
7596        let mut query = self.selection.select("withValue");
7597        query = query.arg("name", name.into());
7598        query = query.arg("value", value);
7599        Error {
7600            proc: self.proc.clone(),
7601            selection: query,
7602            graphql_client: self.graphql_client.clone(),
7603        }
7604    }
7605}
7606#[derive(Clone)]
7607pub struct ErrorValue {
7608    pub proc: Option<Arc<DaggerSessionProc>>,
7609    pub selection: Selection,
7610    pub graphql_client: DynGraphQLClient,
7611}
7612impl ErrorValue {
7613    /// A unique identifier for this ErrorValue.
7614    pub async fn id(&self) -> Result<ErrorValueId, DaggerError> {
7615        let query = self.selection.select("id");
7616        query.execute(self.graphql_client.clone()).await
7617    }
7618    /// The name of the value.
7619    pub async fn name(&self) -> Result<String, DaggerError> {
7620        let query = self.selection.select("name");
7621        query.execute(self.graphql_client.clone()).await
7622    }
7623    /// The value.
7624    pub async fn value(&self) -> Result<Json, DaggerError> {
7625        let query = self.selection.select("value");
7626        query.execute(self.graphql_client.clone()).await
7627    }
7628}
7629#[derive(Clone)]
7630pub struct FieldTypeDef {
7631    pub proc: Option<Arc<DaggerSessionProc>>,
7632    pub selection: Selection,
7633    pub graphql_client: DynGraphQLClient,
7634}
7635impl FieldTypeDef {
7636    /// The reason this enum member is deprecated, if any.
7637    pub async fn deprecated(&self) -> Result<String, DaggerError> {
7638        let query = self.selection.select("deprecated");
7639        query.execute(self.graphql_client.clone()).await
7640    }
7641    /// A doc string for the field, if any.
7642    pub async fn description(&self) -> Result<String, DaggerError> {
7643        let query = self.selection.select("description");
7644        query.execute(self.graphql_client.clone()).await
7645    }
7646    /// A unique identifier for this FieldTypeDef.
7647    pub async fn id(&self) -> Result<FieldTypeDefId, DaggerError> {
7648        let query = self.selection.select("id");
7649        query.execute(self.graphql_client.clone()).await
7650    }
7651    /// The name of the field in lowerCamelCase format.
7652    pub async fn name(&self) -> Result<String, DaggerError> {
7653        let query = self.selection.select("name");
7654        query.execute(self.graphql_client.clone()).await
7655    }
7656    /// The location of this field declaration.
7657    pub fn source_map(&self) -> SourceMap {
7658        let query = self.selection.select("sourceMap");
7659        SourceMap {
7660            proc: self.proc.clone(),
7661            selection: query,
7662            graphql_client: self.graphql_client.clone(),
7663        }
7664    }
7665    /// The type of the field.
7666    pub fn type_def(&self) -> TypeDef {
7667        let query = self.selection.select("typeDef");
7668        TypeDef {
7669            proc: self.proc.clone(),
7670            selection: query,
7671            graphql_client: self.graphql_client.clone(),
7672        }
7673    }
7674}
7675#[derive(Clone)]
7676pub struct File {
7677    pub proc: Option<Arc<DaggerSessionProc>>,
7678    pub selection: Selection,
7679    pub graphql_client: DynGraphQLClient,
7680}
7681#[derive(Builder, Debug, PartialEq)]
7682pub struct FileAsEnvFileOpts {
7683    /// Replace "${VAR}" or "$VAR" with the value of other vars
7684    #[builder(setter(into, strip_option), default)]
7685    pub expand: Option<bool>,
7686}
7687#[derive(Builder, Debug, PartialEq)]
7688pub struct FileContentsOpts {
7689    /// Maximum number of lines to read
7690    #[builder(setter(into, strip_option), default)]
7691    pub limit_lines: Option<isize>,
7692    /// Start reading after this line
7693    #[builder(setter(into, strip_option), default)]
7694    pub offset_lines: Option<isize>,
7695}
7696#[derive(Builder, Debug, PartialEq)]
7697pub struct FileDigestOpts {
7698    /// If true, exclude metadata from the digest.
7699    #[builder(setter(into, strip_option), default)]
7700    pub exclude_metadata: Option<bool>,
7701}
7702#[derive(Builder, Debug, PartialEq)]
7703pub struct FileExportOpts {
7704    /// If allowParentDirPath is true, the path argument can be a directory path, in which case the file will be created in that directory.
7705    #[builder(setter(into, strip_option), default)]
7706    pub allow_parent_dir_path: Option<bool>,
7707}
7708#[derive(Builder, Debug, PartialEq)]
7709pub struct FileSearchOpts<'a> {
7710    /// Allow the . pattern to match newlines in multiline mode.
7711    #[builder(setter(into, strip_option), default)]
7712    pub dotall: Option<bool>,
7713    /// Only return matching files, not lines and content
7714    #[builder(setter(into, strip_option), default)]
7715    pub files_only: Option<bool>,
7716    #[builder(setter(into, strip_option), default)]
7717    pub globs: Option<Vec<&'a str>>,
7718    /// Enable case-insensitive matching.
7719    #[builder(setter(into, strip_option), default)]
7720    pub insensitive: Option<bool>,
7721    /// Limit the number of results to return
7722    #[builder(setter(into, strip_option), default)]
7723    pub limit: Option<isize>,
7724    /// Interpret the pattern as a literal string instead of a regular expression.
7725    #[builder(setter(into, strip_option), default)]
7726    pub literal: Option<bool>,
7727    /// Enable searching across multiple lines.
7728    #[builder(setter(into, strip_option), default)]
7729    pub multiline: Option<bool>,
7730    #[builder(setter(into, strip_option), default)]
7731    pub paths: Option<Vec<&'a str>>,
7732    /// Skip hidden files (files starting with .).
7733    #[builder(setter(into, strip_option), default)]
7734    pub skip_hidden: Option<bool>,
7735    /// Honor .gitignore, .ignore, and .rgignore files.
7736    #[builder(setter(into, strip_option), default)]
7737    pub skip_ignored: Option<bool>,
7738}
7739#[derive(Builder, Debug, PartialEq)]
7740pub struct FileWithReplacedOpts {
7741    /// Replace all occurrences of the pattern.
7742    #[builder(setter(into, strip_option), default)]
7743    pub all: Option<bool>,
7744    /// Replace the first match starting from the specified line.
7745    #[builder(setter(into, strip_option), default)]
7746    pub first_from: Option<isize>,
7747}
7748impl File {
7749    /// Parse as an env file
7750    ///
7751    /// # Arguments
7752    ///
7753    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7754    pub fn as_env_file(&self) -> EnvFile {
7755        let query = self.selection.select("asEnvFile");
7756        EnvFile {
7757            proc: self.proc.clone(),
7758            selection: query,
7759            graphql_client: self.graphql_client.clone(),
7760        }
7761    }
7762    /// Parse as an env file
7763    ///
7764    /// # Arguments
7765    ///
7766    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7767    pub fn as_env_file_opts(&self, opts: FileAsEnvFileOpts) -> EnvFile {
7768        let mut query = self.selection.select("asEnvFile");
7769        if let Some(expand) = opts.expand {
7770            query = query.arg("expand", expand);
7771        }
7772        EnvFile {
7773            proc: self.proc.clone(),
7774            selection: query,
7775            graphql_client: self.graphql_client.clone(),
7776        }
7777    }
7778    /// Change the owner of the file recursively.
7779    ///
7780    /// # Arguments
7781    ///
7782    /// * `owner` - A user:group to set for the file.
7783    ///
7784    /// The user and group must be an ID (1000:1000), not a name (foo:bar).
7785    ///
7786    /// If the group is omitted, it defaults to the same as the user.
7787    pub fn chown(&self, owner: impl Into<String>) -> File {
7788        let mut query = self.selection.select("chown");
7789        query = query.arg("owner", owner.into());
7790        File {
7791            proc: self.proc.clone(),
7792            selection: query,
7793            graphql_client: self.graphql_client.clone(),
7794        }
7795    }
7796    /// Retrieves the contents of the file.
7797    ///
7798    /// # Arguments
7799    ///
7800    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7801    pub async fn contents(&self) -> Result<String, DaggerError> {
7802        let query = self.selection.select("contents");
7803        query.execute(self.graphql_client.clone()).await
7804    }
7805    /// Retrieves the contents of the file.
7806    ///
7807    /// # Arguments
7808    ///
7809    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7810    pub async fn contents_opts(&self, opts: FileContentsOpts) -> Result<String, DaggerError> {
7811        let mut query = self.selection.select("contents");
7812        if let Some(offset_lines) = opts.offset_lines {
7813            query = query.arg("offsetLines", offset_lines);
7814        }
7815        if let Some(limit_lines) = opts.limit_lines {
7816            query = query.arg("limitLines", limit_lines);
7817        }
7818        query.execute(self.graphql_client.clone()).await
7819    }
7820    /// Return the file's digest. The format of the digest is not guaranteed to be stable between releases of Dagger. It is guaranteed to be stable between invocations of the same Dagger engine.
7821    ///
7822    /// # Arguments
7823    ///
7824    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7825    pub async fn digest(&self) -> Result<String, DaggerError> {
7826        let query = self.selection.select("digest");
7827        query.execute(self.graphql_client.clone()).await
7828    }
7829    /// Return the file's digest. The format of the digest is not guaranteed to be stable between releases of Dagger. It is guaranteed to be stable between invocations of the same Dagger engine.
7830    ///
7831    /// # Arguments
7832    ///
7833    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7834    pub async fn digest_opts(&self, opts: FileDigestOpts) -> Result<String, DaggerError> {
7835        let mut query = self.selection.select("digest");
7836        if let Some(exclude_metadata) = opts.exclude_metadata {
7837            query = query.arg("excludeMetadata", exclude_metadata);
7838        }
7839        query.execute(self.graphql_client.clone()).await
7840    }
7841    /// Writes the file to a file path on the host.
7842    ///
7843    /// # Arguments
7844    ///
7845    /// * `path` - Location of the written directory (e.g., "output.txt").
7846    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7847    pub async fn export(&self, path: impl Into<String>) -> Result<String, DaggerError> {
7848        let mut query = self.selection.select("export");
7849        query = query.arg("path", path.into());
7850        query.execute(self.graphql_client.clone()).await
7851    }
7852    /// Writes the file to a file path on the host.
7853    ///
7854    /// # Arguments
7855    ///
7856    /// * `path` - Location of the written directory (e.g., "output.txt").
7857    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7858    pub async fn export_opts(
7859        &self,
7860        path: impl Into<String>,
7861        opts: FileExportOpts,
7862    ) -> Result<String, DaggerError> {
7863        let mut query = self.selection.select("export");
7864        query = query.arg("path", path.into());
7865        if let Some(allow_parent_dir_path) = opts.allow_parent_dir_path {
7866            query = query.arg("allowParentDirPath", allow_parent_dir_path);
7867        }
7868        query.execute(self.graphql_client.clone()).await
7869    }
7870    /// A unique identifier for this File.
7871    pub async fn id(&self) -> Result<FileId, DaggerError> {
7872        let query = self.selection.select("id");
7873        query.execute(self.graphql_client.clone()).await
7874    }
7875    /// Retrieves the name of the file.
7876    pub async fn name(&self) -> Result<String, DaggerError> {
7877        let query = self.selection.select("name");
7878        query.execute(self.graphql_client.clone()).await
7879    }
7880    /// Searches for content matching the given regular expression or literal string.
7881    /// Uses Rust regex syntax; escape literal ., [, ], {, }, | with backslashes.
7882    ///
7883    /// # Arguments
7884    ///
7885    /// * `pattern` - The text to match.
7886    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7887    pub fn search(&self, pattern: impl Into<String>) -> Vec<SearchResult> {
7888        let mut query = self.selection.select("search");
7889        query = query.arg("pattern", pattern.into());
7890        vec![SearchResult {
7891            proc: self.proc.clone(),
7892            selection: query,
7893            graphql_client: self.graphql_client.clone(),
7894        }]
7895    }
7896    /// Searches for content matching the given regular expression or literal string.
7897    /// Uses Rust regex syntax; escape literal ., [, ], {, }, | with backslashes.
7898    ///
7899    /// # Arguments
7900    ///
7901    /// * `pattern` - The text to match.
7902    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7903    pub fn search_opts<'a>(
7904        &self,
7905        pattern: impl Into<String>,
7906        opts: FileSearchOpts<'a>,
7907    ) -> Vec<SearchResult> {
7908        let mut query = self.selection.select("search");
7909        query = query.arg("pattern", pattern.into());
7910        if let Some(literal) = opts.literal {
7911            query = query.arg("literal", literal);
7912        }
7913        if let Some(multiline) = opts.multiline {
7914            query = query.arg("multiline", multiline);
7915        }
7916        if let Some(dotall) = opts.dotall {
7917            query = query.arg("dotall", dotall);
7918        }
7919        if let Some(insensitive) = opts.insensitive {
7920            query = query.arg("insensitive", insensitive);
7921        }
7922        if let Some(skip_ignored) = opts.skip_ignored {
7923            query = query.arg("skipIgnored", skip_ignored);
7924        }
7925        if let Some(skip_hidden) = opts.skip_hidden {
7926            query = query.arg("skipHidden", skip_hidden);
7927        }
7928        if let Some(files_only) = opts.files_only {
7929            query = query.arg("filesOnly", files_only);
7930        }
7931        if let Some(limit) = opts.limit {
7932            query = query.arg("limit", limit);
7933        }
7934        if let Some(paths) = opts.paths {
7935            query = query.arg("paths", paths);
7936        }
7937        if let Some(globs) = opts.globs {
7938            query = query.arg("globs", globs);
7939        }
7940        vec![SearchResult {
7941            proc: self.proc.clone(),
7942            selection: query,
7943            graphql_client: self.graphql_client.clone(),
7944        }]
7945    }
7946    /// Retrieves the size of the file, in bytes.
7947    pub async fn size(&self) -> Result<isize, DaggerError> {
7948        let query = self.selection.select("size");
7949        query.execute(self.graphql_client.clone()).await
7950    }
7951    /// Force evaluation in the engine.
7952    pub async fn sync(&self) -> Result<FileId, DaggerError> {
7953        let query = self.selection.select("sync");
7954        query.execute(self.graphql_client.clone()).await
7955    }
7956    /// Retrieves this file with its name set to the given name.
7957    ///
7958    /// # Arguments
7959    ///
7960    /// * `name` - Name to set file to.
7961    pub fn with_name(&self, name: impl Into<String>) -> File {
7962        let mut query = self.selection.select("withName");
7963        query = query.arg("name", name.into());
7964        File {
7965            proc: self.proc.clone(),
7966            selection: query,
7967            graphql_client: self.graphql_client.clone(),
7968        }
7969    }
7970    /// Retrieves the file with content replaced with the given text.
7971    /// If 'all' is true, all occurrences of the pattern will be replaced.
7972    /// If 'firstAfter' is specified, only the first match starting at the specified line will be replaced.
7973    /// If neither are specified, and there are multiple matches for the pattern, this will error.
7974    /// If there are no matches for the pattern, this will error.
7975    ///
7976    /// # Arguments
7977    ///
7978    /// * `search` - The text to match.
7979    /// * `replacement` - The text to match.
7980    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
7981    pub fn with_replaced(&self, search: impl Into<String>, replacement: impl Into<String>) -> File {
7982        let mut query = self.selection.select("withReplaced");
7983        query = query.arg("search", search.into());
7984        query = query.arg("replacement", replacement.into());
7985        File {
7986            proc: self.proc.clone(),
7987            selection: query,
7988            graphql_client: self.graphql_client.clone(),
7989        }
7990    }
7991    /// Retrieves the file with content replaced with the given text.
7992    /// If 'all' is true, all occurrences of the pattern will be replaced.
7993    /// If 'firstAfter' is specified, only the first match starting at the specified line will be replaced.
7994    /// If neither are specified, and there are multiple matches for the pattern, this will error.
7995    /// If there are no matches for the pattern, this will error.
7996    ///
7997    /// # Arguments
7998    ///
7999    /// * `search` - The text to match.
8000    /// * `replacement` - The text to match.
8001    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8002    pub fn with_replaced_opts(
8003        &self,
8004        search: impl Into<String>,
8005        replacement: impl Into<String>,
8006        opts: FileWithReplacedOpts,
8007    ) -> File {
8008        let mut query = self.selection.select("withReplaced");
8009        query = query.arg("search", search.into());
8010        query = query.arg("replacement", replacement.into());
8011        if let Some(all) = opts.all {
8012            query = query.arg("all", all);
8013        }
8014        if let Some(first_from) = opts.first_from {
8015            query = query.arg("firstFrom", first_from);
8016        }
8017        File {
8018            proc: self.proc.clone(),
8019            selection: query,
8020            graphql_client: self.graphql_client.clone(),
8021        }
8022    }
8023    /// Retrieves this file with its created/modified timestamps set to the given time.
8024    ///
8025    /// # Arguments
8026    ///
8027    /// * `timestamp` - Timestamp to set dir/files in.
8028    ///
8029    /// Formatted in seconds following Unix epoch (e.g., 1672531199).
8030    pub fn with_timestamps(&self, timestamp: isize) -> File {
8031        let mut query = self.selection.select("withTimestamps");
8032        query = query.arg("timestamp", timestamp);
8033        File {
8034            proc: self.proc.clone(),
8035            selection: query,
8036            graphql_client: self.graphql_client.clone(),
8037        }
8038    }
8039}
8040#[derive(Clone)]
8041pub struct Function {
8042    pub proc: Option<Arc<DaggerSessionProc>>,
8043    pub selection: Selection,
8044    pub graphql_client: DynGraphQLClient,
8045}
8046#[derive(Builder, Debug, PartialEq)]
8047pub struct FunctionWithArgOpts<'a> {
8048    /// If the argument is a Directory or File type, default to load path from context directory, relative to root directory.
8049    #[builder(setter(into, strip_option), default)]
8050    pub default_path: Option<&'a str>,
8051    /// A default value to use for this argument if not explicitly set by the caller, if any
8052    #[builder(setter(into, strip_option), default)]
8053    pub default_value: Option<Json>,
8054    /// If deprecated, the reason or migration path.
8055    #[builder(setter(into, strip_option), default)]
8056    pub deprecated: Option<&'a str>,
8057    /// A doc string for the argument, if any
8058    #[builder(setter(into, strip_option), default)]
8059    pub description: Option<&'a str>,
8060    /// Patterns to ignore when loading the contextual argument value.
8061    #[builder(setter(into, strip_option), default)]
8062    pub ignore: Option<Vec<&'a str>>,
8063    /// The source map for the argument definition.
8064    #[builder(setter(into, strip_option), default)]
8065    pub source_map: Option<SourceMapId>,
8066}
8067#[derive(Builder, Debug, PartialEq)]
8068pub struct FunctionWithCachePolicyOpts<'a> {
8069    /// The TTL for the cache policy, if applicable. Provided as a duration string, e.g. "5m", "1h30s".
8070    #[builder(setter(into, strip_option), default)]
8071    pub time_to_live: Option<&'a str>,
8072}
8073#[derive(Builder, Debug, PartialEq)]
8074pub struct FunctionWithDeprecatedOpts<'a> {
8075    /// Reason or migration path describing the deprecation.
8076    #[builder(setter(into, strip_option), default)]
8077    pub reason: Option<&'a str>,
8078}
8079impl Function {
8080    /// Arguments accepted by the function, if any.
8081    pub fn args(&self) -> Vec<FunctionArg> {
8082        let query = self.selection.select("args");
8083        vec![FunctionArg {
8084            proc: self.proc.clone(),
8085            selection: query,
8086            graphql_client: self.graphql_client.clone(),
8087        }]
8088    }
8089    /// The reason this function is deprecated, if any.
8090    pub async fn deprecated(&self) -> Result<String, DaggerError> {
8091        let query = self.selection.select("deprecated");
8092        query.execute(self.graphql_client.clone()).await
8093    }
8094    /// A doc string for the function, if any.
8095    pub async fn description(&self) -> Result<String, DaggerError> {
8096        let query = self.selection.select("description");
8097        query.execute(self.graphql_client.clone()).await
8098    }
8099    /// A unique identifier for this Function.
8100    pub async fn id(&self) -> Result<FunctionId, DaggerError> {
8101        let query = self.selection.select("id");
8102        query.execute(self.graphql_client.clone()).await
8103    }
8104    /// The name of the function.
8105    pub async fn name(&self) -> Result<String, DaggerError> {
8106        let query = self.selection.select("name");
8107        query.execute(self.graphql_client.clone()).await
8108    }
8109    /// The type returned by the function.
8110    pub fn return_type(&self) -> TypeDef {
8111        let query = self.selection.select("returnType");
8112        TypeDef {
8113            proc: self.proc.clone(),
8114            selection: query,
8115            graphql_client: self.graphql_client.clone(),
8116        }
8117    }
8118    /// The location of this function declaration.
8119    pub fn source_map(&self) -> SourceMap {
8120        let query = self.selection.select("sourceMap");
8121        SourceMap {
8122            proc: self.proc.clone(),
8123            selection: query,
8124            graphql_client: self.graphql_client.clone(),
8125        }
8126    }
8127    /// Returns the function with the provided argument
8128    ///
8129    /// # Arguments
8130    ///
8131    /// * `name` - The name of the argument
8132    /// * `type_def` - The type of the argument
8133    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8134    pub fn with_arg(&self, name: impl Into<String>, type_def: impl IntoID<TypeDefId>) -> Function {
8135        let mut query = self.selection.select("withArg");
8136        query = query.arg("name", name.into());
8137        query = query.arg_lazy(
8138            "typeDef",
8139            Box::new(move || {
8140                let type_def = type_def.clone();
8141                Box::pin(async move { type_def.into_id().await.unwrap().quote() })
8142            }),
8143        );
8144        Function {
8145            proc: self.proc.clone(),
8146            selection: query,
8147            graphql_client: self.graphql_client.clone(),
8148        }
8149    }
8150    /// Returns the function with the provided argument
8151    ///
8152    /// # Arguments
8153    ///
8154    /// * `name` - The name of the argument
8155    /// * `type_def` - The type of the argument
8156    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8157    pub fn with_arg_opts<'a>(
8158        &self,
8159        name: impl Into<String>,
8160        type_def: impl IntoID<TypeDefId>,
8161        opts: FunctionWithArgOpts<'a>,
8162    ) -> Function {
8163        let mut query = self.selection.select("withArg");
8164        query = query.arg("name", name.into());
8165        query = query.arg_lazy(
8166            "typeDef",
8167            Box::new(move || {
8168                let type_def = type_def.clone();
8169                Box::pin(async move { type_def.into_id().await.unwrap().quote() })
8170            }),
8171        );
8172        if let Some(description) = opts.description {
8173            query = query.arg("description", description);
8174        }
8175        if let Some(default_value) = opts.default_value {
8176            query = query.arg("defaultValue", default_value);
8177        }
8178        if let Some(default_path) = opts.default_path {
8179            query = query.arg("defaultPath", default_path);
8180        }
8181        if let Some(ignore) = opts.ignore {
8182            query = query.arg("ignore", ignore);
8183        }
8184        if let Some(source_map) = opts.source_map {
8185            query = query.arg("sourceMap", source_map);
8186        }
8187        if let Some(deprecated) = opts.deprecated {
8188            query = query.arg("deprecated", deprecated);
8189        }
8190        Function {
8191            proc: self.proc.clone(),
8192            selection: query,
8193            graphql_client: self.graphql_client.clone(),
8194        }
8195    }
8196    /// Returns the function updated to use the provided cache policy.
8197    ///
8198    /// # Arguments
8199    ///
8200    /// * `policy` - The cache policy to use.
8201    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8202    pub fn with_cache_policy(&self, policy: FunctionCachePolicy) -> Function {
8203        let mut query = self.selection.select("withCachePolicy");
8204        query = query.arg("policy", policy);
8205        Function {
8206            proc: self.proc.clone(),
8207            selection: query,
8208            graphql_client: self.graphql_client.clone(),
8209        }
8210    }
8211    /// Returns the function updated to use the provided cache policy.
8212    ///
8213    /// # Arguments
8214    ///
8215    /// * `policy` - The cache policy to use.
8216    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8217    pub fn with_cache_policy_opts<'a>(
8218        &self,
8219        policy: FunctionCachePolicy,
8220        opts: FunctionWithCachePolicyOpts<'a>,
8221    ) -> Function {
8222        let mut query = self.selection.select("withCachePolicy");
8223        query = query.arg("policy", policy);
8224        if let Some(time_to_live) = opts.time_to_live {
8225            query = query.arg("timeToLive", time_to_live);
8226        }
8227        Function {
8228            proc: self.proc.clone(),
8229            selection: query,
8230            graphql_client: self.graphql_client.clone(),
8231        }
8232    }
8233    /// Returns the function with the provided deprecation reason.
8234    ///
8235    /// # Arguments
8236    ///
8237    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8238    pub fn with_deprecated(&self) -> Function {
8239        let query = self.selection.select("withDeprecated");
8240        Function {
8241            proc: self.proc.clone(),
8242            selection: query,
8243            graphql_client: self.graphql_client.clone(),
8244        }
8245    }
8246    /// Returns the function with the provided deprecation reason.
8247    ///
8248    /// # Arguments
8249    ///
8250    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8251    pub fn with_deprecated_opts<'a>(&self, opts: FunctionWithDeprecatedOpts<'a>) -> Function {
8252        let mut query = self.selection.select("withDeprecated");
8253        if let Some(reason) = opts.reason {
8254            query = query.arg("reason", reason);
8255        }
8256        Function {
8257            proc: self.proc.clone(),
8258            selection: query,
8259            graphql_client: self.graphql_client.clone(),
8260        }
8261    }
8262    /// Returns the function with the given doc string.
8263    ///
8264    /// # Arguments
8265    ///
8266    /// * `description` - The doc string to set.
8267    pub fn with_description(&self, description: impl Into<String>) -> Function {
8268        let mut query = self.selection.select("withDescription");
8269        query = query.arg("description", description.into());
8270        Function {
8271            proc: self.proc.clone(),
8272            selection: query,
8273            graphql_client: self.graphql_client.clone(),
8274        }
8275    }
8276    /// Returns the function with the given source map.
8277    ///
8278    /// # Arguments
8279    ///
8280    /// * `source_map` - The source map for the function definition.
8281    pub fn with_source_map(&self, source_map: impl IntoID<SourceMapId>) -> Function {
8282        let mut query = self.selection.select("withSourceMap");
8283        query = query.arg_lazy(
8284            "sourceMap",
8285            Box::new(move || {
8286                let source_map = source_map.clone();
8287                Box::pin(async move { source_map.into_id().await.unwrap().quote() })
8288            }),
8289        );
8290        Function {
8291            proc: self.proc.clone(),
8292            selection: query,
8293            graphql_client: self.graphql_client.clone(),
8294        }
8295    }
8296}
8297#[derive(Clone)]
8298pub struct FunctionArg {
8299    pub proc: Option<Arc<DaggerSessionProc>>,
8300    pub selection: Selection,
8301    pub graphql_client: DynGraphQLClient,
8302}
8303impl FunctionArg {
8304    /// Only applies to arguments of type File or Directory. If the argument is not set, load it from the given path in the context directory
8305    pub async fn default_path(&self) -> Result<String, DaggerError> {
8306        let query = self.selection.select("defaultPath");
8307        query.execute(self.graphql_client.clone()).await
8308    }
8309    /// A default value to use for this argument when not explicitly set by the caller, if any.
8310    pub async fn default_value(&self) -> Result<Json, DaggerError> {
8311        let query = self.selection.select("defaultValue");
8312        query.execute(self.graphql_client.clone()).await
8313    }
8314    /// The reason this function is deprecated, if any.
8315    pub async fn deprecated(&self) -> Result<String, DaggerError> {
8316        let query = self.selection.select("deprecated");
8317        query.execute(self.graphql_client.clone()).await
8318    }
8319    /// A doc string for the argument, if any.
8320    pub async fn description(&self) -> Result<String, DaggerError> {
8321        let query = self.selection.select("description");
8322        query.execute(self.graphql_client.clone()).await
8323    }
8324    /// A unique identifier for this FunctionArg.
8325    pub async fn id(&self) -> Result<FunctionArgId, DaggerError> {
8326        let query = self.selection.select("id");
8327        query.execute(self.graphql_client.clone()).await
8328    }
8329    /// Only applies to arguments of type Directory. The ignore patterns are applied to the input directory, and matching entries are filtered out, in a cache-efficient manner.
8330    pub async fn ignore(&self) -> Result<Vec<String>, DaggerError> {
8331        let query = self.selection.select("ignore");
8332        query.execute(self.graphql_client.clone()).await
8333    }
8334    /// The name of the argument in lowerCamelCase format.
8335    pub async fn name(&self) -> Result<String, DaggerError> {
8336        let query = self.selection.select("name");
8337        query.execute(self.graphql_client.clone()).await
8338    }
8339    /// The location of this arg declaration.
8340    pub fn source_map(&self) -> SourceMap {
8341        let query = self.selection.select("sourceMap");
8342        SourceMap {
8343            proc: self.proc.clone(),
8344            selection: query,
8345            graphql_client: self.graphql_client.clone(),
8346        }
8347    }
8348    /// The type of the argument.
8349    pub fn type_def(&self) -> TypeDef {
8350        let query = self.selection.select("typeDef");
8351        TypeDef {
8352            proc: self.proc.clone(),
8353            selection: query,
8354            graphql_client: self.graphql_client.clone(),
8355        }
8356    }
8357}
8358#[derive(Clone)]
8359pub struct FunctionCall {
8360    pub proc: Option<Arc<DaggerSessionProc>>,
8361    pub selection: Selection,
8362    pub graphql_client: DynGraphQLClient,
8363}
8364impl FunctionCall {
8365    /// A unique identifier for this FunctionCall.
8366    pub async fn id(&self) -> Result<FunctionCallId, DaggerError> {
8367        let query = self.selection.select("id");
8368        query.execute(self.graphql_client.clone()).await
8369    }
8370    /// The argument values the function is being invoked with.
8371    pub fn input_args(&self) -> Vec<FunctionCallArgValue> {
8372        let query = self.selection.select("inputArgs");
8373        vec![FunctionCallArgValue {
8374            proc: self.proc.clone(),
8375            selection: query,
8376            graphql_client: self.graphql_client.clone(),
8377        }]
8378    }
8379    /// The name of the function being called.
8380    pub async fn name(&self) -> Result<String, DaggerError> {
8381        let query = self.selection.select("name");
8382        query.execute(self.graphql_client.clone()).await
8383    }
8384    /// The value of the parent object of the function being called. If the function is top-level to the module, this is always an empty object.
8385    pub async fn parent(&self) -> Result<Json, DaggerError> {
8386        let query = self.selection.select("parent");
8387        query.execute(self.graphql_client.clone()).await
8388    }
8389    /// The name of the parent object of the function being called. If the function is top-level to the module, this is the name of the module.
8390    pub async fn parent_name(&self) -> Result<String, DaggerError> {
8391        let query = self.selection.select("parentName");
8392        query.execute(self.graphql_client.clone()).await
8393    }
8394    /// Return an error from the function.
8395    ///
8396    /// # Arguments
8397    ///
8398    /// * `error` - The error to return.
8399    pub async fn return_error(&self, error: impl IntoID<ErrorId>) -> Result<Void, DaggerError> {
8400        let mut query = self.selection.select("returnError");
8401        query = query.arg_lazy(
8402            "error",
8403            Box::new(move || {
8404                let error = error.clone();
8405                Box::pin(async move { error.into_id().await.unwrap().quote() })
8406            }),
8407        );
8408        query.execute(self.graphql_client.clone()).await
8409    }
8410    /// Set the return value of the function call to the provided value.
8411    ///
8412    /// # Arguments
8413    ///
8414    /// * `value` - JSON serialization of the return value.
8415    pub async fn return_value(&self, value: Json) -> Result<Void, DaggerError> {
8416        let mut query = self.selection.select("returnValue");
8417        query = query.arg("value", value);
8418        query.execute(self.graphql_client.clone()).await
8419    }
8420}
8421#[derive(Clone)]
8422pub struct FunctionCallArgValue {
8423    pub proc: Option<Arc<DaggerSessionProc>>,
8424    pub selection: Selection,
8425    pub graphql_client: DynGraphQLClient,
8426}
8427impl FunctionCallArgValue {
8428    /// A unique identifier for this FunctionCallArgValue.
8429    pub async fn id(&self) -> Result<FunctionCallArgValueId, DaggerError> {
8430        let query = self.selection.select("id");
8431        query.execute(self.graphql_client.clone()).await
8432    }
8433    /// The name of the argument.
8434    pub async fn name(&self) -> Result<String, DaggerError> {
8435        let query = self.selection.select("name");
8436        query.execute(self.graphql_client.clone()).await
8437    }
8438    /// The value of the argument represented as a JSON serialized string.
8439    pub async fn value(&self) -> Result<Json, DaggerError> {
8440        let query = self.selection.select("value");
8441        query.execute(self.graphql_client.clone()).await
8442    }
8443}
8444#[derive(Clone)]
8445pub struct GeneratedCode {
8446    pub proc: Option<Arc<DaggerSessionProc>>,
8447    pub selection: Selection,
8448    pub graphql_client: DynGraphQLClient,
8449}
8450impl GeneratedCode {
8451    /// The directory containing the generated code.
8452    pub fn code(&self) -> Directory {
8453        let query = self.selection.select("code");
8454        Directory {
8455            proc: self.proc.clone(),
8456            selection: query,
8457            graphql_client: self.graphql_client.clone(),
8458        }
8459    }
8460    /// A unique identifier for this GeneratedCode.
8461    pub async fn id(&self) -> Result<GeneratedCodeId, DaggerError> {
8462        let query = self.selection.select("id");
8463        query.execute(self.graphql_client.clone()).await
8464    }
8465    /// List of paths to mark generated in version control (i.e. .gitattributes).
8466    pub async fn vcs_generated_paths(&self) -> Result<Vec<String>, DaggerError> {
8467        let query = self.selection.select("vcsGeneratedPaths");
8468        query.execute(self.graphql_client.clone()).await
8469    }
8470    /// List of paths to ignore in version control (i.e. .gitignore).
8471    pub async fn vcs_ignored_paths(&self) -> Result<Vec<String>, DaggerError> {
8472        let query = self.selection.select("vcsIgnoredPaths");
8473        query.execute(self.graphql_client.clone()).await
8474    }
8475    /// Set the list of paths to mark generated in version control.
8476    pub fn with_vcs_generated_paths(&self, paths: Vec<impl Into<String>>) -> GeneratedCode {
8477        let mut query = self.selection.select("withVCSGeneratedPaths");
8478        query = query.arg(
8479            "paths",
8480            paths.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
8481        );
8482        GeneratedCode {
8483            proc: self.proc.clone(),
8484            selection: query,
8485            graphql_client: self.graphql_client.clone(),
8486        }
8487    }
8488    /// Set the list of paths to ignore in version control.
8489    pub fn with_vcs_ignored_paths(&self, paths: Vec<impl Into<String>>) -> GeneratedCode {
8490        let mut query = self.selection.select("withVCSIgnoredPaths");
8491        query = query.arg(
8492            "paths",
8493            paths.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
8494        );
8495        GeneratedCode {
8496            proc: self.proc.clone(),
8497            selection: query,
8498            graphql_client: self.graphql_client.clone(),
8499        }
8500    }
8501}
8502#[derive(Clone)]
8503pub struct GitRef {
8504    pub proc: Option<Arc<DaggerSessionProc>>,
8505    pub selection: Selection,
8506    pub graphql_client: DynGraphQLClient,
8507}
8508#[derive(Builder, Debug, PartialEq)]
8509pub struct GitRefTreeOpts {
8510    /// The depth of the tree to fetch.
8511    #[builder(setter(into, strip_option), default)]
8512    pub depth: Option<isize>,
8513    /// Set to true to discard .git directory.
8514    #[builder(setter(into, strip_option), default)]
8515    pub discard_git_dir: Option<bool>,
8516}
8517impl GitRef {
8518    /// The resolved commit id at this ref.
8519    pub async fn commit(&self) -> Result<String, DaggerError> {
8520        let query = self.selection.select("commit");
8521        query.execute(self.graphql_client.clone()).await
8522    }
8523    /// Find the best common ancestor between this ref and another ref.
8524    ///
8525    /// # Arguments
8526    ///
8527    /// * `other` - The other ref to compare against.
8528    pub fn common_ancestor(&self, other: impl IntoID<GitRefId>) -> GitRef {
8529        let mut query = self.selection.select("commonAncestor");
8530        query = query.arg_lazy(
8531            "other",
8532            Box::new(move || {
8533                let other = other.clone();
8534                Box::pin(async move { other.into_id().await.unwrap().quote() })
8535            }),
8536        );
8537        GitRef {
8538            proc: self.proc.clone(),
8539            selection: query,
8540            graphql_client: self.graphql_client.clone(),
8541        }
8542    }
8543    /// A unique identifier for this GitRef.
8544    pub async fn id(&self) -> Result<GitRefId, DaggerError> {
8545        let query = self.selection.select("id");
8546        query.execute(self.graphql_client.clone()).await
8547    }
8548    /// The resolved ref name at this ref.
8549    pub async fn r#ref(&self) -> Result<String, DaggerError> {
8550        let query = self.selection.select("ref");
8551        query.execute(self.graphql_client.clone()).await
8552    }
8553    /// The filesystem tree at this ref.
8554    ///
8555    /// # Arguments
8556    ///
8557    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8558    pub fn tree(&self) -> Directory {
8559        let query = self.selection.select("tree");
8560        Directory {
8561            proc: self.proc.clone(),
8562            selection: query,
8563            graphql_client: self.graphql_client.clone(),
8564        }
8565    }
8566    /// The filesystem tree at this ref.
8567    ///
8568    /// # Arguments
8569    ///
8570    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8571    pub fn tree_opts(&self, opts: GitRefTreeOpts) -> Directory {
8572        let mut query = self.selection.select("tree");
8573        if let Some(discard_git_dir) = opts.discard_git_dir {
8574            query = query.arg("discardGitDir", discard_git_dir);
8575        }
8576        if let Some(depth) = opts.depth {
8577            query = query.arg("depth", depth);
8578        }
8579        Directory {
8580            proc: self.proc.clone(),
8581            selection: query,
8582            graphql_client: self.graphql_client.clone(),
8583        }
8584    }
8585}
8586#[derive(Clone)]
8587pub struct GitRepository {
8588    pub proc: Option<Arc<DaggerSessionProc>>,
8589    pub selection: Selection,
8590    pub graphql_client: DynGraphQLClient,
8591}
8592#[derive(Builder, Debug, PartialEq)]
8593pub struct GitRepositoryBranchesOpts<'a> {
8594    /// Glob patterns (e.g., "refs/tags/v*").
8595    #[builder(setter(into, strip_option), default)]
8596    pub patterns: Option<Vec<&'a str>>,
8597}
8598#[derive(Builder, Debug, PartialEq)]
8599pub struct GitRepositoryTagsOpts<'a> {
8600    /// Glob patterns (e.g., "refs/tags/v*").
8601    #[builder(setter(into, strip_option), default)]
8602    pub patterns: Option<Vec<&'a str>>,
8603}
8604impl GitRepository {
8605    /// Returns details of a branch.
8606    ///
8607    /// # Arguments
8608    ///
8609    /// * `name` - Branch's name (e.g., "main").
8610    pub fn branch(&self, name: impl Into<String>) -> GitRef {
8611        let mut query = self.selection.select("branch");
8612        query = query.arg("name", name.into());
8613        GitRef {
8614            proc: self.proc.clone(),
8615            selection: query,
8616            graphql_client: self.graphql_client.clone(),
8617        }
8618    }
8619    /// branches that match any of the given glob patterns.
8620    ///
8621    /// # Arguments
8622    ///
8623    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8624    pub async fn branches(&self) -> Result<Vec<String>, DaggerError> {
8625        let query = self.selection.select("branches");
8626        query.execute(self.graphql_client.clone()).await
8627    }
8628    /// branches that match any of the given glob patterns.
8629    ///
8630    /// # Arguments
8631    ///
8632    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8633    pub async fn branches_opts<'a>(
8634        &self,
8635        opts: GitRepositoryBranchesOpts<'a>,
8636    ) -> Result<Vec<String>, DaggerError> {
8637        let mut query = self.selection.select("branches");
8638        if let Some(patterns) = opts.patterns {
8639            query = query.arg("patterns", patterns);
8640        }
8641        query.execute(self.graphql_client.clone()).await
8642    }
8643    /// Returns details of a commit.
8644    ///
8645    /// # Arguments
8646    ///
8647    /// * `id` - Identifier of the commit (e.g., "b6315d8f2810962c601af73f86831f6866ea798b").
8648    pub fn commit(&self, id: impl Into<String>) -> GitRef {
8649        let mut query = self.selection.select("commit");
8650        query = query.arg("id", id.into());
8651        GitRef {
8652            proc: self.proc.clone(),
8653            selection: query,
8654            graphql_client: self.graphql_client.clone(),
8655        }
8656    }
8657    /// Returns details for HEAD.
8658    pub fn head(&self) -> GitRef {
8659        let query = self.selection.select("head");
8660        GitRef {
8661            proc: self.proc.clone(),
8662            selection: query,
8663            graphql_client: self.graphql_client.clone(),
8664        }
8665    }
8666    /// A unique identifier for this GitRepository.
8667    pub async fn id(&self) -> Result<GitRepositoryId, DaggerError> {
8668        let query = self.selection.select("id");
8669        query.execute(self.graphql_client.clone()).await
8670    }
8671    /// Returns details for the latest semver tag.
8672    pub fn latest_version(&self) -> GitRef {
8673        let query = self.selection.select("latestVersion");
8674        GitRef {
8675            proc: self.proc.clone(),
8676            selection: query,
8677            graphql_client: self.graphql_client.clone(),
8678        }
8679    }
8680    /// Returns details of a ref.
8681    ///
8682    /// # Arguments
8683    ///
8684    /// * `name` - Ref's name (can be a commit identifier, a tag name, a branch name, or a fully-qualified ref).
8685    pub fn r#ref(&self, name: impl Into<String>) -> GitRef {
8686        let mut query = self.selection.select("ref");
8687        query = query.arg("name", name.into());
8688        GitRef {
8689            proc: self.proc.clone(),
8690            selection: query,
8691            graphql_client: self.graphql_client.clone(),
8692        }
8693    }
8694    /// Returns details of a tag.
8695    ///
8696    /// # Arguments
8697    ///
8698    /// * `name` - Tag's name (e.g., "v0.3.9").
8699    pub fn tag(&self, name: impl Into<String>) -> GitRef {
8700        let mut query = self.selection.select("tag");
8701        query = query.arg("name", name.into());
8702        GitRef {
8703            proc: self.proc.clone(),
8704            selection: query,
8705            graphql_client: self.graphql_client.clone(),
8706        }
8707    }
8708    /// tags that match any of the given glob patterns.
8709    ///
8710    /// # Arguments
8711    ///
8712    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8713    pub async fn tags(&self) -> Result<Vec<String>, DaggerError> {
8714        let query = self.selection.select("tags");
8715        query.execute(self.graphql_client.clone()).await
8716    }
8717    /// tags that match any of the given glob patterns.
8718    ///
8719    /// # Arguments
8720    ///
8721    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8722    pub async fn tags_opts<'a>(
8723        &self,
8724        opts: GitRepositoryTagsOpts<'a>,
8725    ) -> Result<Vec<String>, DaggerError> {
8726        let mut query = self.selection.select("tags");
8727        if let Some(patterns) = opts.patterns {
8728            query = query.arg("patterns", patterns);
8729        }
8730        query.execute(self.graphql_client.clone()).await
8731    }
8732    /// Returns the changeset of uncommitted changes in the git repository.
8733    pub fn uncommitted(&self) -> Changeset {
8734        let query = self.selection.select("uncommitted");
8735        Changeset {
8736            proc: self.proc.clone(),
8737            selection: query,
8738            graphql_client: self.graphql_client.clone(),
8739        }
8740    }
8741    /// The URL of the git repository.
8742    pub async fn url(&self) -> Result<String, DaggerError> {
8743        let query = self.selection.select("url");
8744        query.execute(self.graphql_client.clone()).await
8745    }
8746}
8747#[derive(Clone)]
8748pub struct Host {
8749    pub proc: Option<Arc<DaggerSessionProc>>,
8750    pub selection: Selection,
8751    pub graphql_client: DynGraphQLClient,
8752}
8753#[derive(Builder, Debug, PartialEq)]
8754pub struct HostDirectoryOpts<'a> {
8755    /// Exclude artifacts that match the given pattern (e.g., ["node_modules/", ".git*"]).
8756    #[builder(setter(into, strip_option), default)]
8757    pub exclude: Option<Vec<&'a str>>,
8758    /// Apply .gitignore filter rules inside the directory
8759    #[builder(setter(into, strip_option), default)]
8760    pub gitignore: Option<bool>,
8761    /// Include only artifacts that match the given pattern (e.g., ["app/", "package.*"]).
8762    #[builder(setter(into, strip_option), default)]
8763    pub include: Option<Vec<&'a str>>,
8764    /// If true, the directory will always be reloaded from the host.
8765    #[builder(setter(into, strip_option), default)]
8766    pub no_cache: Option<bool>,
8767}
8768#[derive(Builder, Debug, PartialEq)]
8769pub struct HostFileOpts {
8770    /// If true, the file will always be reloaded from the host.
8771    #[builder(setter(into, strip_option), default)]
8772    pub no_cache: Option<bool>,
8773}
8774#[derive(Builder, Debug, PartialEq)]
8775pub struct HostFindUpOpts {
8776    #[builder(setter(into, strip_option), default)]
8777    pub no_cache: Option<bool>,
8778}
8779#[derive(Builder, Debug, PartialEq)]
8780pub struct HostServiceOpts<'a> {
8781    /// Upstream host to forward traffic to.
8782    #[builder(setter(into, strip_option), default)]
8783    pub host: Option<&'a str>,
8784}
8785#[derive(Builder, Debug, PartialEq)]
8786pub struct HostTunnelOpts {
8787    /// Map each service port to the same port on the host, as if the service were running natively.
8788    /// Note: enabling may result in port conflicts.
8789    #[builder(setter(into, strip_option), default)]
8790    pub native: Option<bool>,
8791    /// Configure explicit port forwarding rules for the tunnel.
8792    /// If a port's frontend is unspecified or 0, a random port will be chosen by the host.
8793    /// If no ports are given, all of the service's ports are forwarded. If native is true, each port maps to the same port on the host. If native is false, each port maps to a random port chosen by the host.
8794    /// If ports are given and native is true, the ports are additive.
8795    #[builder(setter(into, strip_option), default)]
8796    pub ports: Option<Vec<PortForward>>,
8797}
8798impl Host {
8799    /// Accesses a container image on the host.
8800    ///
8801    /// # Arguments
8802    ///
8803    /// * `name` - Name of the image to access.
8804    pub fn container_image(&self, name: impl Into<String>) -> Container {
8805        let mut query = self.selection.select("containerImage");
8806        query = query.arg("name", name.into());
8807        Container {
8808            proc: self.proc.clone(),
8809            selection: query,
8810            graphql_client: self.graphql_client.clone(),
8811        }
8812    }
8813    /// Accesses a directory on the host.
8814    ///
8815    /// # Arguments
8816    ///
8817    /// * `path` - Location of the directory to access (e.g., ".").
8818    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8819    pub fn directory(&self, path: impl Into<String>) -> Directory {
8820        let mut query = self.selection.select("directory");
8821        query = query.arg("path", path.into());
8822        Directory {
8823            proc: self.proc.clone(),
8824            selection: query,
8825            graphql_client: self.graphql_client.clone(),
8826        }
8827    }
8828    /// Accesses a directory on the host.
8829    ///
8830    /// # Arguments
8831    ///
8832    /// * `path` - Location of the directory to access (e.g., ".").
8833    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8834    pub fn directory_opts<'a>(
8835        &self,
8836        path: impl Into<String>,
8837        opts: HostDirectoryOpts<'a>,
8838    ) -> Directory {
8839        let mut query = self.selection.select("directory");
8840        query = query.arg("path", path.into());
8841        if let Some(exclude) = opts.exclude {
8842            query = query.arg("exclude", exclude);
8843        }
8844        if let Some(include) = opts.include {
8845            query = query.arg("include", include);
8846        }
8847        if let Some(no_cache) = opts.no_cache {
8848            query = query.arg("noCache", no_cache);
8849        }
8850        if let Some(gitignore) = opts.gitignore {
8851            query = query.arg("gitignore", gitignore);
8852        }
8853        Directory {
8854            proc: self.proc.clone(),
8855            selection: query,
8856            graphql_client: self.graphql_client.clone(),
8857        }
8858    }
8859    /// Accesses a file on the host.
8860    ///
8861    /// # Arguments
8862    ///
8863    /// * `path` - Location of the file to retrieve (e.g., "README.md").
8864    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8865    pub fn file(&self, path: impl Into<String>) -> File {
8866        let mut query = self.selection.select("file");
8867        query = query.arg("path", path.into());
8868        File {
8869            proc: self.proc.clone(),
8870            selection: query,
8871            graphql_client: self.graphql_client.clone(),
8872        }
8873    }
8874    /// Accesses a file on the host.
8875    ///
8876    /// # Arguments
8877    ///
8878    /// * `path` - Location of the file to retrieve (e.g., "README.md").
8879    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8880    pub fn file_opts(&self, path: impl Into<String>, opts: HostFileOpts) -> File {
8881        let mut query = self.selection.select("file");
8882        query = query.arg("path", path.into());
8883        if let Some(no_cache) = opts.no_cache {
8884            query = query.arg("noCache", no_cache);
8885        }
8886        File {
8887            proc: self.proc.clone(),
8888            selection: query,
8889            graphql_client: self.graphql_client.clone(),
8890        }
8891    }
8892    /// Search for a file or directory by walking up the tree from system workdir. Return its relative path. If no match, return null
8893    ///
8894    /// # Arguments
8895    ///
8896    /// * `name` - name of the file or directory to search for
8897    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8898    pub async fn find_up(&self, name: impl Into<String>) -> Result<String, DaggerError> {
8899        let mut query = self.selection.select("findUp");
8900        query = query.arg("name", name.into());
8901        query.execute(self.graphql_client.clone()).await
8902    }
8903    /// Search for a file or directory by walking up the tree from system workdir. Return its relative path. If no match, return null
8904    ///
8905    /// # Arguments
8906    ///
8907    /// * `name` - name of the file or directory to search for
8908    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8909    pub async fn find_up_opts(
8910        &self,
8911        name: impl Into<String>,
8912        opts: HostFindUpOpts,
8913    ) -> Result<String, DaggerError> {
8914        let mut query = self.selection.select("findUp");
8915        query = query.arg("name", name.into());
8916        if let Some(no_cache) = opts.no_cache {
8917            query = query.arg("noCache", no_cache);
8918        }
8919        query.execute(self.graphql_client.clone()).await
8920    }
8921    /// A unique identifier for this Host.
8922    pub async fn id(&self) -> Result<HostId, DaggerError> {
8923        let query = self.selection.select("id");
8924        query.execute(self.graphql_client.clone()).await
8925    }
8926    /// Creates a service that forwards traffic to a specified address via the host.
8927    ///
8928    /// # Arguments
8929    ///
8930    /// * `ports` - Ports to expose via the service, forwarding through the host network.
8931    ///
8932    /// If a port's frontend is unspecified or 0, it defaults to the same as the backend port.
8933    ///
8934    /// An empty set of ports is not valid; an error will be returned.
8935    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8936    pub fn service(&self, ports: Vec<PortForward>) -> Service {
8937        let mut query = self.selection.select("service");
8938        query = query.arg("ports", ports);
8939        Service {
8940            proc: self.proc.clone(),
8941            selection: query,
8942            graphql_client: self.graphql_client.clone(),
8943        }
8944    }
8945    /// Creates a service that forwards traffic to a specified address via the host.
8946    ///
8947    /// # Arguments
8948    ///
8949    /// * `ports` - Ports to expose via the service, forwarding through the host network.
8950    ///
8951    /// If a port's frontend is unspecified or 0, it defaults to the same as the backend port.
8952    ///
8953    /// An empty set of ports is not valid; an error will be returned.
8954    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8955    pub fn service_opts<'a>(&self, ports: Vec<PortForward>, opts: HostServiceOpts<'a>) -> Service {
8956        let mut query = self.selection.select("service");
8957        query = query.arg("ports", ports);
8958        if let Some(host) = opts.host {
8959            query = query.arg("host", host);
8960        }
8961        Service {
8962            proc: self.proc.clone(),
8963            selection: query,
8964            graphql_client: self.graphql_client.clone(),
8965        }
8966    }
8967    /// Creates a tunnel that forwards traffic from the host to a service.
8968    ///
8969    /// # Arguments
8970    ///
8971    /// * `service` - Service to send traffic from the tunnel.
8972    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8973    pub fn tunnel(&self, service: impl IntoID<ServiceId>) -> Service {
8974        let mut query = self.selection.select("tunnel");
8975        query = query.arg_lazy(
8976            "service",
8977            Box::new(move || {
8978                let service = service.clone();
8979                Box::pin(async move { service.into_id().await.unwrap().quote() })
8980            }),
8981        );
8982        Service {
8983            proc: self.proc.clone(),
8984            selection: query,
8985            graphql_client: self.graphql_client.clone(),
8986        }
8987    }
8988    /// Creates a tunnel that forwards traffic from the host to a service.
8989    ///
8990    /// # Arguments
8991    ///
8992    /// * `service` - Service to send traffic from the tunnel.
8993    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
8994    pub fn tunnel_opts(&self, service: impl IntoID<ServiceId>, opts: HostTunnelOpts) -> Service {
8995        let mut query = self.selection.select("tunnel");
8996        query = query.arg_lazy(
8997            "service",
8998            Box::new(move || {
8999                let service = service.clone();
9000                Box::pin(async move { service.into_id().await.unwrap().quote() })
9001            }),
9002        );
9003        if let Some(native) = opts.native {
9004            query = query.arg("native", native);
9005        }
9006        if let Some(ports) = opts.ports {
9007            query = query.arg("ports", ports);
9008        }
9009        Service {
9010            proc: self.proc.clone(),
9011            selection: query,
9012            graphql_client: self.graphql_client.clone(),
9013        }
9014    }
9015    /// Accesses a Unix socket on the host.
9016    ///
9017    /// # Arguments
9018    ///
9019    /// * `path` - Location of the Unix socket (e.g., "/var/run/docker.sock").
9020    pub fn unix_socket(&self, path: impl Into<String>) -> Socket {
9021        let mut query = self.selection.select("unixSocket");
9022        query = query.arg("path", path.into());
9023        Socket {
9024            proc: self.proc.clone(),
9025            selection: query,
9026            graphql_client: self.graphql_client.clone(),
9027        }
9028    }
9029}
9030#[derive(Clone)]
9031pub struct InputTypeDef {
9032    pub proc: Option<Arc<DaggerSessionProc>>,
9033    pub selection: Selection,
9034    pub graphql_client: DynGraphQLClient,
9035}
9036impl InputTypeDef {
9037    /// Static fields defined on this input object, if any.
9038    pub fn fields(&self) -> Vec<FieldTypeDef> {
9039        let query = self.selection.select("fields");
9040        vec![FieldTypeDef {
9041            proc: self.proc.clone(),
9042            selection: query,
9043            graphql_client: self.graphql_client.clone(),
9044        }]
9045    }
9046    /// A unique identifier for this InputTypeDef.
9047    pub async fn id(&self) -> Result<InputTypeDefId, DaggerError> {
9048        let query = self.selection.select("id");
9049        query.execute(self.graphql_client.clone()).await
9050    }
9051    /// The name of the input object.
9052    pub async fn name(&self) -> Result<String, DaggerError> {
9053        let query = self.selection.select("name");
9054        query.execute(self.graphql_client.clone()).await
9055    }
9056}
9057#[derive(Clone)]
9058pub struct InterfaceTypeDef {
9059    pub proc: Option<Arc<DaggerSessionProc>>,
9060    pub selection: Selection,
9061    pub graphql_client: DynGraphQLClient,
9062}
9063impl InterfaceTypeDef {
9064    /// The doc string for the interface, if any.
9065    pub async fn description(&self) -> Result<String, DaggerError> {
9066        let query = self.selection.select("description");
9067        query.execute(self.graphql_client.clone()).await
9068    }
9069    /// Functions defined on this interface, if any.
9070    pub fn functions(&self) -> Vec<Function> {
9071        let query = self.selection.select("functions");
9072        vec![Function {
9073            proc: self.proc.clone(),
9074            selection: query,
9075            graphql_client: self.graphql_client.clone(),
9076        }]
9077    }
9078    /// A unique identifier for this InterfaceTypeDef.
9079    pub async fn id(&self) -> Result<InterfaceTypeDefId, DaggerError> {
9080        let query = self.selection.select("id");
9081        query.execute(self.graphql_client.clone()).await
9082    }
9083    /// The name of the interface.
9084    pub async fn name(&self) -> Result<String, DaggerError> {
9085        let query = self.selection.select("name");
9086        query.execute(self.graphql_client.clone()).await
9087    }
9088    /// The location of this interface declaration.
9089    pub fn source_map(&self) -> SourceMap {
9090        let query = self.selection.select("sourceMap");
9091        SourceMap {
9092            proc: self.proc.clone(),
9093            selection: query,
9094            graphql_client: self.graphql_client.clone(),
9095        }
9096    }
9097    /// If this InterfaceTypeDef is associated with a Module, the name of the module. Unset otherwise.
9098    pub async fn source_module_name(&self) -> Result<String, DaggerError> {
9099        let query = self.selection.select("sourceModuleName");
9100        query.execute(self.graphql_client.clone()).await
9101    }
9102}
9103#[derive(Clone)]
9104pub struct JsonValue {
9105    pub proc: Option<Arc<DaggerSessionProc>>,
9106    pub selection: Selection,
9107    pub graphql_client: DynGraphQLClient,
9108}
9109#[derive(Builder, Debug, PartialEq)]
9110pub struct JsonValueContentsOpts<'a> {
9111    /// Optional line prefix
9112    #[builder(setter(into, strip_option), default)]
9113    pub indent: Option<&'a str>,
9114    /// Pretty-print
9115    #[builder(setter(into, strip_option), default)]
9116    pub pretty: Option<bool>,
9117}
9118impl JsonValue {
9119    /// Decode an array from json
9120    pub fn as_array(&self) -> Vec<JsonValue> {
9121        let query = self.selection.select("asArray");
9122        vec![JsonValue {
9123            proc: self.proc.clone(),
9124            selection: query,
9125            graphql_client: self.graphql_client.clone(),
9126        }]
9127    }
9128    /// Decode a boolean from json
9129    pub async fn as_boolean(&self) -> Result<bool, DaggerError> {
9130        let query = self.selection.select("asBoolean");
9131        query.execute(self.graphql_client.clone()).await
9132    }
9133    /// Decode an integer from json
9134    pub async fn as_integer(&self) -> Result<isize, DaggerError> {
9135        let query = self.selection.select("asInteger");
9136        query.execute(self.graphql_client.clone()).await
9137    }
9138    /// Decode a string from json
9139    pub async fn as_string(&self) -> Result<String, DaggerError> {
9140        let query = self.selection.select("asString");
9141        query.execute(self.graphql_client.clone()).await
9142    }
9143    /// Return the value encoded as json
9144    ///
9145    /// # Arguments
9146    ///
9147    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
9148    pub async fn contents(&self) -> Result<Json, DaggerError> {
9149        let query = self.selection.select("contents");
9150        query.execute(self.graphql_client.clone()).await
9151    }
9152    /// Return the value encoded as json
9153    ///
9154    /// # Arguments
9155    ///
9156    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
9157    pub async fn contents_opts<'a>(
9158        &self,
9159        opts: JsonValueContentsOpts<'a>,
9160    ) -> Result<Json, DaggerError> {
9161        let mut query = self.selection.select("contents");
9162        if let Some(pretty) = opts.pretty {
9163            query = query.arg("pretty", pretty);
9164        }
9165        if let Some(indent) = opts.indent {
9166            query = query.arg("indent", indent);
9167        }
9168        query.execute(self.graphql_client.clone()).await
9169    }
9170    /// Lookup the field at the given path, and return its value.
9171    ///
9172    /// # Arguments
9173    ///
9174    /// * `path` - Path of the field to lookup, encoded as an array of field names
9175    pub fn field(&self, path: Vec<impl Into<String>>) -> JsonValue {
9176        let mut query = self.selection.select("field");
9177        query = query.arg(
9178            "path",
9179            path.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
9180        );
9181        JsonValue {
9182            proc: self.proc.clone(),
9183            selection: query,
9184            graphql_client: self.graphql_client.clone(),
9185        }
9186    }
9187    /// List fields of the encoded object
9188    pub async fn fields(&self) -> Result<Vec<String>, DaggerError> {
9189        let query = self.selection.select("fields");
9190        query.execute(self.graphql_client.clone()).await
9191    }
9192    /// A unique identifier for this JSONValue.
9193    pub async fn id(&self) -> Result<JsonValueId, DaggerError> {
9194        let query = self.selection.select("id");
9195        query.execute(self.graphql_client.clone()).await
9196    }
9197    /// Encode a boolean to json
9198    ///
9199    /// # Arguments
9200    ///
9201    /// * `value` - New boolean value
9202    pub fn new_boolean(&self, value: bool) -> JsonValue {
9203        let mut query = self.selection.select("newBoolean");
9204        query = query.arg("value", value);
9205        JsonValue {
9206            proc: self.proc.clone(),
9207            selection: query,
9208            graphql_client: self.graphql_client.clone(),
9209        }
9210    }
9211    /// Encode an integer to json
9212    ///
9213    /// # Arguments
9214    ///
9215    /// * `value` - New integer value
9216    pub fn new_integer(&self, value: isize) -> JsonValue {
9217        let mut query = self.selection.select("newInteger");
9218        query = query.arg("value", value);
9219        JsonValue {
9220            proc: self.proc.clone(),
9221            selection: query,
9222            graphql_client: self.graphql_client.clone(),
9223        }
9224    }
9225    /// Encode a string to json
9226    ///
9227    /// # Arguments
9228    ///
9229    /// * `value` - New string value
9230    pub fn new_string(&self, value: impl Into<String>) -> JsonValue {
9231        let mut query = self.selection.select("newString");
9232        query = query.arg("value", value.into());
9233        JsonValue {
9234            proc: self.proc.clone(),
9235            selection: query,
9236            graphql_client: self.graphql_client.clone(),
9237        }
9238    }
9239    /// Return a new json value, decoded from the given content
9240    ///
9241    /// # Arguments
9242    ///
9243    /// * `contents` - New JSON-encoded contents
9244    pub fn with_contents(&self, contents: Json) -> JsonValue {
9245        let mut query = self.selection.select("withContents");
9246        query = query.arg("contents", contents);
9247        JsonValue {
9248            proc: self.proc.clone(),
9249            selection: query,
9250            graphql_client: self.graphql_client.clone(),
9251        }
9252    }
9253    /// Set a new field at the given path
9254    ///
9255    /// # Arguments
9256    ///
9257    /// * `path` - Path of the field to set, encoded as an array of field names
9258    /// * `value` - The new value of the field
9259    pub fn with_field(
9260        &self,
9261        path: Vec<impl Into<String>>,
9262        value: impl IntoID<JsonValueId>,
9263    ) -> JsonValue {
9264        let mut query = self.selection.select("withField");
9265        query = query.arg(
9266            "path",
9267            path.into_iter().map(|i| i.into()).collect::<Vec<String>>(),
9268        );
9269        query = query.arg_lazy(
9270            "value",
9271            Box::new(move || {
9272                let value = value.clone();
9273                Box::pin(async move { value.into_id().await.unwrap().quote() })
9274            }),
9275        );
9276        JsonValue {
9277            proc: self.proc.clone(),
9278            selection: query,
9279            graphql_client: self.graphql_client.clone(),
9280        }
9281    }
9282}
9283#[derive(Clone)]
9284pub struct Llm {
9285    pub proc: Option<Arc<DaggerSessionProc>>,
9286    pub selection: Selection,
9287    pub graphql_client: DynGraphQLClient,
9288}
9289impl Llm {
9290    /// create a branch in the LLM's history
9291    pub fn attempt(&self, number: isize) -> Llm {
9292        let mut query = self.selection.select("attempt");
9293        query = query.arg("number", number);
9294        Llm {
9295            proc: self.proc.clone(),
9296            selection: query,
9297            graphql_client: self.graphql_client.clone(),
9298        }
9299    }
9300    /// returns the type of the current state
9301    pub fn bind_result(&self, name: impl Into<String>) -> Binding {
9302        let mut query = self.selection.select("bindResult");
9303        query = query.arg("name", name.into());
9304        Binding {
9305            proc: self.proc.clone(),
9306            selection: query,
9307            graphql_client: self.graphql_client.clone(),
9308        }
9309    }
9310    /// return the LLM's current environment
9311    pub fn env(&self) -> Env {
9312        let query = self.selection.select("env");
9313        Env {
9314            proc: self.proc.clone(),
9315            selection: query,
9316            graphql_client: self.graphql_client.clone(),
9317        }
9318    }
9319    /// Indicates whether there are any queued prompts or tool results to send to the model
9320    pub async fn has_prompt(&self) -> Result<bool, DaggerError> {
9321        let query = self.selection.select("hasPrompt");
9322        query.execute(self.graphql_client.clone()).await
9323    }
9324    /// return the llm message history
9325    pub async fn history(&self) -> Result<Vec<String>, DaggerError> {
9326        let query = self.selection.select("history");
9327        query.execute(self.graphql_client.clone()).await
9328    }
9329    /// return the raw llm message history as json
9330    pub async fn history_json(&self) -> Result<Json, DaggerError> {
9331        let query = self.selection.select("historyJSON");
9332        query.execute(self.graphql_client.clone()).await
9333    }
9334    /// A unique identifier for this LLM.
9335    pub async fn id(&self) -> Result<Llmid, DaggerError> {
9336        let query = self.selection.select("id");
9337        query.execute(self.graphql_client.clone()).await
9338    }
9339    /// return the last llm reply from the history
9340    pub async fn last_reply(&self) -> Result<String, DaggerError> {
9341        let query = self.selection.select("lastReply");
9342        query.execute(self.graphql_client.clone()).await
9343    }
9344    /// Submit the queued prompt, evaluate any tool calls, queue their results, and keep going until the model ends its turn
9345    pub fn r#loop(&self) -> Llm {
9346        let query = self.selection.select("loop");
9347        Llm {
9348            proc: self.proc.clone(),
9349            selection: query,
9350            graphql_client: self.graphql_client.clone(),
9351        }
9352    }
9353    /// return the model used by the llm
9354    pub async fn model(&self) -> Result<String, DaggerError> {
9355        let query = self.selection.select("model");
9356        query.execute(self.graphql_client.clone()).await
9357    }
9358    /// return the provider used by the llm
9359    pub async fn provider(&self) -> Result<String, DaggerError> {
9360        let query = self.selection.select("provider");
9361        query.execute(self.graphql_client.clone()).await
9362    }
9363    /// Submit the queued prompt or tool call results, evaluate any tool calls, and queue their results
9364    pub async fn step(&self) -> Result<Llmid, DaggerError> {
9365        let query = self.selection.select("step");
9366        query.execute(self.graphql_client.clone()).await
9367    }
9368    /// synchronize LLM state
9369    pub async fn sync(&self) -> Result<Llmid, DaggerError> {
9370        let query = self.selection.select("sync");
9371        query.execute(self.graphql_client.clone()).await
9372    }
9373    /// returns the token usage of the current state
9374    pub fn token_usage(&self) -> LlmTokenUsage {
9375        let query = self.selection.select("tokenUsage");
9376        LlmTokenUsage {
9377            proc: self.proc.clone(),
9378            selection: query,
9379            graphql_client: self.graphql_client.clone(),
9380        }
9381    }
9382    /// print documentation for available tools
9383    pub async fn tools(&self) -> Result<String, DaggerError> {
9384        let query = self.selection.select("tools");
9385        query.execute(self.graphql_client.clone()).await
9386    }
9387    /// Return a new LLM with the specified function no longer exposed as a tool
9388    ///
9389    /// # Arguments
9390    ///
9391    /// * `type_name` - The type name whose function will be blocked
9392    /// * `function` - The function to block
9393    ///
9394    /// Will be converted to lowerCamelCase if necessary.
9395    pub fn with_blocked_function(
9396        &self,
9397        type_name: impl Into<String>,
9398        function: impl Into<String>,
9399    ) -> Llm {
9400        let mut query = self.selection.select("withBlockedFunction");
9401        query = query.arg("typeName", type_name.into());
9402        query = query.arg("function", function.into());
9403        Llm {
9404            proc: self.proc.clone(),
9405            selection: query,
9406            graphql_client: self.graphql_client.clone(),
9407        }
9408    }
9409    /// allow the LLM to interact with an environment via MCP
9410    pub fn with_env(&self, env: impl IntoID<EnvId>) -> Llm {
9411        let mut query = self.selection.select("withEnv");
9412        query = query.arg_lazy(
9413            "env",
9414            Box::new(move || {
9415                let env = env.clone();
9416                Box::pin(async move { env.into_id().await.unwrap().quote() })
9417            }),
9418        );
9419        Llm {
9420            proc: self.proc.clone(),
9421            selection: query,
9422            graphql_client: self.graphql_client.clone(),
9423        }
9424    }
9425    /// Add an external MCP server to the LLM
9426    ///
9427    /// # Arguments
9428    ///
9429    /// * `name` - The name of the MCP server
9430    /// * `service` - The MCP service to run and communicate with over stdio
9431    pub fn with_mcp_server(&self, name: impl Into<String>, service: impl IntoID<ServiceId>) -> Llm {
9432        let mut query = self.selection.select("withMCPServer");
9433        query = query.arg("name", name.into());
9434        query = query.arg_lazy(
9435            "service",
9436            Box::new(move || {
9437                let service = service.clone();
9438                Box::pin(async move { service.into_id().await.unwrap().quote() })
9439            }),
9440        );
9441        Llm {
9442            proc: self.proc.clone(),
9443            selection: query,
9444            graphql_client: self.graphql_client.clone(),
9445        }
9446    }
9447    /// swap out the llm model
9448    ///
9449    /// # Arguments
9450    ///
9451    /// * `model` - The model to use
9452    pub fn with_model(&self, model: impl Into<String>) -> Llm {
9453        let mut query = self.selection.select("withModel");
9454        query = query.arg("model", model.into());
9455        Llm {
9456            proc: self.proc.clone(),
9457            selection: query,
9458            graphql_client: self.graphql_client.clone(),
9459        }
9460    }
9461    /// append a prompt to the llm context
9462    ///
9463    /// # Arguments
9464    ///
9465    /// * `prompt` - The prompt to send
9466    pub fn with_prompt(&self, prompt: impl Into<String>) -> Llm {
9467        let mut query = self.selection.select("withPrompt");
9468        query = query.arg("prompt", prompt.into());
9469        Llm {
9470            proc: self.proc.clone(),
9471            selection: query,
9472            graphql_client: self.graphql_client.clone(),
9473        }
9474    }
9475    /// append the contents of a file to the llm context
9476    ///
9477    /// # Arguments
9478    ///
9479    /// * `file` - The file to read the prompt from
9480    pub fn with_prompt_file(&self, file: impl IntoID<FileId>) -> Llm {
9481        let mut query = self.selection.select("withPromptFile");
9482        query = query.arg_lazy(
9483            "file",
9484            Box::new(move || {
9485                let file = file.clone();
9486                Box::pin(async move { file.into_id().await.unwrap().quote() })
9487            }),
9488        );
9489        Llm {
9490            proc: self.proc.clone(),
9491            selection: query,
9492            graphql_client: self.graphql_client.clone(),
9493        }
9494    }
9495    /// Use a static set of tools for method calls, e.g. for MCP clients that do not support dynamic tool registration
9496    pub fn with_static_tools(&self) -> Llm {
9497        let query = self.selection.select("withStaticTools");
9498        Llm {
9499            proc: self.proc.clone(),
9500            selection: query,
9501            graphql_client: self.graphql_client.clone(),
9502        }
9503    }
9504    /// Add a system prompt to the LLM's environment
9505    ///
9506    /// # Arguments
9507    ///
9508    /// * `prompt` - The system prompt to send
9509    pub fn with_system_prompt(&self, prompt: impl Into<String>) -> Llm {
9510        let mut query = self.selection.select("withSystemPrompt");
9511        query = query.arg("prompt", prompt.into());
9512        Llm {
9513            proc: self.proc.clone(),
9514            selection: query,
9515            graphql_client: self.graphql_client.clone(),
9516        }
9517    }
9518    /// Disable the default system prompt
9519    pub fn without_default_system_prompt(&self) -> Llm {
9520        let query = self.selection.select("withoutDefaultSystemPrompt");
9521        Llm {
9522            proc: self.proc.clone(),
9523            selection: query,
9524            graphql_client: self.graphql_client.clone(),
9525        }
9526    }
9527}
9528#[derive(Clone)]
9529pub struct LlmTokenUsage {
9530    pub proc: Option<Arc<DaggerSessionProc>>,
9531    pub selection: Selection,
9532    pub graphql_client: DynGraphQLClient,
9533}
9534impl LlmTokenUsage {
9535    pub async fn cached_token_reads(&self) -> Result<isize, DaggerError> {
9536        let query = self.selection.select("cachedTokenReads");
9537        query.execute(self.graphql_client.clone()).await
9538    }
9539    pub async fn cached_token_writes(&self) -> Result<isize, DaggerError> {
9540        let query = self.selection.select("cachedTokenWrites");
9541        query.execute(self.graphql_client.clone()).await
9542    }
9543    /// A unique identifier for this LLMTokenUsage.
9544    pub async fn id(&self) -> Result<LlmTokenUsageId, DaggerError> {
9545        let query = self.selection.select("id");
9546        query.execute(self.graphql_client.clone()).await
9547    }
9548    pub async fn input_tokens(&self) -> Result<isize, DaggerError> {
9549        let query = self.selection.select("inputTokens");
9550        query.execute(self.graphql_client.clone()).await
9551    }
9552    pub async fn output_tokens(&self) -> Result<isize, DaggerError> {
9553        let query = self.selection.select("outputTokens");
9554        query.execute(self.graphql_client.clone()).await
9555    }
9556    pub async fn total_tokens(&self) -> Result<isize, DaggerError> {
9557        let query = self.selection.select("totalTokens");
9558        query.execute(self.graphql_client.clone()).await
9559    }
9560}
9561#[derive(Clone)]
9562pub struct Label {
9563    pub proc: Option<Arc<DaggerSessionProc>>,
9564    pub selection: Selection,
9565    pub graphql_client: DynGraphQLClient,
9566}
9567impl Label {
9568    /// A unique identifier for this Label.
9569    pub async fn id(&self) -> Result<LabelId, DaggerError> {
9570        let query = self.selection.select("id");
9571        query.execute(self.graphql_client.clone()).await
9572    }
9573    /// The label name.
9574    pub async fn name(&self) -> Result<String, DaggerError> {
9575        let query = self.selection.select("name");
9576        query.execute(self.graphql_client.clone()).await
9577    }
9578    /// The label value.
9579    pub async fn value(&self) -> Result<String, DaggerError> {
9580        let query = self.selection.select("value");
9581        query.execute(self.graphql_client.clone()).await
9582    }
9583}
9584#[derive(Clone)]
9585pub struct ListTypeDef {
9586    pub proc: Option<Arc<DaggerSessionProc>>,
9587    pub selection: Selection,
9588    pub graphql_client: DynGraphQLClient,
9589}
9590impl ListTypeDef {
9591    /// The type of the elements in the list.
9592    pub fn element_type_def(&self) -> TypeDef {
9593        let query = self.selection.select("elementTypeDef");
9594        TypeDef {
9595            proc: self.proc.clone(),
9596            selection: query,
9597            graphql_client: self.graphql_client.clone(),
9598        }
9599    }
9600    /// A unique identifier for this ListTypeDef.
9601    pub async fn id(&self) -> Result<ListTypeDefId, DaggerError> {
9602        let query = self.selection.select("id");
9603        query.execute(self.graphql_client.clone()).await
9604    }
9605}
9606#[derive(Clone)]
9607pub struct Module {
9608    pub proc: Option<Arc<DaggerSessionProc>>,
9609    pub selection: Selection,
9610    pub graphql_client: DynGraphQLClient,
9611}
9612#[derive(Builder, Debug, PartialEq)]
9613pub struct ModuleServeOpts {
9614    /// Expose the dependencies of this module to the client
9615    #[builder(setter(into, strip_option), default)]
9616    pub include_dependencies: Option<bool>,
9617}
9618impl Module {
9619    /// The dependencies of the module.
9620    pub fn dependencies(&self) -> Vec<Module> {
9621        let query = self.selection.select("dependencies");
9622        vec![Module {
9623            proc: self.proc.clone(),
9624            selection: query,
9625            graphql_client: self.graphql_client.clone(),
9626        }]
9627    }
9628    /// The doc string of the module, if any
9629    pub async fn description(&self) -> Result<String, DaggerError> {
9630        let query = self.selection.select("description");
9631        query.execute(self.graphql_client.clone()).await
9632    }
9633    /// Enumerations served by this module.
9634    pub fn enums(&self) -> Vec<TypeDef> {
9635        let query = self.selection.select("enums");
9636        vec![TypeDef {
9637            proc: self.proc.clone(),
9638            selection: query,
9639            graphql_client: self.graphql_client.clone(),
9640        }]
9641    }
9642    /// The generated files and directories made on top of the module source's context directory.
9643    pub fn generated_context_directory(&self) -> Directory {
9644        let query = self.selection.select("generatedContextDirectory");
9645        Directory {
9646            proc: self.proc.clone(),
9647            selection: query,
9648            graphql_client: self.graphql_client.clone(),
9649        }
9650    }
9651    /// A unique identifier for this Module.
9652    pub async fn id(&self) -> Result<ModuleId, DaggerError> {
9653        let query = self.selection.select("id");
9654        query.execute(self.graphql_client.clone()).await
9655    }
9656    /// Interfaces served by this module.
9657    pub fn interfaces(&self) -> Vec<TypeDef> {
9658        let query = self.selection.select("interfaces");
9659        vec![TypeDef {
9660            proc: self.proc.clone(),
9661            selection: query,
9662            graphql_client: self.graphql_client.clone(),
9663        }]
9664    }
9665    /// The introspection schema JSON file for this module.
9666    /// This file represents the schema visible to the module's source code, including all core types and those from the dependencies.
9667    /// Note: this is in the context of a module, so some core types may be hidden.
9668    pub fn introspection_schema_json(&self) -> File {
9669        let query = self.selection.select("introspectionSchemaJSON");
9670        File {
9671            proc: self.proc.clone(),
9672            selection: query,
9673            graphql_client: self.graphql_client.clone(),
9674        }
9675    }
9676    /// The name of the module
9677    pub async fn name(&self) -> Result<String, DaggerError> {
9678        let query = self.selection.select("name");
9679        query.execute(self.graphql_client.clone()).await
9680    }
9681    /// Objects served by this module.
9682    pub fn objects(&self) -> Vec<TypeDef> {
9683        let query = self.selection.select("objects");
9684        vec![TypeDef {
9685            proc: self.proc.clone(),
9686            selection: query,
9687            graphql_client: self.graphql_client.clone(),
9688        }]
9689    }
9690    /// The container that runs the module's entrypoint. It will fail to execute if the module doesn't compile.
9691    pub fn runtime(&self) -> Container {
9692        let query = self.selection.select("runtime");
9693        Container {
9694            proc: self.proc.clone(),
9695            selection: query,
9696            graphql_client: self.graphql_client.clone(),
9697        }
9698    }
9699    /// The SDK config used by this module.
9700    pub fn sdk(&self) -> SdkConfig {
9701        let query = self.selection.select("sdk");
9702        SdkConfig {
9703            proc: self.proc.clone(),
9704            selection: query,
9705            graphql_client: self.graphql_client.clone(),
9706        }
9707    }
9708    /// Serve a module's API in the current session.
9709    /// Note: this can only be called once per session. In the future, it could return a stream or service to remove the side effect.
9710    ///
9711    /// # Arguments
9712    ///
9713    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
9714    pub async fn serve(&self) -> Result<Void, DaggerError> {
9715        let query = self.selection.select("serve");
9716        query.execute(self.graphql_client.clone()).await
9717    }
9718    /// Serve a module's API in the current session.
9719    /// Note: this can only be called once per session. In the future, it could return a stream or service to remove the side effect.
9720    ///
9721    /// # Arguments
9722    ///
9723    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
9724    pub async fn serve_opts(&self, opts: ModuleServeOpts) -> Result<Void, DaggerError> {
9725        let mut query = self.selection.select("serve");
9726        if let Some(include_dependencies) = opts.include_dependencies {
9727            query = query.arg("includeDependencies", include_dependencies);
9728        }
9729        query.execute(self.graphql_client.clone()).await
9730    }
9731    /// The source for the module.
9732    pub fn source(&self) -> ModuleSource {
9733        let query = self.selection.select("source");
9734        ModuleSource {
9735            proc: self.proc.clone(),
9736            selection: query,
9737            graphql_client: self.graphql_client.clone(),
9738        }
9739    }
9740    /// Forces evaluation of the module, including any loading into the engine and associated validation.
9741    pub async fn sync(&self) -> Result<ModuleId, DaggerError> {
9742        let query = self.selection.select("sync");
9743        query.execute(self.graphql_client.clone()).await
9744    }
9745    /// User-defined default values, loaded from local .env files.
9746    pub fn user_defaults(&self) -> EnvFile {
9747        let query = self.selection.select("userDefaults");
9748        EnvFile {
9749            proc: self.proc.clone(),
9750            selection: query,
9751            graphql_client: self.graphql_client.clone(),
9752        }
9753    }
9754    /// Retrieves the module with the given description
9755    ///
9756    /// # Arguments
9757    ///
9758    /// * `description` - The description to set
9759    pub fn with_description(&self, description: impl Into<String>) -> Module {
9760        let mut query = self.selection.select("withDescription");
9761        query = query.arg("description", description.into());
9762        Module {
9763            proc: self.proc.clone(),
9764            selection: query,
9765            graphql_client: self.graphql_client.clone(),
9766        }
9767    }
9768    /// This module plus the given Enum type and associated values
9769    pub fn with_enum(&self, r#enum: impl IntoID<TypeDefId>) -> Module {
9770        let mut query = self.selection.select("withEnum");
9771        query = query.arg_lazy(
9772            "enum",
9773            Box::new(move || {
9774                let r#enum = r#enum.clone();
9775                Box::pin(async move { r#enum.into_id().await.unwrap().quote() })
9776            }),
9777        );
9778        Module {
9779            proc: self.proc.clone(),
9780            selection: query,
9781            graphql_client: self.graphql_client.clone(),
9782        }
9783    }
9784    /// This module plus the given Interface type and associated functions
9785    pub fn with_interface(&self, iface: impl IntoID<TypeDefId>) -> Module {
9786        let mut query = self.selection.select("withInterface");
9787        query = query.arg_lazy(
9788            "iface",
9789            Box::new(move || {
9790                let iface = iface.clone();
9791                Box::pin(async move { iface.into_id().await.unwrap().quote() })
9792            }),
9793        );
9794        Module {
9795            proc: self.proc.clone(),
9796            selection: query,
9797            graphql_client: self.graphql_client.clone(),
9798        }
9799    }
9800    /// This module plus the given Object type and associated functions.
9801    pub fn with_object(&self, object: impl IntoID<TypeDefId>) -> Module {
9802        let mut query = self.selection.select("withObject");
9803        query = query.arg_lazy(
9804            "object",
9805            Box::new(move || {
9806                let object = object.clone();
9807                Box::pin(async move { object.into_id().await.unwrap().quote() })
9808            }),
9809        );
9810        Module {
9811            proc: self.proc.clone(),
9812            selection: query,
9813            graphql_client: self.graphql_client.clone(),
9814        }
9815    }
9816}
9817#[derive(Clone)]
9818pub struct ModuleConfigClient {
9819    pub proc: Option<Arc<DaggerSessionProc>>,
9820    pub selection: Selection,
9821    pub graphql_client: DynGraphQLClient,
9822}
9823impl ModuleConfigClient {
9824    /// The directory the client is generated in.
9825    pub async fn directory(&self) -> Result<String, DaggerError> {
9826        let query = self.selection.select("directory");
9827        query.execute(self.graphql_client.clone()).await
9828    }
9829    /// The generator to use
9830    pub async fn generator(&self) -> Result<String, DaggerError> {
9831        let query = self.selection.select("generator");
9832        query.execute(self.graphql_client.clone()).await
9833    }
9834    /// A unique identifier for this ModuleConfigClient.
9835    pub async fn id(&self) -> Result<ModuleConfigClientId, DaggerError> {
9836        let query = self.selection.select("id");
9837        query.execute(self.graphql_client.clone()).await
9838    }
9839}
9840#[derive(Clone)]
9841pub struct ModuleSource {
9842    pub proc: Option<Arc<DaggerSessionProc>>,
9843    pub selection: Selection,
9844    pub graphql_client: DynGraphQLClient,
9845}
9846impl ModuleSource {
9847    /// Load the source as a module. If this is a local source, the parent directory must have been provided during module source creation
9848    pub fn as_module(&self) -> Module {
9849        let query = self.selection.select("asModule");
9850        Module {
9851            proc: self.proc.clone(),
9852            selection: query,
9853            graphql_client: self.graphql_client.clone(),
9854        }
9855    }
9856    /// A human readable ref string representation of this module source.
9857    pub async fn as_string(&self) -> Result<String, DaggerError> {
9858        let query = self.selection.select("asString");
9859        query.execute(self.graphql_client.clone()).await
9860    }
9861    /// The blueprint referenced by the module source.
9862    pub fn blueprint(&self) -> ModuleSource {
9863        let query = self.selection.select("blueprint");
9864        ModuleSource {
9865            proc: self.proc.clone(),
9866            selection: query,
9867            graphql_client: self.graphql_client.clone(),
9868        }
9869    }
9870    /// The ref to clone the root of the git repo from. Only valid for git sources.
9871    pub async fn clone_ref(&self) -> Result<String, DaggerError> {
9872        let query = self.selection.select("cloneRef");
9873        query.execute(self.graphql_client.clone()).await
9874    }
9875    /// The resolved commit of the git repo this source points to.
9876    pub async fn commit(&self) -> Result<String, DaggerError> {
9877        let query = self.selection.select("commit");
9878        query.execute(self.graphql_client.clone()).await
9879    }
9880    /// The clients generated for the module.
9881    pub fn config_clients(&self) -> Vec<ModuleConfigClient> {
9882        let query = self.selection.select("configClients");
9883        vec![ModuleConfigClient {
9884            proc: self.proc.clone(),
9885            selection: query,
9886            graphql_client: self.graphql_client.clone(),
9887        }]
9888    }
9889    /// Whether an existing dagger.json for the module was found.
9890    pub async fn config_exists(&self) -> Result<bool, DaggerError> {
9891        let query = self.selection.select("configExists");
9892        query.execute(self.graphql_client.clone()).await
9893    }
9894    /// The full directory loaded for the module source, including the source code as a subdirectory.
9895    pub fn context_directory(&self) -> Directory {
9896        let query = self.selection.select("contextDirectory");
9897        Directory {
9898            proc: self.proc.clone(),
9899            selection: query,
9900            graphql_client: self.graphql_client.clone(),
9901        }
9902    }
9903    /// The dependencies of the module source.
9904    pub fn dependencies(&self) -> Vec<ModuleSource> {
9905        let query = self.selection.select("dependencies");
9906        vec![ModuleSource {
9907            proc: self.proc.clone(),
9908            selection: query,
9909            graphql_client: self.graphql_client.clone(),
9910        }]
9911    }
9912    /// A content-hash of the module source. Module sources with the same digest will output the same generated context and convert into the same module instance.
9913    pub async fn digest(&self) -> Result<String, DaggerError> {
9914        let query = self.selection.select("digest");
9915        query.execute(self.graphql_client.clone()).await
9916    }
9917    /// The directory containing the module configuration and source code (source code may be in a subdir).
9918    ///
9919    /// # Arguments
9920    ///
9921    /// * `path` - A subpath from the source directory to select.
9922    pub fn directory(&self, path: impl Into<String>) -> Directory {
9923        let mut query = self.selection.select("directory");
9924        query = query.arg("path", path.into());
9925        Directory {
9926            proc: self.proc.clone(),
9927            selection: query,
9928            graphql_client: self.graphql_client.clone(),
9929        }
9930    }
9931    /// The engine version of the module.
9932    pub async fn engine_version(&self) -> Result<String, DaggerError> {
9933        let query = self.selection.select("engineVersion");
9934        query.execute(self.graphql_client.clone()).await
9935    }
9936    /// The generated files and directories made on top of the module source's context directory.
9937    pub fn generated_context_directory(&self) -> Directory {
9938        let query = self.selection.select("generatedContextDirectory");
9939        Directory {
9940            proc: self.proc.clone(),
9941            selection: query,
9942            graphql_client: self.graphql_client.clone(),
9943        }
9944    }
9945    /// The URL to access the web view of the repository (e.g., GitHub, GitLab, Bitbucket).
9946    pub async fn html_repo_url(&self) -> Result<String, DaggerError> {
9947        let query = self.selection.select("htmlRepoURL");
9948        query.execute(self.graphql_client.clone()).await
9949    }
9950    /// The URL to the source's git repo in a web browser. Only valid for git sources.
9951    pub async fn html_url(&self) -> Result<String, DaggerError> {
9952        let query = self.selection.select("htmlURL");
9953        query.execute(self.graphql_client.clone()).await
9954    }
9955    /// A unique identifier for this ModuleSource.
9956    pub async fn id(&self) -> Result<ModuleSourceId, DaggerError> {
9957        let query = self.selection.select("id");
9958        query.execute(self.graphql_client.clone()).await
9959    }
9960    /// The introspection schema JSON file for this module source.
9961    /// This file represents the schema visible to the module's source code, including all core types and those from the dependencies.
9962    /// Note: this is in the context of a module, so some core types may be hidden.
9963    pub fn introspection_schema_json(&self) -> File {
9964        let query = self.selection.select("introspectionSchemaJSON");
9965        File {
9966            proc: self.proc.clone(),
9967            selection: query,
9968            graphql_client: self.graphql_client.clone(),
9969        }
9970    }
9971    /// The kind of module source (currently local, git or dir).
9972    pub async fn kind(&self) -> Result<ModuleSourceKind, DaggerError> {
9973        let query = self.selection.select("kind");
9974        query.execute(self.graphql_client.clone()).await
9975    }
9976    /// The full absolute path to the context directory on the caller's host filesystem that this module source is loaded from. Only valid for local module sources.
9977    pub async fn local_context_directory_path(&self) -> Result<String, DaggerError> {
9978        let query = self.selection.select("localContextDirectoryPath");
9979        query.execute(self.graphql_client.clone()).await
9980    }
9981    /// The name of the module, including any setting via the withName API.
9982    pub async fn module_name(&self) -> Result<String, DaggerError> {
9983        let query = self.selection.select("moduleName");
9984        query.execute(self.graphql_client.clone()).await
9985    }
9986    /// The original name of the module as read from the module's dagger.json (or set for the first time with the withName API).
9987    pub async fn module_original_name(&self) -> Result<String, DaggerError> {
9988        let query = self.selection.select("moduleOriginalName");
9989        query.execute(self.graphql_client.clone()).await
9990    }
9991    /// The original subpath used when instantiating this module source, relative to the context directory.
9992    pub async fn original_subpath(&self) -> Result<String, DaggerError> {
9993        let query = self.selection.select("originalSubpath");
9994        query.execute(self.graphql_client.clone()).await
9995    }
9996    /// The pinned version of this module source.
9997    pub async fn pin(&self) -> Result<String, DaggerError> {
9998        let query = self.selection.select("pin");
9999        query.execute(self.graphql_client.clone()).await
10000    }
10001    /// The import path corresponding to the root of the git repo this source points to. Only valid for git sources.
10002    pub async fn repo_root_path(&self) -> Result<String, DaggerError> {
10003        let query = self.selection.select("repoRootPath");
10004        query.execute(self.graphql_client.clone()).await
10005    }
10006    /// The SDK configuration of the module.
10007    pub fn sdk(&self) -> SdkConfig {
10008        let query = self.selection.select("sdk");
10009        SdkConfig {
10010            proc: self.proc.clone(),
10011            selection: query,
10012            graphql_client: self.graphql_client.clone(),
10013        }
10014    }
10015    /// The path, relative to the context directory, that contains the module's dagger.json.
10016    pub async fn source_root_subpath(&self) -> Result<String, DaggerError> {
10017        let query = self.selection.select("sourceRootSubpath");
10018        query.execute(self.graphql_client.clone()).await
10019    }
10020    /// The path to the directory containing the module's source code, relative to the context directory.
10021    pub async fn source_subpath(&self) -> Result<String, DaggerError> {
10022        let query = self.selection.select("sourceSubpath");
10023        query.execute(self.graphql_client.clone()).await
10024    }
10025    /// Forces evaluation of the module source, including any loading into the engine and associated validation.
10026    pub async fn sync(&self) -> Result<ModuleSourceId, DaggerError> {
10027        let query = self.selection.select("sync");
10028        query.execute(self.graphql_client.clone()).await
10029    }
10030    /// The toolchains referenced by the module source.
10031    pub fn toolchains(&self) -> Vec<ModuleSource> {
10032        let query = self.selection.select("toolchains");
10033        vec![ModuleSource {
10034            proc: self.proc.clone(),
10035            selection: query,
10036            graphql_client: self.graphql_client.clone(),
10037        }]
10038    }
10039    /// User-defined defaults read from local .env files
10040    pub fn user_defaults(&self) -> EnvFile {
10041        let query = self.selection.select("userDefaults");
10042        EnvFile {
10043            proc: self.proc.clone(),
10044            selection: query,
10045            graphql_client: self.graphql_client.clone(),
10046        }
10047    }
10048    /// The specified version of the git repo this source points to.
10049    pub async fn version(&self) -> Result<String, DaggerError> {
10050        let query = self.selection.select("version");
10051        query.execute(self.graphql_client.clone()).await
10052    }
10053    /// Set a blueprint for the module source.
10054    ///
10055    /// # Arguments
10056    ///
10057    /// * `blueprint` - The blueprint module to set.
10058    pub fn with_blueprint(&self, blueprint: impl IntoID<ModuleSourceId>) -> ModuleSource {
10059        let mut query = self.selection.select("withBlueprint");
10060        query = query.arg_lazy(
10061            "blueprint",
10062            Box::new(move || {
10063                let blueprint = blueprint.clone();
10064                Box::pin(async move { blueprint.into_id().await.unwrap().quote() })
10065            }),
10066        );
10067        ModuleSource {
10068            proc: self.proc.clone(),
10069            selection: query,
10070            graphql_client: self.graphql_client.clone(),
10071        }
10072    }
10073    /// Update the module source with a new client to generate.
10074    ///
10075    /// # Arguments
10076    ///
10077    /// * `generator` - The generator to use
10078    /// * `output_dir` - The output directory for the generated client.
10079    pub fn with_client(
10080        &self,
10081        generator: impl Into<String>,
10082        output_dir: impl Into<String>,
10083    ) -> ModuleSource {
10084        let mut query = self.selection.select("withClient");
10085        query = query.arg("generator", generator.into());
10086        query = query.arg("outputDir", output_dir.into());
10087        ModuleSource {
10088            proc: self.proc.clone(),
10089            selection: query,
10090            graphql_client: self.graphql_client.clone(),
10091        }
10092    }
10093    /// Append the provided dependencies to the module source's dependency list.
10094    ///
10095    /// # Arguments
10096    ///
10097    /// * `dependencies` - The dependencies to append.
10098    pub fn with_dependencies(&self, dependencies: Vec<ModuleSourceId>) -> ModuleSource {
10099        let mut query = self.selection.select("withDependencies");
10100        query = query.arg("dependencies", dependencies);
10101        ModuleSource {
10102            proc: self.proc.clone(),
10103            selection: query,
10104            graphql_client: self.graphql_client.clone(),
10105        }
10106    }
10107    /// Upgrade the engine version of the module to the given value.
10108    ///
10109    /// # Arguments
10110    ///
10111    /// * `version` - The engine version to upgrade to.
10112    pub fn with_engine_version(&self, version: impl Into<String>) -> ModuleSource {
10113        let mut query = self.selection.select("withEngineVersion");
10114        query = query.arg("version", version.into());
10115        ModuleSource {
10116            proc: self.proc.clone(),
10117            selection: query,
10118            graphql_client: self.graphql_client.clone(),
10119        }
10120    }
10121    /// Enable the experimental features for the module source.
10122    ///
10123    /// # Arguments
10124    ///
10125    /// * `features` - The experimental features to enable.
10126    pub fn with_experimental_features(
10127        &self,
10128        features: Vec<ModuleSourceExperimentalFeature>,
10129    ) -> ModuleSource {
10130        let mut query = self.selection.select("withExperimentalFeatures");
10131        query = query.arg("features", features);
10132        ModuleSource {
10133            proc: self.proc.clone(),
10134            selection: query,
10135            graphql_client: self.graphql_client.clone(),
10136        }
10137    }
10138    /// Update the module source with additional include patterns for files+directories from its context that are required for building it
10139    ///
10140    /// # Arguments
10141    ///
10142    /// * `patterns` - The new additional include patterns.
10143    pub fn with_includes(&self, patterns: Vec<impl Into<String>>) -> ModuleSource {
10144        let mut query = self.selection.select("withIncludes");
10145        query = query.arg(
10146            "patterns",
10147            patterns
10148                .into_iter()
10149                .map(|i| i.into())
10150                .collect::<Vec<String>>(),
10151        );
10152        ModuleSource {
10153            proc: self.proc.clone(),
10154            selection: query,
10155            graphql_client: self.graphql_client.clone(),
10156        }
10157    }
10158    /// Update the module source with a new name.
10159    ///
10160    /// # Arguments
10161    ///
10162    /// * `name` - The name to set.
10163    pub fn with_name(&self, name: impl Into<String>) -> ModuleSource {
10164        let mut query = self.selection.select("withName");
10165        query = query.arg("name", name.into());
10166        ModuleSource {
10167            proc: self.proc.clone(),
10168            selection: query,
10169            graphql_client: self.graphql_client.clone(),
10170        }
10171    }
10172    /// Update the module source with a new SDK.
10173    ///
10174    /// # Arguments
10175    ///
10176    /// * `source` - The SDK source to set.
10177    pub fn with_sdk(&self, source: impl Into<String>) -> ModuleSource {
10178        let mut query = self.selection.select("withSDK");
10179        query = query.arg("source", source.into());
10180        ModuleSource {
10181            proc: self.proc.clone(),
10182            selection: query,
10183            graphql_client: self.graphql_client.clone(),
10184        }
10185    }
10186    /// Update the module source with a new source subpath.
10187    ///
10188    /// # Arguments
10189    ///
10190    /// * `path` - The path to set as the source subpath. Must be relative to the module source's source root directory.
10191    pub fn with_source_subpath(&self, path: impl Into<String>) -> ModuleSource {
10192        let mut query = self.selection.select("withSourceSubpath");
10193        query = query.arg("path", path.into());
10194        ModuleSource {
10195            proc: self.proc.clone(),
10196            selection: query,
10197            graphql_client: self.graphql_client.clone(),
10198        }
10199    }
10200    /// Add toolchains to the module source.
10201    ///
10202    /// # Arguments
10203    ///
10204    /// * `toolchains` - The toolchain modules to add.
10205    pub fn with_toolchains(&self, toolchains: Vec<ModuleSourceId>) -> ModuleSource {
10206        let mut query = self.selection.select("withToolchains");
10207        query = query.arg("toolchains", toolchains);
10208        ModuleSource {
10209            proc: self.proc.clone(),
10210            selection: query,
10211            graphql_client: self.graphql_client.clone(),
10212        }
10213    }
10214    /// Update the blueprint module to the latest version.
10215    pub fn with_update_blueprint(&self) -> ModuleSource {
10216        let query = self.selection.select("withUpdateBlueprint");
10217        ModuleSource {
10218            proc: self.proc.clone(),
10219            selection: query,
10220            graphql_client: self.graphql_client.clone(),
10221        }
10222    }
10223    /// Update one or more module dependencies.
10224    ///
10225    /// # Arguments
10226    ///
10227    /// * `dependencies` - The dependencies to update.
10228    pub fn with_update_dependencies(&self, dependencies: Vec<impl Into<String>>) -> ModuleSource {
10229        let mut query = self.selection.select("withUpdateDependencies");
10230        query = query.arg(
10231            "dependencies",
10232            dependencies
10233                .into_iter()
10234                .map(|i| i.into())
10235                .collect::<Vec<String>>(),
10236        );
10237        ModuleSource {
10238            proc: self.proc.clone(),
10239            selection: query,
10240            graphql_client: self.graphql_client.clone(),
10241        }
10242    }
10243    /// Update one or more toolchains.
10244    ///
10245    /// # Arguments
10246    ///
10247    /// * `toolchains` - The toolchains to update.
10248    pub fn with_update_toolchains(&self, toolchains: Vec<impl Into<String>>) -> ModuleSource {
10249        let mut query = self.selection.select("withUpdateToolchains");
10250        query = query.arg(
10251            "toolchains",
10252            toolchains
10253                .into_iter()
10254                .map(|i| i.into())
10255                .collect::<Vec<String>>(),
10256        );
10257        ModuleSource {
10258            proc: self.proc.clone(),
10259            selection: query,
10260            graphql_client: self.graphql_client.clone(),
10261        }
10262    }
10263    /// Update one or more clients.
10264    ///
10265    /// # Arguments
10266    ///
10267    /// * `clients` - The clients to update
10268    pub fn with_updated_clients(&self, clients: Vec<impl Into<String>>) -> ModuleSource {
10269        let mut query = self.selection.select("withUpdatedClients");
10270        query = query.arg(
10271            "clients",
10272            clients
10273                .into_iter()
10274                .map(|i| i.into())
10275                .collect::<Vec<String>>(),
10276        );
10277        ModuleSource {
10278            proc: self.proc.clone(),
10279            selection: query,
10280            graphql_client: self.graphql_client.clone(),
10281        }
10282    }
10283    /// Remove the current blueprint from the module source.
10284    pub fn without_blueprint(&self) -> ModuleSource {
10285        let query = self.selection.select("withoutBlueprint");
10286        ModuleSource {
10287            proc: self.proc.clone(),
10288            selection: query,
10289            graphql_client: self.graphql_client.clone(),
10290        }
10291    }
10292    /// Remove a client from the module source.
10293    ///
10294    /// # Arguments
10295    ///
10296    /// * `path` - The path of the client to remove.
10297    pub fn without_client(&self, path: impl Into<String>) -> ModuleSource {
10298        let mut query = self.selection.select("withoutClient");
10299        query = query.arg("path", path.into());
10300        ModuleSource {
10301            proc: self.proc.clone(),
10302            selection: query,
10303            graphql_client: self.graphql_client.clone(),
10304        }
10305    }
10306    /// Remove the provided dependencies from the module source's dependency list.
10307    ///
10308    /// # Arguments
10309    ///
10310    /// * `dependencies` - The dependencies to remove.
10311    pub fn without_dependencies(&self, dependencies: Vec<impl Into<String>>) -> ModuleSource {
10312        let mut query = self.selection.select("withoutDependencies");
10313        query = query.arg(
10314            "dependencies",
10315            dependencies
10316                .into_iter()
10317                .map(|i| i.into())
10318                .collect::<Vec<String>>(),
10319        );
10320        ModuleSource {
10321            proc: self.proc.clone(),
10322            selection: query,
10323            graphql_client: self.graphql_client.clone(),
10324        }
10325    }
10326    /// Disable experimental features for the module source.
10327    ///
10328    /// # Arguments
10329    ///
10330    /// * `features` - The experimental features to disable.
10331    pub fn without_experimental_features(
10332        &self,
10333        features: Vec<ModuleSourceExperimentalFeature>,
10334    ) -> ModuleSource {
10335        let mut query = self.selection.select("withoutExperimentalFeatures");
10336        query = query.arg("features", features);
10337        ModuleSource {
10338            proc: self.proc.clone(),
10339            selection: query,
10340            graphql_client: self.graphql_client.clone(),
10341        }
10342    }
10343    /// Remove the provided toolchains from the module source.
10344    ///
10345    /// # Arguments
10346    ///
10347    /// * `toolchains` - The toolchains to remove.
10348    pub fn without_toolchains(&self, toolchains: Vec<impl Into<String>>) -> ModuleSource {
10349        let mut query = self.selection.select("withoutToolchains");
10350        query = query.arg(
10351            "toolchains",
10352            toolchains
10353                .into_iter()
10354                .map(|i| i.into())
10355                .collect::<Vec<String>>(),
10356        );
10357        ModuleSource {
10358            proc: self.proc.clone(),
10359            selection: query,
10360            graphql_client: self.graphql_client.clone(),
10361        }
10362    }
10363}
10364#[derive(Clone)]
10365pub struct ObjectTypeDef {
10366    pub proc: Option<Arc<DaggerSessionProc>>,
10367    pub selection: Selection,
10368    pub graphql_client: DynGraphQLClient,
10369}
10370impl ObjectTypeDef {
10371    /// The function used to construct new instances of this object, if any
10372    pub fn constructor(&self) -> Function {
10373        let query = self.selection.select("constructor");
10374        Function {
10375            proc: self.proc.clone(),
10376            selection: query,
10377            graphql_client: self.graphql_client.clone(),
10378        }
10379    }
10380    /// The reason this enum member is deprecated, if any.
10381    pub async fn deprecated(&self) -> Result<String, DaggerError> {
10382        let query = self.selection.select("deprecated");
10383        query.execute(self.graphql_client.clone()).await
10384    }
10385    /// The doc string for the object, if any.
10386    pub async fn description(&self) -> Result<String, DaggerError> {
10387        let query = self.selection.select("description");
10388        query.execute(self.graphql_client.clone()).await
10389    }
10390    /// Static fields defined on this object, if any.
10391    pub fn fields(&self) -> Vec<FieldTypeDef> {
10392        let query = self.selection.select("fields");
10393        vec![FieldTypeDef {
10394            proc: self.proc.clone(),
10395            selection: query,
10396            graphql_client: self.graphql_client.clone(),
10397        }]
10398    }
10399    /// Functions defined on this object, if any.
10400    pub fn functions(&self) -> Vec<Function> {
10401        let query = self.selection.select("functions");
10402        vec![Function {
10403            proc: self.proc.clone(),
10404            selection: query,
10405            graphql_client: self.graphql_client.clone(),
10406        }]
10407    }
10408    /// A unique identifier for this ObjectTypeDef.
10409    pub async fn id(&self) -> Result<ObjectTypeDefId, DaggerError> {
10410        let query = self.selection.select("id");
10411        query.execute(self.graphql_client.clone()).await
10412    }
10413    /// The name of the object.
10414    pub async fn name(&self) -> Result<String, DaggerError> {
10415        let query = self.selection.select("name");
10416        query.execute(self.graphql_client.clone()).await
10417    }
10418    /// The location of this object declaration.
10419    pub fn source_map(&self) -> SourceMap {
10420        let query = self.selection.select("sourceMap");
10421        SourceMap {
10422            proc: self.proc.clone(),
10423            selection: query,
10424            graphql_client: self.graphql_client.clone(),
10425        }
10426    }
10427    /// If this ObjectTypeDef is associated with a Module, the name of the module. Unset otherwise.
10428    pub async fn source_module_name(&self) -> Result<String, DaggerError> {
10429        let query = self.selection.select("sourceModuleName");
10430        query.execute(self.graphql_client.clone()).await
10431    }
10432}
10433#[derive(Clone)]
10434pub struct Port {
10435    pub proc: Option<Arc<DaggerSessionProc>>,
10436    pub selection: Selection,
10437    pub graphql_client: DynGraphQLClient,
10438}
10439impl Port {
10440    /// The port description.
10441    pub async fn description(&self) -> Result<String, DaggerError> {
10442        let query = self.selection.select("description");
10443        query.execute(self.graphql_client.clone()).await
10444    }
10445    /// Skip the health check when run as a service.
10446    pub async fn experimental_skip_healthcheck(&self) -> Result<bool, DaggerError> {
10447        let query = self.selection.select("experimentalSkipHealthcheck");
10448        query.execute(self.graphql_client.clone()).await
10449    }
10450    /// A unique identifier for this Port.
10451    pub async fn id(&self) -> Result<PortId, DaggerError> {
10452        let query = self.selection.select("id");
10453        query.execute(self.graphql_client.clone()).await
10454    }
10455    /// The port number.
10456    pub async fn port(&self) -> Result<isize, DaggerError> {
10457        let query = self.selection.select("port");
10458        query.execute(self.graphql_client.clone()).await
10459    }
10460    /// The transport layer protocol.
10461    pub async fn protocol(&self) -> Result<NetworkProtocol, DaggerError> {
10462        let query = self.selection.select("protocol");
10463        query.execute(self.graphql_client.clone()).await
10464    }
10465}
10466#[derive(Clone)]
10467pub struct Query {
10468    pub proc: Option<Arc<DaggerSessionProc>>,
10469    pub selection: Selection,
10470    pub graphql_client: DynGraphQLClient,
10471}
10472#[derive(Builder, Debug, PartialEq)]
10473pub struct QueryContainerOpts {
10474    /// Platform to initialize the container with. Defaults to the native platform of the current engine
10475    #[builder(setter(into, strip_option), default)]
10476    pub platform: Option<Platform>,
10477}
10478#[derive(Builder, Debug, PartialEq)]
10479pub struct QueryEnvOpts {
10480    /// Give the environment the same privileges as the caller: core API including host access, current module, and dependencies
10481    #[builder(setter(into, strip_option), default)]
10482    pub privileged: Option<bool>,
10483    /// Allow new outputs to be declared and saved in the environment
10484    #[builder(setter(into, strip_option), default)]
10485    pub writable: Option<bool>,
10486}
10487#[derive(Builder, Debug, PartialEq)]
10488pub struct QueryEnvFileOpts {
10489    /// Replace "${VAR}" or "$VAR" with the value of other vars
10490    #[builder(setter(into, strip_option), default)]
10491    pub expand: Option<bool>,
10492}
10493#[derive(Builder, Debug, PartialEq)]
10494pub struct QueryFileOpts {
10495    /// Permissions of the new file. Example: 0600
10496    #[builder(setter(into, strip_option), default)]
10497    pub permissions: Option<isize>,
10498}
10499#[derive(Builder, Debug, PartialEq)]
10500pub struct QueryGitOpts<'a> {
10501    /// A service which must be started before the repo is fetched.
10502    #[builder(setter(into, strip_option), default)]
10503    pub experimental_service_host: Option<ServiceId>,
10504    /// Secret used to populate the Authorization HTTP header
10505    #[builder(setter(into, strip_option), default)]
10506    pub http_auth_header: Option<SecretId>,
10507    /// Secret used to populate the password during basic HTTP Authorization
10508    #[builder(setter(into, strip_option), default)]
10509    pub http_auth_token: Option<SecretId>,
10510    /// Username used to populate the password during basic HTTP Authorization
10511    #[builder(setter(into, strip_option), default)]
10512    pub http_auth_username: Option<&'a str>,
10513    /// DEPRECATED: Set to true to keep .git directory.
10514    #[builder(setter(into, strip_option), default)]
10515    pub keep_git_dir: Option<bool>,
10516    /// Set SSH auth socket
10517    #[builder(setter(into, strip_option), default)]
10518    pub ssh_auth_socket: Option<SocketId>,
10519    /// Set SSH known hosts
10520    #[builder(setter(into, strip_option), default)]
10521    pub ssh_known_hosts: Option<&'a str>,
10522}
10523#[derive(Builder, Debug, PartialEq)]
10524pub struct QueryHttpOpts<'a> {
10525    /// Secret used to populate the Authorization HTTP header
10526    #[builder(setter(into, strip_option), default)]
10527    pub auth_header: Option<SecretId>,
10528    /// A service which must be started before the URL is fetched.
10529    #[builder(setter(into, strip_option), default)]
10530    pub experimental_service_host: Option<ServiceId>,
10531    /// File name to use for the file. Defaults to the last part of the URL.
10532    #[builder(setter(into, strip_option), default)]
10533    pub name: Option<&'a str>,
10534    /// Permissions to set on the file.
10535    #[builder(setter(into, strip_option), default)]
10536    pub permissions: Option<isize>,
10537}
10538#[derive(Builder, Debug, PartialEq)]
10539pub struct QueryLlmOpts<'a> {
10540    /// Cap the number of API calls for this LLM
10541    #[builder(setter(into, strip_option), default)]
10542    pub max_api_calls: Option<isize>,
10543    /// Model to use
10544    #[builder(setter(into, strip_option), default)]
10545    pub model: Option<&'a str>,
10546}
10547#[derive(Builder, Debug, PartialEq)]
10548pub struct QueryModuleSourceOpts<'a> {
10549    /// If true, do not error out if the provided ref string is a local path and does not exist yet. Useful when initializing new modules in directories that don't exist yet.
10550    #[builder(setter(into, strip_option), default)]
10551    pub allow_not_exists: Option<bool>,
10552    /// If true, do not attempt to find dagger.json in a parent directory of the provided path. Only relevant for local module sources.
10553    #[builder(setter(into, strip_option), default)]
10554    pub disable_find_up: Option<bool>,
10555    /// The pinned version of the module source
10556    #[builder(setter(into, strip_option), default)]
10557    pub ref_pin: Option<&'a str>,
10558    /// If set, error out if the ref string is not of the provided requireKind.
10559    #[builder(setter(into, strip_option), default)]
10560    pub require_kind: Option<ModuleSourceKind>,
10561}
10562#[derive(Builder, Debug, PartialEq)]
10563pub struct QuerySecretOpts<'a> {
10564    /// If set, the given string will be used as the cache key for this secret. This means that any secrets with the same cache key will be considered equivalent in terms of cache lookups, even if they have different URIs or plaintext values.
10565    /// For example, two secrets with the same cache key provided as secret env vars to other wise equivalent containers will result in the container withExecs hitting the cache for each other.
10566    /// If not set, the cache key for the secret will be derived from its plaintext value as looked up when the secret is constructed.
10567    #[builder(setter(into, strip_option), default)]
10568    pub cache_key: Option<&'a str>,
10569}
10570impl Query {
10571    /// initialize an address to load directories, containers, secrets or other object types.
10572    pub fn address(&self, value: impl Into<String>) -> Address {
10573        let mut query = self.selection.select("address");
10574        query = query.arg("value", value.into());
10575        Address {
10576            proc: self.proc.clone(),
10577            selection: query,
10578            graphql_client: self.graphql_client.clone(),
10579        }
10580    }
10581    /// Constructs a cache volume for a given cache key.
10582    ///
10583    /// # Arguments
10584    ///
10585    /// * `key` - A string identifier to target this cache volume (e.g., "modules-cache").
10586    pub fn cache_volume(&self, key: impl Into<String>) -> CacheVolume {
10587        let mut query = self.selection.select("cacheVolume");
10588        query = query.arg("key", key.into());
10589        CacheVolume {
10590            proc: self.proc.clone(),
10591            selection: query,
10592            graphql_client: self.graphql_client.clone(),
10593        }
10594    }
10595    /// Dagger Cloud configuration and state
10596    pub fn cloud(&self) -> Cloud {
10597        let query = self.selection.select("cloud");
10598        Cloud {
10599            proc: self.proc.clone(),
10600            selection: query,
10601            graphql_client: self.graphql_client.clone(),
10602        }
10603    }
10604    /// Creates a scratch container, with no image or metadata.
10605    /// To pull an image, follow up with the "from" function.
10606    ///
10607    /// # Arguments
10608    ///
10609    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10610    pub fn container(&self) -> Container {
10611        let query = self.selection.select("container");
10612        Container {
10613            proc: self.proc.clone(),
10614            selection: query,
10615            graphql_client: self.graphql_client.clone(),
10616        }
10617    }
10618    /// Creates a scratch container, with no image or metadata.
10619    /// To pull an image, follow up with the "from" function.
10620    ///
10621    /// # Arguments
10622    ///
10623    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10624    pub fn container_opts(&self, opts: QueryContainerOpts) -> Container {
10625        let mut query = self.selection.select("container");
10626        if let Some(platform) = opts.platform {
10627            query = query.arg("platform", platform);
10628        }
10629        Container {
10630            proc: self.proc.clone(),
10631            selection: query,
10632            graphql_client: self.graphql_client.clone(),
10633        }
10634    }
10635    /// Returns the current environment
10636    /// When called from a function invoked via an LLM tool call, this will be the LLM's current environment, including any modifications made through calling tools. Env values returned by functions become the new environment for subsequent calls, and Changeset values returned by functions are applied to the environment's workspace.
10637    /// When called from a module function outside of an LLM, this returns an Env with the current module installed, and with the current module's source directory as its workspace.
10638    pub fn current_env(&self) -> Env {
10639        let query = self.selection.select("currentEnv");
10640        Env {
10641            proc: self.proc.clone(),
10642            selection: query,
10643            graphql_client: self.graphql_client.clone(),
10644        }
10645    }
10646    /// The FunctionCall context that the SDK caller is currently executing in.
10647    /// If the caller is not currently executing in a function, this will return an error.
10648    pub fn current_function_call(&self) -> FunctionCall {
10649        let query = self.selection.select("currentFunctionCall");
10650        FunctionCall {
10651            proc: self.proc.clone(),
10652            selection: query,
10653            graphql_client: self.graphql_client.clone(),
10654        }
10655    }
10656    /// The module currently being served in the session, if any.
10657    pub fn current_module(&self) -> CurrentModule {
10658        let query = self.selection.select("currentModule");
10659        CurrentModule {
10660            proc: self.proc.clone(),
10661            selection: query,
10662            graphql_client: self.graphql_client.clone(),
10663        }
10664    }
10665    /// The TypeDef representations of the objects currently being served in the session.
10666    pub fn current_type_defs(&self) -> Vec<TypeDef> {
10667        let query = self.selection.select("currentTypeDefs");
10668        vec![TypeDef {
10669            proc: self.proc.clone(),
10670            selection: query,
10671            graphql_client: self.graphql_client.clone(),
10672        }]
10673    }
10674    /// The default platform of the engine.
10675    pub async fn default_platform(&self) -> Result<Platform, DaggerError> {
10676        let query = self.selection.select("defaultPlatform");
10677        query.execute(self.graphql_client.clone()).await
10678    }
10679    /// Creates an empty directory.
10680    pub fn directory(&self) -> Directory {
10681        let query = self.selection.select("directory");
10682        Directory {
10683            proc: self.proc.clone(),
10684            selection: query,
10685            graphql_client: self.graphql_client.clone(),
10686        }
10687    }
10688    /// The Dagger engine container configuration and state
10689    pub fn engine(&self) -> Engine {
10690        let query = self.selection.select("engine");
10691        Engine {
10692            proc: self.proc.clone(),
10693            selection: query,
10694            graphql_client: self.graphql_client.clone(),
10695        }
10696    }
10697    /// Initializes a new environment
10698    ///
10699    /// # Arguments
10700    ///
10701    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10702    pub fn env(&self) -> Env {
10703        let query = self.selection.select("env");
10704        Env {
10705            proc: self.proc.clone(),
10706            selection: query,
10707            graphql_client: self.graphql_client.clone(),
10708        }
10709    }
10710    /// Initializes a new environment
10711    ///
10712    /// # Arguments
10713    ///
10714    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10715    pub fn env_opts(&self, opts: QueryEnvOpts) -> Env {
10716        let mut query = self.selection.select("env");
10717        if let Some(privileged) = opts.privileged {
10718            query = query.arg("privileged", privileged);
10719        }
10720        if let Some(writable) = opts.writable {
10721            query = query.arg("writable", writable);
10722        }
10723        Env {
10724            proc: self.proc.clone(),
10725            selection: query,
10726            graphql_client: self.graphql_client.clone(),
10727        }
10728    }
10729    /// Initialize an environment file
10730    ///
10731    /// # Arguments
10732    ///
10733    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10734    pub fn env_file(&self) -> EnvFile {
10735        let query = self.selection.select("envFile");
10736        EnvFile {
10737            proc: self.proc.clone(),
10738            selection: query,
10739            graphql_client: self.graphql_client.clone(),
10740        }
10741    }
10742    /// Initialize an environment file
10743    ///
10744    /// # Arguments
10745    ///
10746    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10747    pub fn env_file_opts(&self, opts: QueryEnvFileOpts) -> EnvFile {
10748        let mut query = self.selection.select("envFile");
10749        if let Some(expand) = opts.expand {
10750            query = query.arg("expand", expand);
10751        }
10752        EnvFile {
10753            proc: self.proc.clone(),
10754            selection: query,
10755            graphql_client: self.graphql_client.clone(),
10756        }
10757    }
10758    /// Create a new error.
10759    ///
10760    /// # Arguments
10761    ///
10762    /// * `message` - A brief description of the error.
10763    pub fn error(&self, message: impl Into<String>) -> Error {
10764        let mut query = self.selection.select("error");
10765        query = query.arg("message", message.into());
10766        Error {
10767            proc: self.proc.clone(),
10768            selection: query,
10769            graphql_client: self.graphql_client.clone(),
10770        }
10771    }
10772    /// Creates a file with the specified contents.
10773    ///
10774    /// # Arguments
10775    ///
10776    /// * `name` - Name of the new file. Example: "foo.txt"
10777    /// * `contents` - Contents of the new file. Example: "Hello world!"
10778    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10779    pub fn file(&self, name: impl Into<String>, contents: impl Into<String>) -> File {
10780        let mut query = self.selection.select("file");
10781        query = query.arg("name", name.into());
10782        query = query.arg("contents", contents.into());
10783        File {
10784            proc: self.proc.clone(),
10785            selection: query,
10786            graphql_client: self.graphql_client.clone(),
10787        }
10788    }
10789    /// Creates a file with the specified contents.
10790    ///
10791    /// # Arguments
10792    ///
10793    /// * `name` - Name of the new file. Example: "foo.txt"
10794    /// * `contents` - Contents of the new file. Example: "Hello world!"
10795    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10796    pub fn file_opts(
10797        &self,
10798        name: impl Into<String>,
10799        contents: impl Into<String>,
10800        opts: QueryFileOpts,
10801    ) -> File {
10802        let mut query = self.selection.select("file");
10803        query = query.arg("name", name.into());
10804        query = query.arg("contents", contents.into());
10805        if let Some(permissions) = opts.permissions {
10806            query = query.arg("permissions", permissions);
10807        }
10808        File {
10809            proc: self.proc.clone(),
10810            selection: query,
10811            graphql_client: self.graphql_client.clone(),
10812        }
10813    }
10814    /// Creates a function.
10815    ///
10816    /// # Arguments
10817    ///
10818    /// * `name` - Name of the function, in its original format from the implementation language.
10819    /// * `return_type` - Return type of the function.
10820    pub fn function(
10821        &self,
10822        name: impl Into<String>,
10823        return_type: impl IntoID<TypeDefId>,
10824    ) -> Function {
10825        let mut query = self.selection.select("function");
10826        query = query.arg("name", name.into());
10827        query = query.arg_lazy(
10828            "returnType",
10829            Box::new(move || {
10830                let return_type = return_type.clone();
10831                Box::pin(async move { return_type.into_id().await.unwrap().quote() })
10832            }),
10833        );
10834        Function {
10835            proc: self.proc.clone(),
10836            selection: query,
10837            graphql_client: self.graphql_client.clone(),
10838        }
10839    }
10840    /// Create a code generation result, given a directory containing the generated code.
10841    pub fn generated_code(&self, code: impl IntoID<DirectoryId>) -> GeneratedCode {
10842        let mut query = self.selection.select("generatedCode");
10843        query = query.arg_lazy(
10844            "code",
10845            Box::new(move || {
10846                let code = code.clone();
10847                Box::pin(async move { code.into_id().await.unwrap().quote() })
10848            }),
10849        );
10850        GeneratedCode {
10851            proc: self.proc.clone(),
10852            selection: query,
10853            graphql_client: self.graphql_client.clone(),
10854        }
10855    }
10856    /// Queries a Git repository.
10857    ///
10858    /// # Arguments
10859    ///
10860    /// * `url` - URL of the git repository.
10861    ///
10862    /// Can be formatted as `https://{host}/{owner}/{repo}`, `git@{host}:{owner}/{repo}`.
10863    ///
10864    /// Suffix ".git" is optional.
10865    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10866    pub fn git(&self, url: impl Into<String>) -> GitRepository {
10867        let mut query = self.selection.select("git");
10868        query = query.arg("url", url.into());
10869        GitRepository {
10870            proc: self.proc.clone(),
10871            selection: query,
10872            graphql_client: self.graphql_client.clone(),
10873        }
10874    }
10875    /// Queries a Git repository.
10876    ///
10877    /// # Arguments
10878    ///
10879    /// * `url` - URL of the git repository.
10880    ///
10881    /// Can be formatted as `https://{host}/{owner}/{repo}`, `git@{host}:{owner}/{repo}`.
10882    ///
10883    /// Suffix ".git" is optional.
10884    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10885    pub fn git_opts<'a>(&self, url: impl Into<String>, opts: QueryGitOpts<'a>) -> GitRepository {
10886        let mut query = self.selection.select("git");
10887        query = query.arg("url", url.into());
10888        if let Some(keep_git_dir) = opts.keep_git_dir {
10889            query = query.arg("keepGitDir", keep_git_dir);
10890        }
10891        if let Some(ssh_known_hosts) = opts.ssh_known_hosts {
10892            query = query.arg("sshKnownHosts", ssh_known_hosts);
10893        }
10894        if let Some(ssh_auth_socket) = opts.ssh_auth_socket {
10895            query = query.arg("sshAuthSocket", ssh_auth_socket);
10896        }
10897        if let Some(http_auth_username) = opts.http_auth_username {
10898            query = query.arg("httpAuthUsername", http_auth_username);
10899        }
10900        if let Some(http_auth_token) = opts.http_auth_token {
10901            query = query.arg("httpAuthToken", http_auth_token);
10902        }
10903        if let Some(http_auth_header) = opts.http_auth_header {
10904            query = query.arg("httpAuthHeader", http_auth_header);
10905        }
10906        if let Some(experimental_service_host) = opts.experimental_service_host {
10907            query = query.arg("experimentalServiceHost", experimental_service_host);
10908        }
10909        GitRepository {
10910            proc: self.proc.clone(),
10911            selection: query,
10912            graphql_client: self.graphql_client.clone(),
10913        }
10914    }
10915    /// Queries the host environment.
10916    pub fn host(&self) -> Host {
10917        let query = self.selection.select("host");
10918        Host {
10919            proc: self.proc.clone(),
10920            selection: query,
10921            graphql_client: self.graphql_client.clone(),
10922        }
10923    }
10924    /// Returns a file containing an http remote url content.
10925    ///
10926    /// # Arguments
10927    ///
10928    /// * `url` - HTTP url to get the content from (e.g., "https://docs.dagger.io").
10929    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10930    pub fn http(&self, url: impl Into<String>) -> File {
10931        let mut query = self.selection.select("http");
10932        query = query.arg("url", url.into());
10933        File {
10934            proc: self.proc.clone(),
10935            selection: query,
10936            graphql_client: self.graphql_client.clone(),
10937        }
10938    }
10939    /// Returns a file containing an http remote url content.
10940    ///
10941    /// # Arguments
10942    ///
10943    /// * `url` - HTTP url to get the content from (e.g., "https://docs.dagger.io").
10944    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10945    pub fn http_opts<'a>(&self, url: impl Into<String>, opts: QueryHttpOpts<'a>) -> File {
10946        let mut query = self.selection.select("http");
10947        query = query.arg("url", url.into());
10948        if let Some(name) = opts.name {
10949            query = query.arg("name", name);
10950        }
10951        if let Some(permissions) = opts.permissions {
10952            query = query.arg("permissions", permissions);
10953        }
10954        if let Some(auth_header) = opts.auth_header {
10955            query = query.arg("authHeader", auth_header);
10956        }
10957        if let Some(experimental_service_host) = opts.experimental_service_host {
10958            query = query.arg("experimentalServiceHost", experimental_service_host);
10959        }
10960        File {
10961            proc: self.proc.clone(),
10962            selection: query,
10963            graphql_client: self.graphql_client.clone(),
10964        }
10965    }
10966    /// Initialize a JSON value
10967    pub fn json(&self) -> JsonValue {
10968        let query = self.selection.select("json");
10969        JsonValue {
10970            proc: self.proc.clone(),
10971            selection: query,
10972            graphql_client: self.graphql_client.clone(),
10973        }
10974    }
10975    /// Initialize a Large Language Model (LLM)
10976    ///
10977    /// # Arguments
10978    ///
10979    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10980    pub fn llm(&self) -> Llm {
10981        let query = self.selection.select("llm");
10982        Llm {
10983            proc: self.proc.clone(),
10984            selection: query,
10985            graphql_client: self.graphql_client.clone(),
10986        }
10987    }
10988    /// Initialize a Large Language Model (LLM)
10989    ///
10990    /// # Arguments
10991    ///
10992    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
10993    pub fn llm_opts<'a>(&self, opts: QueryLlmOpts<'a>) -> Llm {
10994        let mut query = self.selection.select("llm");
10995        if let Some(model) = opts.model {
10996            query = query.arg("model", model);
10997        }
10998        if let Some(max_api_calls) = opts.max_api_calls {
10999            query = query.arg("maxAPICalls", max_api_calls);
11000        }
11001        Llm {
11002            proc: self.proc.clone(),
11003            selection: query,
11004            graphql_client: self.graphql_client.clone(),
11005        }
11006    }
11007    /// Load a Address from its ID.
11008    pub fn load_address_from_id(&self, id: impl IntoID<AddressId>) -> Address {
11009        let mut query = self.selection.select("loadAddressFromID");
11010        query = query.arg_lazy(
11011            "id",
11012            Box::new(move || {
11013                let id = id.clone();
11014                Box::pin(async move { id.into_id().await.unwrap().quote() })
11015            }),
11016        );
11017        Address {
11018            proc: self.proc.clone(),
11019            selection: query,
11020            graphql_client: self.graphql_client.clone(),
11021        }
11022    }
11023    /// Load a Binding from its ID.
11024    pub fn load_binding_from_id(&self, id: impl IntoID<BindingId>) -> Binding {
11025        let mut query = self.selection.select("loadBindingFromID");
11026        query = query.arg_lazy(
11027            "id",
11028            Box::new(move || {
11029                let id = id.clone();
11030                Box::pin(async move { id.into_id().await.unwrap().quote() })
11031            }),
11032        );
11033        Binding {
11034            proc: self.proc.clone(),
11035            selection: query,
11036            graphql_client: self.graphql_client.clone(),
11037        }
11038    }
11039    /// Load a CacheVolume from its ID.
11040    pub fn load_cache_volume_from_id(&self, id: impl IntoID<CacheVolumeId>) -> CacheVolume {
11041        let mut query = self.selection.select("loadCacheVolumeFromID");
11042        query = query.arg_lazy(
11043            "id",
11044            Box::new(move || {
11045                let id = id.clone();
11046                Box::pin(async move { id.into_id().await.unwrap().quote() })
11047            }),
11048        );
11049        CacheVolume {
11050            proc: self.proc.clone(),
11051            selection: query,
11052            graphql_client: self.graphql_client.clone(),
11053        }
11054    }
11055    /// Load a Changeset from its ID.
11056    pub fn load_changeset_from_id(&self, id: impl IntoID<ChangesetId>) -> Changeset {
11057        let mut query = self.selection.select("loadChangesetFromID");
11058        query = query.arg_lazy(
11059            "id",
11060            Box::new(move || {
11061                let id = id.clone();
11062                Box::pin(async move { id.into_id().await.unwrap().quote() })
11063            }),
11064        );
11065        Changeset {
11066            proc: self.proc.clone(),
11067            selection: query,
11068            graphql_client: self.graphql_client.clone(),
11069        }
11070    }
11071    /// Load a Cloud from its ID.
11072    pub fn load_cloud_from_id(&self, id: impl IntoID<CloudId>) -> Cloud {
11073        let mut query = self.selection.select("loadCloudFromID");
11074        query = query.arg_lazy(
11075            "id",
11076            Box::new(move || {
11077                let id = id.clone();
11078                Box::pin(async move { id.into_id().await.unwrap().quote() })
11079            }),
11080        );
11081        Cloud {
11082            proc: self.proc.clone(),
11083            selection: query,
11084            graphql_client: self.graphql_client.clone(),
11085        }
11086    }
11087    /// Load a Container from its ID.
11088    pub fn load_container_from_id(&self, id: impl IntoID<ContainerId>) -> Container {
11089        let mut query = self.selection.select("loadContainerFromID");
11090        query = query.arg_lazy(
11091            "id",
11092            Box::new(move || {
11093                let id = id.clone();
11094                Box::pin(async move { id.into_id().await.unwrap().quote() })
11095            }),
11096        );
11097        Container {
11098            proc: self.proc.clone(),
11099            selection: query,
11100            graphql_client: self.graphql_client.clone(),
11101        }
11102    }
11103    /// Load a CurrentModule from its ID.
11104    pub fn load_current_module_from_id(&self, id: impl IntoID<CurrentModuleId>) -> CurrentModule {
11105        let mut query = self.selection.select("loadCurrentModuleFromID");
11106        query = query.arg_lazy(
11107            "id",
11108            Box::new(move || {
11109                let id = id.clone();
11110                Box::pin(async move { id.into_id().await.unwrap().quote() })
11111            }),
11112        );
11113        CurrentModule {
11114            proc: self.proc.clone(),
11115            selection: query,
11116            graphql_client: self.graphql_client.clone(),
11117        }
11118    }
11119    /// Load a Directory from its ID.
11120    pub fn load_directory_from_id(&self, id: impl IntoID<DirectoryId>) -> Directory {
11121        let mut query = self.selection.select("loadDirectoryFromID");
11122        query = query.arg_lazy(
11123            "id",
11124            Box::new(move || {
11125                let id = id.clone();
11126                Box::pin(async move { id.into_id().await.unwrap().quote() })
11127            }),
11128        );
11129        Directory {
11130            proc: self.proc.clone(),
11131            selection: query,
11132            graphql_client: self.graphql_client.clone(),
11133        }
11134    }
11135    /// Load a EngineCacheEntry from its ID.
11136    pub fn load_engine_cache_entry_from_id(
11137        &self,
11138        id: impl IntoID<EngineCacheEntryId>,
11139    ) -> EngineCacheEntry {
11140        let mut query = self.selection.select("loadEngineCacheEntryFromID");
11141        query = query.arg_lazy(
11142            "id",
11143            Box::new(move || {
11144                let id = id.clone();
11145                Box::pin(async move { id.into_id().await.unwrap().quote() })
11146            }),
11147        );
11148        EngineCacheEntry {
11149            proc: self.proc.clone(),
11150            selection: query,
11151            graphql_client: self.graphql_client.clone(),
11152        }
11153    }
11154    /// Load a EngineCacheEntrySet from its ID.
11155    pub fn load_engine_cache_entry_set_from_id(
11156        &self,
11157        id: impl IntoID<EngineCacheEntrySetId>,
11158    ) -> EngineCacheEntrySet {
11159        let mut query = self.selection.select("loadEngineCacheEntrySetFromID");
11160        query = query.arg_lazy(
11161            "id",
11162            Box::new(move || {
11163                let id = id.clone();
11164                Box::pin(async move { id.into_id().await.unwrap().quote() })
11165            }),
11166        );
11167        EngineCacheEntrySet {
11168            proc: self.proc.clone(),
11169            selection: query,
11170            graphql_client: self.graphql_client.clone(),
11171        }
11172    }
11173    /// Load a EngineCache from its ID.
11174    pub fn load_engine_cache_from_id(&self, id: impl IntoID<EngineCacheId>) -> EngineCache {
11175        let mut query = self.selection.select("loadEngineCacheFromID");
11176        query = query.arg_lazy(
11177            "id",
11178            Box::new(move || {
11179                let id = id.clone();
11180                Box::pin(async move { id.into_id().await.unwrap().quote() })
11181            }),
11182        );
11183        EngineCache {
11184            proc: self.proc.clone(),
11185            selection: query,
11186            graphql_client: self.graphql_client.clone(),
11187        }
11188    }
11189    /// Load a Engine from its ID.
11190    pub fn load_engine_from_id(&self, id: impl IntoID<EngineId>) -> Engine {
11191        let mut query = self.selection.select("loadEngineFromID");
11192        query = query.arg_lazy(
11193            "id",
11194            Box::new(move || {
11195                let id = id.clone();
11196                Box::pin(async move { id.into_id().await.unwrap().quote() })
11197            }),
11198        );
11199        Engine {
11200            proc: self.proc.clone(),
11201            selection: query,
11202            graphql_client: self.graphql_client.clone(),
11203        }
11204    }
11205    /// Load a EnumTypeDef from its ID.
11206    pub fn load_enum_type_def_from_id(&self, id: impl IntoID<EnumTypeDefId>) -> EnumTypeDef {
11207        let mut query = self.selection.select("loadEnumTypeDefFromID");
11208        query = query.arg_lazy(
11209            "id",
11210            Box::new(move || {
11211                let id = id.clone();
11212                Box::pin(async move { id.into_id().await.unwrap().quote() })
11213            }),
11214        );
11215        EnumTypeDef {
11216            proc: self.proc.clone(),
11217            selection: query,
11218            graphql_client: self.graphql_client.clone(),
11219        }
11220    }
11221    /// Load a EnumValueTypeDef from its ID.
11222    pub fn load_enum_value_type_def_from_id(
11223        &self,
11224        id: impl IntoID<EnumValueTypeDefId>,
11225    ) -> EnumValueTypeDef {
11226        let mut query = self.selection.select("loadEnumValueTypeDefFromID");
11227        query = query.arg_lazy(
11228            "id",
11229            Box::new(move || {
11230                let id = id.clone();
11231                Box::pin(async move { id.into_id().await.unwrap().quote() })
11232            }),
11233        );
11234        EnumValueTypeDef {
11235            proc: self.proc.clone(),
11236            selection: query,
11237            graphql_client: self.graphql_client.clone(),
11238        }
11239    }
11240    /// Load a EnvFile from its ID.
11241    pub fn load_env_file_from_id(&self, id: impl IntoID<EnvFileId>) -> EnvFile {
11242        let mut query = self.selection.select("loadEnvFileFromID");
11243        query = query.arg_lazy(
11244            "id",
11245            Box::new(move || {
11246                let id = id.clone();
11247                Box::pin(async move { id.into_id().await.unwrap().quote() })
11248            }),
11249        );
11250        EnvFile {
11251            proc: self.proc.clone(),
11252            selection: query,
11253            graphql_client: self.graphql_client.clone(),
11254        }
11255    }
11256    /// Load a Env from its ID.
11257    pub fn load_env_from_id(&self, id: impl IntoID<EnvId>) -> Env {
11258        let mut query = self.selection.select("loadEnvFromID");
11259        query = query.arg_lazy(
11260            "id",
11261            Box::new(move || {
11262                let id = id.clone();
11263                Box::pin(async move { id.into_id().await.unwrap().quote() })
11264            }),
11265        );
11266        Env {
11267            proc: self.proc.clone(),
11268            selection: query,
11269            graphql_client: self.graphql_client.clone(),
11270        }
11271    }
11272    /// Load a EnvVariable from its ID.
11273    pub fn load_env_variable_from_id(&self, id: impl IntoID<EnvVariableId>) -> EnvVariable {
11274        let mut query = self.selection.select("loadEnvVariableFromID");
11275        query = query.arg_lazy(
11276            "id",
11277            Box::new(move || {
11278                let id = id.clone();
11279                Box::pin(async move { id.into_id().await.unwrap().quote() })
11280            }),
11281        );
11282        EnvVariable {
11283            proc: self.proc.clone(),
11284            selection: query,
11285            graphql_client: self.graphql_client.clone(),
11286        }
11287    }
11288    /// Load a Error from its ID.
11289    pub fn load_error_from_id(&self, id: impl IntoID<ErrorId>) -> Error {
11290        let mut query = self.selection.select("loadErrorFromID");
11291        query = query.arg_lazy(
11292            "id",
11293            Box::new(move || {
11294                let id = id.clone();
11295                Box::pin(async move { id.into_id().await.unwrap().quote() })
11296            }),
11297        );
11298        Error {
11299            proc: self.proc.clone(),
11300            selection: query,
11301            graphql_client: self.graphql_client.clone(),
11302        }
11303    }
11304    /// Load a ErrorValue from its ID.
11305    pub fn load_error_value_from_id(&self, id: impl IntoID<ErrorValueId>) -> ErrorValue {
11306        let mut query = self.selection.select("loadErrorValueFromID");
11307        query = query.arg_lazy(
11308            "id",
11309            Box::new(move || {
11310                let id = id.clone();
11311                Box::pin(async move { id.into_id().await.unwrap().quote() })
11312            }),
11313        );
11314        ErrorValue {
11315            proc: self.proc.clone(),
11316            selection: query,
11317            graphql_client: self.graphql_client.clone(),
11318        }
11319    }
11320    /// Load a FieldTypeDef from its ID.
11321    pub fn load_field_type_def_from_id(&self, id: impl IntoID<FieldTypeDefId>) -> FieldTypeDef {
11322        let mut query = self.selection.select("loadFieldTypeDefFromID");
11323        query = query.arg_lazy(
11324            "id",
11325            Box::new(move || {
11326                let id = id.clone();
11327                Box::pin(async move { id.into_id().await.unwrap().quote() })
11328            }),
11329        );
11330        FieldTypeDef {
11331            proc: self.proc.clone(),
11332            selection: query,
11333            graphql_client: self.graphql_client.clone(),
11334        }
11335    }
11336    /// Load a File from its ID.
11337    pub fn load_file_from_id(&self, id: impl IntoID<FileId>) -> File {
11338        let mut query = self.selection.select("loadFileFromID");
11339        query = query.arg_lazy(
11340            "id",
11341            Box::new(move || {
11342                let id = id.clone();
11343                Box::pin(async move { id.into_id().await.unwrap().quote() })
11344            }),
11345        );
11346        File {
11347            proc: self.proc.clone(),
11348            selection: query,
11349            graphql_client: self.graphql_client.clone(),
11350        }
11351    }
11352    /// Load a FunctionArg from its ID.
11353    pub fn load_function_arg_from_id(&self, id: impl IntoID<FunctionArgId>) -> FunctionArg {
11354        let mut query = self.selection.select("loadFunctionArgFromID");
11355        query = query.arg_lazy(
11356            "id",
11357            Box::new(move || {
11358                let id = id.clone();
11359                Box::pin(async move { id.into_id().await.unwrap().quote() })
11360            }),
11361        );
11362        FunctionArg {
11363            proc: self.proc.clone(),
11364            selection: query,
11365            graphql_client: self.graphql_client.clone(),
11366        }
11367    }
11368    /// Load a FunctionCallArgValue from its ID.
11369    pub fn load_function_call_arg_value_from_id(
11370        &self,
11371        id: impl IntoID<FunctionCallArgValueId>,
11372    ) -> FunctionCallArgValue {
11373        let mut query = self.selection.select("loadFunctionCallArgValueFromID");
11374        query = query.arg_lazy(
11375            "id",
11376            Box::new(move || {
11377                let id = id.clone();
11378                Box::pin(async move { id.into_id().await.unwrap().quote() })
11379            }),
11380        );
11381        FunctionCallArgValue {
11382            proc: self.proc.clone(),
11383            selection: query,
11384            graphql_client: self.graphql_client.clone(),
11385        }
11386    }
11387    /// Load a FunctionCall from its ID.
11388    pub fn load_function_call_from_id(&self, id: impl IntoID<FunctionCallId>) -> FunctionCall {
11389        let mut query = self.selection.select("loadFunctionCallFromID");
11390        query = query.arg_lazy(
11391            "id",
11392            Box::new(move || {
11393                let id = id.clone();
11394                Box::pin(async move { id.into_id().await.unwrap().quote() })
11395            }),
11396        );
11397        FunctionCall {
11398            proc: self.proc.clone(),
11399            selection: query,
11400            graphql_client: self.graphql_client.clone(),
11401        }
11402    }
11403    /// Load a Function from its ID.
11404    pub fn load_function_from_id(&self, id: impl IntoID<FunctionId>) -> Function {
11405        let mut query = self.selection.select("loadFunctionFromID");
11406        query = query.arg_lazy(
11407            "id",
11408            Box::new(move || {
11409                let id = id.clone();
11410                Box::pin(async move { id.into_id().await.unwrap().quote() })
11411            }),
11412        );
11413        Function {
11414            proc: self.proc.clone(),
11415            selection: query,
11416            graphql_client: self.graphql_client.clone(),
11417        }
11418    }
11419    /// Load a GeneratedCode from its ID.
11420    pub fn load_generated_code_from_id(&self, id: impl IntoID<GeneratedCodeId>) -> GeneratedCode {
11421        let mut query = self.selection.select("loadGeneratedCodeFromID");
11422        query = query.arg_lazy(
11423            "id",
11424            Box::new(move || {
11425                let id = id.clone();
11426                Box::pin(async move { id.into_id().await.unwrap().quote() })
11427            }),
11428        );
11429        GeneratedCode {
11430            proc: self.proc.clone(),
11431            selection: query,
11432            graphql_client: self.graphql_client.clone(),
11433        }
11434    }
11435    /// Load a GitRef from its ID.
11436    pub fn load_git_ref_from_id(&self, id: impl IntoID<GitRefId>) -> GitRef {
11437        let mut query = self.selection.select("loadGitRefFromID");
11438        query = query.arg_lazy(
11439            "id",
11440            Box::new(move || {
11441                let id = id.clone();
11442                Box::pin(async move { id.into_id().await.unwrap().quote() })
11443            }),
11444        );
11445        GitRef {
11446            proc: self.proc.clone(),
11447            selection: query,
11448            graphql_client: self.graphql_client.clone(),
11449        }
11450    }
11451    /// Load a GitRepository from its ID.
11452    pub fn load_git_repository_from_id(&self, id: impl IntoID<GitRepositoryId>) -> GitRepository {
11453        let mut query = self.selection.select("loadGitRepositoryFromID");
11454        query = query.arg_lazy(
11455            "id",
11456            Box::new(move || {
11457                let id = id.clone();
11458                Box::pin(async move { id.into_id().await.unwrap().quote() })
11459            }),
11460        );
11461        GitRepository {
11462            proc: self.proc.clone(),
11463            selection: query,
11464            graphql_client: self.graphql_client.clone(),
11465        }
11466    }
11467    /// Load a Host from its ID.
11468    pub fn load_host_from_id(&self, id: impl IntoID<HostId>) -> Host {
11469        let mut query = self.selection.select("loadHostFromID");
11470        query = query.arg_lazy(
11471            "id",
11472            Box::new(move || {
11473                let id = id.clone();
11474                Box::pin(async move { id.into_id().await.unwrap().quote() })
11475            }),
11476        );
11477        Host {
11478            proc: self.proc.clone(),
11479            selection: query,
11480            graphql_client: self.graphql_client.clone(),
11481        }
11482    }
11483    /// Load a InputTypeDef from its ID.
11484    pub fn load_input_type_def_from_id(&self, id: impl IntoID<InputTypeDefId>) -> InputTypeDef {
11485        let mut query = self.selection.select("loadInputTypeDefFromID");
11486        query = query.arg_lazy(
11487            "id",
11488            Box::new(move || {
11489                let id = id.clone();
11490                Box::pin(async move { id.into_id().await.unwrap().quote() })
11491            }),
11492        );
11493        InputTypeDef {
11494            proc: self.proc.clone(),
11495            selection: query,
11496            graphql_client: self.graphql_client.clone(),
11497        }
11498    }
11499    /// Load a InterfaceTypeDef from its ID.
11500    pub fn load_interface_type_def_from_id(
11501        &self,
11502        id: impl IntoID<InterfaceTypeDefId>,
11503    ) -> InterfaceTypeDef {
11504        let mut query = self.selection.select("loadInterfaceTypeDefFromID");
11505        query = query.arg_lazy(
11506            "id",
11507            Box::new(move || {
11508                let id = id.clone();
11509                Box::pin(async move { id.into_id().await.unwrap().quote() })
11510            }),
11511        );
11512        InterfaceTypeDef {
11513            proc: self.proc.clone(),
11514            selection: query,
11515            graphql_client: self.graphql_client.clone(),
11516        }
11517    }
11518    /// Load a JSONValue from its ID.
11519    pub fn load_json_value_from_id(&self, id: impl IntoID<JsonValueId>) -> JsonValue {
11520        let mut query = self.selection.select("loadJSONValueFromID");
11521        query = query.arg_lazy(
11522            "id",
11523            Box::new(move || {
11524                let id = id.clone();
11525                Box::pin(async move { id.into_id().await.unwrap().quote() })
11526            }),
11527        );
11528        JsonValue {
11529            proc: self.proc.clone(),
11530            selection: query,
11531            graphql_client: self.graphql_client.clone(),
11532        }
11533    }
11534    /// Load a LLM from its ID.
11535    pub fn load_llm_from_id(&self, id: impl IntoID<Llmid>) -> Llm {
11536        let mut query = self.selection.select("loadLLMFromID");
11537        query = query.arg_lazy(
11538            "id",
11539            Box::new(move || {
11540                let id = id.clone();
11541                Box::pin(async move { id.into_id().await.unwrap().quote() })
11542            }),
11543        );
11544        Llm {
11545            proc: self.proc.clone(),
11546            selection: query,
11547            graphql_client: self.graphql_client.clone(),
11548        }
11549    }
11550    /// Load a LLMTokenUsage from its ID.
11551    pub fn load_llm_token_usage_from_id(&self, id: impl IntoID<LlmTokenUsageId>) -> LlmTokenUsage {
11552        let mut query = self.selection.select("loadLLMTokenUsageFromID");
11553        query = query.arg_lazy(
11554            "id",
11555            Box::new(move || {
11556                let id = id.clone();
11557                Box::pin(async move { id.into_id().await.unwrap().quote() })
11558            }),
11559        );
11560        LlmTokenUsage {
11561            proc: self.proc.clone(),
11562            selection: query,
11563            graphql_client: self.graphql_client.clone(),
11564        }
11565    }
11566    /// Load a Label from its ID.
11567    pub fn load_label_from_id(&self, id: impl IntoID<LabelId>) -> Label {
11568        let mut query = self.selection.select("loadLabelFromID");
11569        query = query.arg_lazy(
11570            "id",
11571            Box::new(move || {
11572                let id = id.clone();
11573                Box::pin(async move { id.into_id().await.unwrap().quote() })
11574            }),
11575        );
11576        Label {
11577            proc: self.proc.clone(),
11578            selection: query,
11579            graphql_client: self.graphql_client.clone(),
11580        }
11581    }
11582    /// Load a ListTypeDef from its ID.
11583    pub fn load_list_type_def_from_id(&self, id: impl IntoID<ListTypeDefId>) -> ListTypeDef {
11584        let mut query = self.selection.select("loadListTypeDefFromID");
11585        query = query.arg_lazy(
11586            "id",
11587            Box::new(move || {
11588                let id = id.clone();
11589                Box::pin(async move { id.into_id().await.unwrap().quote() })
11590            }),
11591        );
11592        ListTypeDef {
11593            proc: self.proc.clone(),
11594            selection: query,
11595            graphql_client: self.graphql_client.clone(),
11596        }
11597    }
11598    /// Load a ModuleConfigClient from its ID.
11599    pub fn load_module_config_client_from_id(
11600        &self,
11601        id: impl IntoID<ModuleConfigClientId>,
11602    ) -> ModuleConfigClient {
11603        let mut query = self.selection.select("loadModuleConfigClientFromID");
11604        query = query.arg_lazy(
11605            "id",
11606            Box::new(move || {
11607                let id = id.clone();
11608                Box::pin(async move { id.into_id().await.unwrap().quote() })
11609            }),
11610        );
11611        ModuleConfigClient {
11612            proc: self.proc.clone(),
11613            selection: query,
11614            graphql_client: self.graphql_client.clone(),
11615        }
11616    }
11617    /// Load a Module from its ID.
11618    pub fn load_module_from_id(&self, id: impl IntoID<ModuleId>) -> Module {
11619        let mut query = self.selection.select("loadModuleFromID");
11620        query = query.arg_lazy(
11621            "id",
11622            Box::new(move || {
11623                let id = id.clone();
11624                Box::pin(async move { id.into_id().await.unwrap().quote() })
11625            }),
11626        );
11627        Module {
11628            proc: self.proc.clone(),
11629            selection: query,
11630            graphql_client: self.graphql_client.clone(),
11631        }
11632    }
11633    /// Load a ModuleSource from its ID.
11634    pub fn load_module_source_from_id(&self, id: impl IntoID<ModuleSourceId>) -> ModuleSource {
11635        let mut query = self.selection.select("loadModuleSourceFromID");
11636        query = query.arg_lazy(
11637            "id",
11638            Box::new(move || {
11639                let id = id.clone();
11640                Box::pin(async move { id.into_id().await.unwrap().quote() })
11641            }),
11642        );
11643        ModuleSource {
11644            proc: self.proc.clone(),
11645            selection: query,
11646            graphql_client: self.graphql_client.clone(),
11647        }
11648    }
11649    /// Load a ObjectTypeDef from its ID.
11650    pub fn load_object_type_def_from_id(&self, id: impl IntoID<ObjectTypeDefId>) -> ObjectTypeDef {
11651        let mut query = self.selection.select("loadObjectTypeDefFromID");
11652        query = query.arg_lazy(
11653            "id",
11654            Box::new(move || {
11655                let id = id.clone();
11656                Box::pin(async move { id.into_id().await.unwrap().quote() })
11657            }),
11658        );
11659        ObjectTypeDef {
11660            proc: self.proc.clone(),
11661            selection: query,
11662            graphql_client: self.graphql_client.clone(),
11663        }
11664    }
11665    /// Load a Port from its ID.
11666    pub fn load_port_from_id(&self, id: impl IntoID<PortId>) -> Port {
11667        let mut query = self.selection.select("loadPortFromID");
11668        query = query.arg_lazy(
11669            "id",
11670            Box::new(move || {
11671                let id = id.clone();
11672                Box::pin(async move { id.into_id().await.unwrap().quote() })
11673            }),
11674        );
11675        Port {
11676            proc: self.proc.clone(),
11677            selection: query,
11678            graphql_client: self.graphql_client.clone(),
11679        }
11680    }
11681    /// Load a SDKConfig from its ID.
11682    pub fn load_sdk_config_from_id(&self, id: impl IntoID<SdkConfigId>) -> SdkConfig {
11683        let mut query = self.selection.select("loadSDKConfigFromID");
11684        query = query.arg_lazy(
11685            "id",
11686            Box::new(move || {
11687                let id = id.clone();
11688                Box::pin(async move { id.into_id().await.unwrap().quote() })
11689            }),
11690        );
11691        SdkConfig {
11692            proc: self.proc.clone(),
11693            selection: query,
11694            graphql_client: self.graphql_client.clone(),
11695        }
11696    }
11697    /// Load a ScalarTypeDef from its ID.
11698    pub fn load_scalar_type_def_from_id(&self, id: impl IntoID<ScalarTypeDefId>) -> ScalarTypeDef {
11699        let mut query = self.selection.select("loadScalarTypeDefFromID");
11700        query = query.arg_lazy(
11701            "id",
11702            Box::new(move || {
11703                let id = id.clone();
11704                Box::pin(async move { id.into_id().await.unwrap().quote() })
11705            }),
11706        );
11707        ScalarTypeDef {
11708            proc: self.proc.clone(),
11709            selection: query,
11710            graphql_client: self.graphql_client.clone(),
11711        }
11712    }
11713    /// Load a SearchResult from its ID.
11714    pub fn load_search_result_from_id(&self, id: impl IntoID<SearchResultId>) -> SearchResult {
11715        let mut query = self.selection.select("loadSearchResultFromID");
11716        query = query.arg_lazy(
11717            "id",
11718            Box::new(move || {
11719                let id = id.clone();
11720                Box::pin(async move { id.into_id().await.unwrap().quote() })
11721            }),
11722        );
11723        SearchResult {
11724            proc: self.proc.clone(),
11725            selection: query,
11726            graphql_client: self.graphql_client.clone(),
11727        }
11728    }
11729    /// Load a SearchSubmatch from its ID.
11730    pub fn load_search_submatch_from_id(
11731        &self,
11732        id: impl IntoID<SearchSubmatchId>,
11733    ) -> SearchSubmatch {
11734        let mut query = self.selection.select("loadSearchSubmatchFromID");
11735        query = query.arg_lazy(
11736            "id",
11737            Box::new(move || {
11738                let id = id.clone();
11739                Box::pin(async move { id.into_id().await.unwrap().quote() })
11740            }),
11741        );
11742        SearchSubmatch {
11743            proc: self.proc.clone(),
11744            selection: query,
11745            graphql_client: self.graphql_client.clone(),
11746        }
11747    }
11748    /// Load a Secret from its ID.
11749    pub fn load_secret_from_id(&self, id: impl IntoID<SecretId>) -> Secret {
11750        let mut query = self.selection.select("loadSecretFromID");
11751        query = query.arg_lazy(
11752            "id",
11753            Box::new(move || {
11754                let id = id.clone();
11755                Box::pin(async move { id.into_id().await.unwrap().quote() })
11756            }),
11757        );
11758        Secret {
11759            proc: self.proc.clone(),
11760            selection: query,
11761            graphql_client: self.graphql_client.clone(),
11762        }
11763    }
11764    /// Load a Service from its ID.
11765    pub fn load_service_from_id(&self, id: impl IntoID<ServiceId>) -> Service {
11766        let mut query = self.selection.select("loadServiceFromID");
11767        query = query.arg_lazy(
11768            "id",
11769            Box::new(move || {
11770                let id = id.clone();
11771                Box::pin(async move { id.into_id().await.unwrap().quote() })
11772            }),
11773        );
11774        Service {
11775            proc: self.proc.clone(),
11776            selection: query,
11777            graphql_client: self.graphql_client.clone(),
11778        }
11779    }
11780    /// Load a Socket from its ID.
11781    pub fn load_socket_from_id(&self, id: impl IntoID<SocketId>) -> Socket {
11782        let mut query = self.selection.select("loadSocketFromID");
11783        query = query.arg_lazy(
11784            "id",
11785            Box::new(move || {
11786                let id = id.clone();
11787                Box::pin(async move { id.into_id().await.unwrap().quote() })
11788            }),
11789        );
11790        Socket {
11791            proc: self.proc.clone(),
11792            selection: query,
11793            graphql_client: self.graphql_client.clone(),
11794        }
11795    }
11796    /// Load a SourceMap from its ID.
11797    pub fn load_source_map_from_id(&self, id: impl IntoID<SourceMapId>) -> SourceMap {
11798        let mut query = self.selection.select("loadSourceMapFromID");
11799        query = query.arg_lazy(
11800            "id",
11801            Box::new(move || {
11802                let id = id.clone();
11803                Box::pin(async move { id.into_id().await.unwrap().quote() })
11804            }),
11805        );
11806        SourceMap {
11807            proc: self.proc.clone(),
11808            selection: query,
11809            graphql_client: self.graphql_client.clone(),
11810        }
11811    }
11812    /// Load a Terminal from its ID.
11813    pub fn load_terminal_from_id(&self, id: impl IntoID<TerminalId>) -> Terminal {
11814        let mut query = self.selection.select("loadTerminalFromID");
11815        query = query.arg_lazy(
11816            "id",
11817            Box::new(move || {
11818                let id = id.clone();
11819                Box::pin(async move { id.into_id().await.unwrap().quote() })
11820            }),
11821        );
11822        Terminal {
11823            proc: self.proc.clone(),
11824            selection: query,
11825            graphql_client: self.graphql_client.clone(),
11826        }
11827    }
11828    /// Load a TypeDef from its ID.
11829    pub fn load_type_def_from_id(&self, id: impl IntoID<TypeDefId>) -> TypeDef {
11830        let mut query = self.selection.select("loadTypeDefFromID");
11831        query = query.arg_lazy(
11832            "id",
11833            Box::new(move || {
11834                let id = id.clone();
11835                Box::pin(async move { id.into_id().await.unwrap().quote() })
11836            }),
11837        );
11838        TypeDef {
11839            proc: self.proc.clone(),
11840            selection: query,
11841            graphql_client: self.graphql_client.clone(),
11842        }
11843    }
11844    /// Create a new module.
11845    pub fn module(&self) -> Module {
11846        let query = self.selection.select("module");
11847        Module {
11848            proc: self.proc.clone(),
11849            selection: query,
11850            graphql_client: self.graphql_client.clone(),
11851        }
11852    }
11853    /// Create a new module source instance from a source ref string
11854    ///
11855    /// # Arguments
11856    ///
11857    /// * `ref_string` - The string ref representation of the module source
11858    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
11859    pub fn module_source(&self, ref_string: impl Into<String>) -> ModuleSource {
11860        let mut query = self.selection.select("moduleSource");
11861        query = query.arg("refString", ref_string.into());
11862        ModuleSource {
11863            proc: self.proc.clone(),
11864            selection: query,
11865            graphql_client: self.graphql_client.clone(),
11866        }
11867    }
11868    /// Create a new module source instance from a source ref string
11869    ///
11870    /// # Arguments
11871    ///
11872    /// * `ref_string` - The string ref representation of the module source
11873    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
11874    pub fn module_source_opts<'a>(
11875        &self,
11876        ref_string: impl Into<String>,
11877        opts: QueryModuleSourceOpts<'a>,
11878    ) -> ModuleSource {
11879        let mut query = self.selection.select("moduleSource");
11880        query = query.arg("refString", ref_string.into());
11881        if let Some(ref_pin) = opts.ref_pin {
11882            query = query.arg("refPin", ref_pin);
11883        }
11884        if let Some(disable_find_up) = opts.disable_find_up {
11885            query = query.arg("disableFindUp", disable_find_up);
11886        }
11887        if let Some(allow_not_exists) = opts.allow_not_exists {
11888            query = query.arg("allowNotExists", allow_not_exists);
11889        }
11890        if let Some(require_kind) = opts.require_kind {
11891            query = query.arg("requireKind", require_kind);
11892        }
11893        ModuleSource {
11894            proc: self.proc.clone(),
11895            selection: query,
11896            graphql_client: self.graphql_client.clone(),
11897        }
11898    }
11899    /// Creates a new secret.
11900    ///
11901    /// # Arguments
11902    ///
11903    /// * `uri` - The URI of the secret store
11904    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
11905    pub fn secret(&self, uri: impl Into<String>) -> Secret {
11906        let mut query = self.selection.select("secret");
11907        query = query.arg("uri", uri.into());
11908        Secret {
11909            proc: self.proc.clone(),
11910            selection: query,
11911            graphql_client: self.graphql_client.clone(),
11912        }
11913    }
11914    /// Creates a new secret.
11915    ///
11916    /// # Arguments
11917    ///
11918    /// * `uri` - The URI of the secret store
11919    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
11920    pub fn secret_opts<'a>(&self, uri: impl Into<String>, opts: QuerySecretOpts<'a>) -> Secret {
11921        let mut query = self.selection.select("secret");
11922        query = query.arg("uri", uri.into());
11923        if let Some(cache_key) = opts.cache_key {
11924            query = query.arg("cacheKey", cache_key);
11925        }
11926        Secret {
11927            proc: self.proc.clone(),
11928            selection: query,
11929            graphql_client: self.graphql_client.clone(),
11930        }
11931    }
11932    /// Sets a secret given a user defined name to its plaintext and returns the secret.
11933    /// The plaintext value is limited to a size of 128000 bytes.
11934    ///
11935    /// # Arguments
11936    ///
11937    /// * `name` - The user defined name for this secret
11938    /// * `plaintext` - The plaintext of the secret
11939    pub fn set_secret(&self, name: impl Into<String>, plaintext: impl Into<String>) -> Secret {
11940        let mut query = self.selection.select("setSecret");
11941        query = query.arg("name", name.into());
11942        query = query.arg("plaintext", plaintext.into());
11943        Secret {
11944            proc: self.proc.clone(),
11945            selection: query,
11946            graphql_client: self.graphql_client.clone(),
11947        }
11948    }
11949    /// Creates source map metadata.
11950    ///
11951    /// # Arguments
11952    ///
11953    /// * `filename` - The filename from the module source.
11954    /// * `line` - The line number within the filename.
11955    /// * `column` - The column number within the line.
11956    pub fn source_map(&self, filename: impl Into<String>, line: isize, column: isize) -> SourceMap {
11957        let mut query = self.selection.select("sourceMap");
11958        query = query.arg("filename", filename.into());
11959        query = query.arg("line", line);
11960        query = query.arg("column", column);
11961        SourceMap {
11962            proc: self.proc.clone(),
11963            selection: query,
11964            graphql_client: self.graphql_client.clone(),
11965        }
11966    }
11967    /// Create a new TypeDef.
11968    pub fn type_def(&self) -> TypeDef {
11969        let query = self.selection.select("typeDef");
11970        TypeDef {
11971            proc: self.proc.clone(),
11972            selection: query,
11973            graphql_client: self.graphql_client.clone(),
11974        }
11975    }
11976    /// Get the current Dagger Engine version.
11977    pub async fn version(&self) -> Result<String, DaggerError> {
11978        let query = self.selection.select("version");
11979        query.execute(self.graphql_client.clone()).await
11980    }
11981}
11982#[derive(Clone)]
11983pub struct SdkConfig {
11984    pub proc: Option<Arc<DaggerSessionProc>>,
11985    pub selection: Selection,
11986    pub graphql_client: DynGraphQLClient,
11987}
11988impl SdkConfig {
11989    /// Whether to start the SDK runtime in debug mode with an interactive terminal.
11990    pub async fn debug(&self) -> Result<bool, DaggerError> {
11991        let query = self.selection.select("debug");
11992        query.execute(self.graphql_client.clone()).await
11993    }
11994    /// A unique identifier for this SDKConfig.
11995    pub async fn id(&self) -> Result<SdkConfigId, DaggerError> {
11996        let query = self.selection.select("id");
11997        query.execute(self.graphql_client.clone()).await
11998    }
11999    /// Source of the SDK. Either a name of a builtin SDK or a module source ref string pointing to the SDK's implementation.
12000    pub async fn source(&self) -> Result<String, DaggerError> {
12001        let query = self.selection.select("source");
12002        query.execute(self.graphql_client.clone()).await
12003    }
12004}
12005#[derive(Clone)]
12006pub struct ScalarTypeDef {
12007    pub proc: Option<Arc<DaggerSessionProc>>,
12008    pub selection: Selection,
12009    pub graphql_client: DynGraphQLClient,
12010}
12011impl ScalarTypeDef {
12012    /// A doc string for the scalar, if any.
12013    pub async fn description(&self) -> Result<String, DaggerError> {
12014        let query = self.selection.select("description");
12015        query.execute(self.graphql_client.clone()).await
12016    }
12017    /// A unique identifier for this ScalarTypeDef.
12018    pub async fn id(&self) -> Result<ScalarTypeDefId, DaggerError> {
12019        let query = self.selection.select("id");
12020        query.execute(self.graphql_client.clone()).await
12021    }
12022    /// The name of the scalar.
12023    pub async fn name(&self) -> Result<String, DaggerError> {
12024        let query = self.selection.select("name");
12025        query.execute(self.graphql_client.clone()).await
12026    }
12027    /// If this ScalarTypeDef is associated with a Module, the name of the module. Unset otherwise.
12028    pub async fn source_module_name(&self) -> Result<String, DaggerError> {
12029        let query = self.selection.select("sourceModuleName");
12030        query.execute(self.graphql_client.clone()).await
12031    }
12032}
12033#[derive(Clone)]
12034pub struct SearchResult {
12035    pub proc: Option<Arc<DaggerSessionProc>>,
12036    pub selection: Selection,
12037    pub graphql_client: DynGraphQLClient,
12038}
12039impl SearchResult {
12040    /// The byte offset of this line within the file.
12041    pub async fn absolute_offset(&self) -> Result<isize, DaggerError> {
12042        let query = self.selection.select("absoluteOffset");
12043        query.execute(self.graphql_client.clone()).await
12044    }
12045    /// The path to the file that matched.
12046    pub async fn file_path(&self) -> Result<String, DaggerError> {
12047        let query = self.selection.select("filePath");
12048        query.execute(self.graphql_client.clone()).await
12049    }
12050    /// A unique identifier for this SearchResult.
12051    pub async fn id(&self) -> Result<SearchResultId, DaggerError> {
12052        let query = self.selection.select("id");
12053        query.execute(self.graphql_client.clone()).await
12054    }
12055    /// The first line that matched.
12056    pub async fn line_number(&self) -> Result<isize, DaggerError> {
12057        let query = self.selection.select("lineNumber");
12058        query.execute(self.graphql_client.clone()).await
12059    }
12060    /// The line content that matched.
12061    pub async fn matched_lines(&self) -> Result<String, DaggerError> {
12062        let query = self.selection.select("matchedLines");
12063        query.execute(self.graphql_client.clone()).await
12064    }
12065    /// Sub-match positions and content within the matched lines.
12066    pub fn submatches(&self) -> Vec<SearchSubmatch> {
12067        let query = self.selection.select("submatches");
12068        vec![SearchSubmatch {
12069            proc: self.proc.clone(),
12070            selection: query,
12071            graphql_client: self.graphql_client.clone(),
12072        }]
12073    }
12074}
12075#[derive(Clone)]
12076pub struct SearchSubmatch {
12077    pub proc: Option<Arc<DaggerSessionProc>>,
12078    pub selection: Selection,
12079    pub graphql_client: DynGraphQLClient,
12080}
12081impl SearchSubmatch {
12082    /// The match's end offset within the matched lines.
12083    pub async fn end(&self) -> Result<isize, DaggerError> {
12084        let query = self.selection.select("end");
12085        query.execute(self.graphql_client.clone()).await
12086    }
12087    /// A unique identifier for this SearchSubmatch.
12088    pub async fn id(&self) -> Result<SearchSubmatchId, DaggerError> {
12089        let query = self.selection.select("id");
12090        query.execute(self.graphql_client.clone()).await
12091    }
12092    /// The match's start offset within the matched lines.
12093    pub async fn start(&self) -> Result<isize, DaggerError> {
12094        let query = self.selection.select("start");
12095        query.execute(self.graphql_client.clone()).await
12096    }
12097    /// The matched text.
12098    pub async fn text(&self) -> Result<String, DaggerError> {
12099        let query = self.selection.select("text");
12100        query.execute(self.graphql_client.clone()).await
12101    }
12102}
12103#[derive(Clone)]
12104pub struct Secret {
12105    pub proc: Option<Arc<DaggerSessionProc>>,
12106    pub selection: Selection,
12107    pub graphql_client: DynGraphQLClient,
12108}
12109impl Secret {
12110    /// A unique identifier for this Secret.
12111    pub async fn id(&self) -> Result<SecretId, DaggerError> {
12112        let query = self.selection.select("id");
12113        query.execute(self.graphql_client.clone()).await
12114    }
12115    /// The name of this secret.
12116    pub async fn name(&self) -> Result<String, DaggerError> {
12117        let query = self.selection.select("name");
12118        query.execute(self.graphql_client.clone()).await
12119    }
12120    /// The value of this secret.
12121    pub async fn plaintext(&self) -> Result<String, DaggerError> {
12122        let query = self.selection.select("plaintext");
12123        query.execute(self.graphql_client.clone()).await
12124    }
12125    /// The URI of this secret.
12126    pub async fn uri(&self) -> Result<String, DaggerError> {
12127        let query = self.selection.select("uri");
12128        query.execute(self.graphql_client.clone()).await
12129    }
12130}
12131#[derive(Clone)]
12132pub struct Service {
12133    pub proc: Option<Arc<DaggerSessionProc>>,
12134    pub selection: Selection,
12135    pub graphql_client: DynGraphQLClient,
12136}
12137#[derive(Builder, Debug, PartialEq)]
12138pub struct ServiceEndpointOpts<'a> {
12139    /// The exposed port number for the endpoint
12140    #[builder(setter(into, strip_option), default)]
12141    pub port: Option<isize>,
12142    /// Return a URL with the given scheme, eg. http for http://
12143    #[builder(setter(into, strip_option), default)]
12144    pub scheme: Option<&'a str>,
12145}
12146#[derive(Builder, Debug, PartialEq)]
12147pub struct ServiceStopOpts {
12148    /// Immediately kill the service without waiting for a graceful exit
12149    #[builder(setter(into, strip_option), default)]
12150    pub kill: Option<bool>,
12151}
12152#[derive(Builder, Debug, PartialEq)]
12153pub struct ServiceTerminalOpts<'a> {
12154    #[builder(setter(into, strip_option), default)]
12155    pub cmd: Option<Vec<&'a str>>,
12156}
12157#[derive(Builder, Debug, PartialEq)]
12158pub struct ServiceUpOpts {
12159    /// List of frontend/backend port mappings to forward.
12160    /// Frontend is the port accepting traffic on the host, backend is the service port.
12161    #[builder(setter(into, strip_option), default)]
12162    pub ports: Option<Vec<PortForward>>,
12163    /// Bind each tunnel port to a random port on the host.
12164    #[builder(setter(into, strip_option), default)]
12165    pub random: Option<bool>,
12166}
12167impl Service {
12168    /// Retrieves an endpoint that clients can use to reach this container.
12169    /// If no port is specified, the first exposed port is used. If none exist an error is returned.
12170    /// If a scheme is specified, a URL is returned. Otherwise, a host:port pair is returned.
12171    ///
12172    /// # Arguments
12173    ///
12174    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12175    pub async fn endpoint(&self) -> Result<String, DaggerError> {
12176        let query = self.selection.select("endpoint");
12177        query.execute(self.graphql_client.clone()).await
12178    }
12179    /// Retrieves an endpoint that clients can use to reach this container.
12180    /// If no port is specified, the first exposed port is used. If none exist an error is returned.
12181    /// If a scheme is specified, a URL is returned. Otherwise, a host:port pair is returned.
12182    ///
12183    /// # Arguments
12184    ///
12185    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12186    pub async fn endpoint_opts<'a>(
12187        &self,
12188        opts: ServiceEndpointOpts<'a>,
12189    ) -> Result<String, DaggerError> {
12190        let mut query = self.selection.select("endpoint");
12191        if let Some(port) = opts.port {
12192            query = query.arg("port", port);
12193        }
12194        if let Some(scheme) = opts.scheme {
12195            query = query.arg("scheme", scheme);
12196        }
12197        query.execute(self.graphql_client.clone()).await
12198    }
12199    /// Retrieves a hostname which can be used by clients to reach this container.
12200    pub async fn hostname(&self) -> Result<String, DaggerError> {
12201        let query = self.selection.select("hostname");
12202        query.execute(self.graphql_client.clone()).await
12203    }
12204    /// A unique identifier for this Service.
12205    pub async fn id(&self) -> Result<ServiceId, DaggerError> {
12206        let query = self.selection.select("id");
12207        query.execute(self.graphql_client.clone()).await
12208    }
12209    /// Retrieves the list of ports provided by the service.
12210    pub fn ports(&self) -> Vec<Port> {
12211        let query = self.selection.select("ports");
12212        vec![Port {
12213            proc: self.proc.clone(),
12214            selection: query,
12215            graphql_client: self.graphql_client.clone(),
12216        }]
12217    }
12218    /// Start the service and wait for its health checks to succeed.
12219    /// Services bound to a Container do not need to be manually started.
12220    pub async fn start(&self) -> Result<ServiceId, DaggerError> {
12221        let query = self.selection.select("start");
12222        query.execute(self.graphql_client.clone()).await
12223    }
12224    /// Stop the service.
12225    ///
12226    /// # Arguments
12227    ///
12228    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12229    pub async fn stop(&self) -> Result<ServiceId, DaggerError> {
12230        let query = self.selection.select("stop");
12231        query.execute(self.graphql_client.clone()).await
12232    }
12233    /// Stop the service.
12234    ///
12235    /// # Arguments
12236    ///
12237    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12238    pub async fn stop_opts(&self, opts: ServiceStopOpts) -> Result<ServiceId, DaggerError> {
12239        let mut query = self.selection.select("stop");
12240        if let Some(kill) = opts.kill {
12241            query = query.arg("kill", kill);
12242        }
12243        query.execute(self.graphql_client.clone()).await
12244    }
12245    /// Forces evaluation of the pipeline in the engine.
12246    pub async fn sync(&self) -> Result<ServiceId, DaggerError> {
12247        let query = self.selection.select("sync");
12248        query.execute(self.graphql_client.clone()).await
12249    }
12250    ///
12251    /// # Arguments
12252    ///
12253    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12254    pub fn terminal(&self) -> Service {
12255        let query = self.selection.select("terminal");
12256        Service {
12257            proc: self.proc.clone(),
12258            selection: query,
12259            graphql_client: self.graphql_client.clone(),
12260        }
12261    }
12262    ///
12263    /// # Arguments
12264    ///
12265    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12266    pub fn terminal_opts<'a>(&self, opts: ServiceTerminalOpts<'a>) -> Service {
12267        let mut query = self.selection.select("terminal");
12268        if let Some(cmd) = opts.cmd {
12269            query = query.arg("cmd", cmd);
12270        }
12271        Service {
12272            proc: self.proc.clone(),
12273            selection: query,
12274            graphql_client: self.graphql_client.clone(),
12275        }
12276    }
12277    /// Creates a tunnel that forwards traffic from the caller's network to this service.
12278    ///
12279    /// # Arguments
12280    ///
12281    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12282    pub async fn up(&self) -> Result<Void, DaggerError> {
12283        let query = self.selection.select("up");
12284        query.execute(self.graphql_client.clone()).await
12285    }
12286    /// Creates a tunnel that forwards traffic from the caller's network to this service.
12287    ///
12288    /// # Arguments
12289    ///
12290    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12291    pub async fn up_opts(&self, opts: ServiceUpOpts) -> Result<Void, DaggerError> {
12292        let mut query = self.selection.select("up");
12293        if let Some(ports) = opts.ports {
12294            query = query.arg("ports", ports);
12295        }
12296        if let Some(random) = opts.random {
12297            query = query.arg("random", random);
12298        }
12299        query.execute(self.graphql_client.clone()).await
12300    }
12301    /// Configures a hostname which can be used by clients within the session to reach this container.
12302    ///
12303    /// # Arguments
12304    ///
12305    /// * `hostname` - The hostname to use.
12306    pub fn with_hostname(&self, hostname: impl Into<String>) -> Service {
12307        let mut query = self.selection.select("withHostname");
12308        query = query.arg("hostname", hostname.into());
12309        Service {
12310            proc: self.proc.clone(),
12311            selection: query,
12312            graphql_client: self.graphql_client.clone(),
12313        }
12314    }
12315}
12316#[derive(Clone)]
12317pub struct Socket {
12318    pub proc: Option<Arc<DaggerSessionProc>>,
12319    pub selection: Selection,
12320    pub graphql_client: DynGraphQLClient,
12321}
12322impl Socket {
12323    /// A unique identifier for this Socket.
12324    pub async fn id(&self) -> Result<SocketId, DaggerError> {
12325        let query = self.selection.select("id");
12326        query.execute(self.graphql_client.clone()).await
12327    }
12328}
12329#[derive(Clone)]
12330pub struct SourceMap {
12331    pub proc: Option<Arc<DaggerSessionProc>>,
12332    pub selection: Selection,
12333    pub graphql_client: DynGraphQLClient,
12334}
12335impl SourceMap {
12336    /// The column number within the line.
12337    pub async fn column(&self) -> Result<isize, DaggerError> {
12338        let query = self.selection.select("column");
12339        query.execute(self.graphql_client.clone()).await
12340    }
12341    /// The filename from the module source.
12342    pub async fn filename(&self) -> Result<String, DaggerError> {
12343        let query = self.selection.select("filename");
12344        query.execute(self.graphql_client.clone()).await
12345    }
12346    /// A unique identifier for this SourceMap.
12347    pub async fn id(&self) -> Result<SourceMapId, DaggerError> {
12348        let query = self.selection.select("id");
12349        query.execute(self.graphql_client.clone()).await
12350    }
12351    /// The line number within the filename.
12352    pub async fn line(&self) -> Result<isize, DaggerError> {
12353        let query = self.selection.select("line");
12354        query.execute(self.graphql_client.clone()).await
12355    }
12356    /// The module dependency this was declared in.
12357    pub async fn module(&self) -> Result<String, DaggerError> {
12358        let query = self.selection.select("module");
12359        query.execute(self.graphql_client.clone()).await
12360    }
12361    /// The URL to the file, if any. This can be used to link to the source map in the browser.
12362    pub async fn url(&self) -> Result<String, DaggerError> {
12363        let query = self.selection.select("url");
12364        query.execute(self.graphql_client.clone()).await
12365    }
12366}
12367#[derive(Clone)]
12368pub struct Terminal {
12369    pub proc: Option<Arc<DaggerSessionProc>>,
12370    pub selection: Selection,
12371    pub graphql_client: DynGraphQLClient,
12372}
12373impl Terminal {
12374    /// A unique identifier for this Terminal.
12375    pub async fn id(&self) -> Result<TerminalId, DaggerError> {
12376        let query = self.selection.select("id");
12377        query.execute(self.graphql_client.clone()).await
12378    }
12379    /// Forces evaluation of the pipeline in the engine.
12380    /// It doesn't run the default command if no exec has been set.
12381    pub async fn sync(&self) -> Result<TerminalId, DaggerError> {
12382        let query = self.selection.select("sync");
12383        query.execute(self.graphql_client.clone()).await
12384    }
12385}
12386#[derive(Clone)]
12387pub struct TypeDef {
12388    pub proc: Option<Arc<DaggerSessionProc>>,
12389    pub selection: Selection,
12390    pub graphql_client: DynGraphQLClient,
12391}
12392#[derive(Builder, Debug, PartialEq)]
12393pub struct TypeDefWithEnumOpts<'a> {
12394    /// A doc string for the enum, if any
12395    #[builder(setter(into, strip_option), default)]
12396    pub description: Option<&'a str>,
12397    /// The source map for the enum definition.
12398    #[builder(setter(into, strip_option), default)]
12399    pub source_map: Option<SourceMapId>,
12400}
12401#[derive(Builder, Debug, PartialEq)]
12402pub struct TypeDefWithEnumMemberOpts<'a> {
12403    /// If deprecated, the reason or migration path.
12404    #[builder(setter(into, strip_option), default)]
12405    pub deprecated: Option<&'a str>,
12406    /// A doc string for the member, if any
12407    #[builder(setter(into, strip_option), default)]
12408    pub description: Option<&'a str>,
12409    /// The source map for the enum member definition.
12410    #[builder(setter(into, strip_option), default)]
12411    pub source_map: Option<SourceMapId>,
12412    /// The value of the member in the enum
12413    #[builder(setter(into, strip_option), default)]
12414    pub value: Option<&'a str>,
12415}
12416#[derive(Builder, Debug, PartialEq)]
12417pub struct TypeDefWithEnumValueOpts<'a> {
12418    /// If deprecated, the reason or migration path.
12419    #[builder(setter(into, strip_option), default)]
12420    pub deprecated: Option<&'a str>,
12421    /// A doc string for the value, if any
12422    #[builder(setter(into, strip_option), default)]
12423    pub description: Option<&'a str>,
12424    /// The source map for the enum value definition.
12425    #[builder(setter(into, strip_option), default)]
12426    pub source_map: Option<SourceMapId>,
12427}
12428#[derive(Builder, Debug, PartialEq)]
12429pub struct TypeDefWithFieldOpts<'a> {
12430    /// If deprecated, the reason or migration path.
12431    #[builder(setter(into, strip_option), default)]
12432    pub deprecated: Option<&'a str>,
12433    /// A doc string for the field, if any
12434    #[builder(setter(into, strip_option), default)]
12435    pub description: Option<&'a str>,
12436    /// The source map for the field definition.
12437    #[builder(setter(into, strip_option), default)]
12438    pub source_map: Option<SourceMapId>,
12439}
12440#[derive(Builder, Debug, PartialEq)]
12441pub struct TypeDefWithInterfaceOpts<'a> {
12442    #[builder(setter(into, strip_option), default)]
12443    pub description: Option<&'a str>,
12444    #[builder(setter(into, strip_option), default)]
12445    pub source_map: Option<SourceMapId>,
12446}
12447#[derive(Builder, Debug, PartialEq)]
12448pub struct TypeDefWithObjectOpts<'a> {
12449    #[builder(setter(into, strip_option), default)]
12450    pub deprecated: Option<&'a str>,
12451    #[builder(setter(into, strip_option), default)]
12452    pub description: Option<&'a str>,
12453    #[builder(setter(into, strip_option), default)]
12454    pub source_map: Option<SourceMapId>,
12455}
12456#[derive(Builder, Debug, PartialEq)]
12457pub struct TypeDefWithScalarOpts<'a> {
12458    #[builder(setter(into, strip_option), default)]
12459    pub description: Option<&'a str>,
12460}
12461impl TypeDef {
12462    /// If kind is ENUM, the enum-specific type definition. If kind is not ENUM, this will be null.
12463    pub fn as_enum(&self) -> EnumTypeDef {
12464        let query = self.selection.select("asEnum");
12465        EnumTypeDef {
12466            proc: self.proc.clone(),
12467            selection: query,
12468            graphql_client: self.graphql_client.clone(),
12469        }
12470    }
12471    /// If kind is INPUT, the input-specific type definition. If kind is not INPUT, this will be null.
12472    pub fn as_input(&self) -> InputTypeDef {
12473        let query = self.selection.select("asInput");
12474        InputTypeDef {
12475            proc: self.proc.clone(),
12476            selection: query,
12477            graphql_client: self.graphql_client.clone(),
12478        }
12479    }
12480    /// If kind is INTERFACE, the interface-specific type definition. If kind is not INTERFACE, this will be null.
12481    pub fn as_interface(&self) -> InterfaceTypeDef {
12482        let query = self.selection.select("asInterface");
12483        InterfaceTypeDef {
12484            proc: self.proc.clone(),
12485            selection: query,
12486            graphql_client: self.graphql_client.clone(),
12487        }
12488    }
12489    /// If kind is LIST, the list-specific type definition. If kind is not LIST, this will be null.
12490    pub fn as_list(&self) -> ListTypeDef {
12491        let query = self.selection.select("asList");
12492        ListTypeDef {
12493            proc: self.proc.clone(),
12494            selection: query,
12495            graphql_client: self.graphql_client.clone(),
12496        }
12497    }
12498    /// If kind is OBJECT, the object-specific type definition. If kind is not OBJECT, this will be null.
12499    pub fn as_object(&self) -> ObjectTypeDef {
12500        let query = self.selection.select("asObject");
12501        ObjectTypeDef {
12502            proc: self.proc.clone(),
12503            selection: query,
12504            graphql_client: self.graphql_client.clone(),
12505        }
12506    }
12507    /// If kind is SCALAR, the scalar-specific type definition. If kind is not SCALAR, this will be null.
12508    pub fn as_scalar(&self) -> ScalarTypeDef {
12509        let query = self.selection.select("asScalar");
12510        ScalarTypeDef {
12511            proc: self.proc.clone(),
12512            selection: query,
12513            graphql_client: self.graphql_client.clone(),
12514        }
12515    }
12516    /// A unique identifier for this TypeDef.
12517    pub async fn id(&self) -> Result<TypeDefId, DaggerError> {
12518        let query = self.selection.select("id");
12519        query.execute(self.graphql_client.clone()).await
12520    }
12521    /// The kind of type this is (e.g. primitive, list, object).
12522    pub async fn kind(&self) -> Result<TypeDefKind, DaggerError> {
12523        let query = self.selection.select("kind");
12524        query.execute(self.graphql_client.clone()).await
12525    }
12526    /// Whether this type can be set to null. Defaults to false.
12527    pub async fn optional(&self) -> Result<bool, DaggerError> {
12528        let query = self.selection.select("optional");
12529        query.execute(self.graphql_client.clone()).await
12530    }
12531    /// Adds a function for constructing a new instance of an Object TypeDef, failing if the type is not an object.
12532    pub fn with_constructor(&self, function: impl IntoID<FunctionId>) -> TypeDef {
12533        let mut query = self.selection.select("withConstructor");
12534        query = query.arg_lazy(
12535            "function",
12536            Box::new(move || {
12537                let function = function.clone();
12538                Box::pin(async move { function.into_id().await.unwrap().quote() })
12539            }),
12540        );
12541        TypeDef {
12542            proc: self.proc.clone(),
12543            selection: query,
12544            graphql_client: self.graphql_client.clone(),
12545        }
12546    }
12547    /// Returns a TypeDef of kind Enum with the provided name.
12548    /// Note that an enum's values may be omitted if the intent is only to refer to an enum. This is how functions are able to return their own, or any other circular reference.
12549    ///
12550    /// # Arguments
12551    ///
12552    /// * `name` - The name of the enum
12553    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12554    pub fn with_enum(&self, name: impl Into<String>) -> TypeDef {
12555        let mut query = self.selection.select("withEnum");
12556        query = query.arg("name", name.into());
12557        TypeDef {
12558            proc: self.proc.clone(),
12559            selection: query,
12560            graphql_client: self.graphql_client.clone(),
12561        }
12562    }
12563    /// Returns a TypeDef of kind Enum with the provided name.
12564    /// Note that an enum's values may be omitted if the intent is only to refer to an enum. This is how functions are able to return their own, or any other circular reference.
12565    ///
12566    /// # Arguments
12567    ///
12568    /// * `name` - The name of the enum
12569    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12570    pub fn with_enum_opts<'a>(
12571        &self,
12572        name: impl Into<String>,
12573        opts: TypeDefWithEnumOpts<'a>,
12574    ) -> TypeDef {
12575        let mut query = self.selection.select("withEnum");
12576        query = query.arg("name", name.into());
12577        if let Some(description) = opts.description {
12578            query = query.arg("description", description);
12579        }
12580        if let Some(source_map) = opts.source_map {
12581            query = query.arg("sourceMap", source_map);
12582        }
12583        TypeDef {
12584            proc: self.proc.clone(),
12585            selection: query,
12586            graphql_client: self.graphql_client.clone(),
12587        }
12588    }
12589    /// Adds a static value for an Enum TypeDef, failing if the type is not an enum.
12590    ///
12591    /// # Arguments
12592    ///
12593    /// * `name` - The name of the member in the enum
12594    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12595    pub fn with_enum_member(&self, name: impl Into<String>) -> TypeDef {
12596        let mut query = self.selection.select("withEnumMember");
12597        query = query.arg("name", name.into());
12598        TypeDef {
12599            proc: self.proc.clone(),
12600            selection: query,
12601            graphql_client: self.graphql_client.clone(),
12602        }
12603    }
12604    /// Adds a static value for an Enum TypeDef, failing if the type is not an enum.
12605    ///
12606    /// # Arguments
12607    ///
12608    /// * `name` - The name of the member in the enum
12609    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12610    pub fn with_enum_member_opts<'a>(
12611        &self,
12612        name: impl Into<String>,
12613        opts: TypeDefWithEnumMemberOpts<'a>,
12614    ) -> TypeDef {
12615        let mut query = self.selection.select("withEnumMember");
12616        query = query.arg("name", name.into());
12617        if let Some(value) = opts.value {
12618            query = query.arg("value", value);
12619        }
12620        if let Some(description) = opts.description {
12621            query = query.arg("description", description);
12622        }
12623        if let Some(source_map) = opts.source_map {
12624            query = query.arg("sourceMap", source_map);
12625        }
12626        if let Some(deprecated) = opts.deprecated {
12627            query = query.arg("deprecated", deprecated);
12628        }
12629        TypeDef {
12630            proc: self.proc.clone(),
12631            selection: query,
12632            graphql_client: self.graphql_client.clone(),
12633        }
12634    }
12635    /// Adds a static value for an Enum TypeDef, failing if the type is not an enum.
12636    ///
12637    /// # Arguments
12638    ///
12639    /// * `value` - The name of the value in the enum
12640    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12641    pub fn with_enum_value(&self, value: impl Into<String>) -> TypeDef {
12642        let mut query = self.selection.select("withEnumValue");
12643        query = query.arg("value", value.into());
12644        TypeDef {
12645            proc: self.proc.clone(),
12646            selection: query,
12647            graphql_client: self.graphql_client.clone(),
12648        }
12649    }
12650    /// Adds a static value for an Enum TypeDef, failing if the type is not an enum.
12651    ///
12652    /// # Arguments
12653    ///
12654    /// * `value` - The name of the value in the enum
12655    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12656    pub fn with_enum_value_opts<'a>(
12657        &self,
12658        value: impl Into<String>,
12659        opts: TypeDefWithEnumValueOpts<'a>,
12660    ) -> TypeDef {
12661        let mut query = self.selection.select("withEnumValue");
12662        query = query.arg("value", value.into());
12663        if let Some(description) = opts.description {
12664            query = query.arg("description", description);
12665        }
12666        if let Some(source_map) = opts.source_map {
12667            query = query.arg("sourceMap", source_map);
12668        }
12669        if let Some(deprecated) = opts.deprecated {
12670            query = query.arg("deprecated", deprecated);
12671        }
12672        TypeDef {
12673            proc: self.proc.clone(),
12674            selection: query,
12675            graphql_client: self.graphql_client.clone(),
12676        }
12677    }
12678    /// Adds a static field for an Object TypeDef, failing if the type is not an object.
12679    ///
12680    /// # Arguments
12681    ///
12682    /// * `name` - The name of the field in the object
12683    /// * `type_def` - The type of the field
12684    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12685    pub fn with_field(&self, name: impl Into<String>, type_def: impl IntoID<TypeDefId>) -> TypeDef {
12686        let mut query = self.selection.select("withField");
12687        query = query.arg("name", name.into());
12688        query = query.arg_lazy(
12689            "typeDef",
12690            Box::new(move || {
12691                let type_def = type_def.clone();
12692                Box::pin(async move { type_def.into_id().await.unwrap().quote() })
12693            }),
12694        );
12695        TypeDef {
12696            proc: self.proc.clone(),
12697            selection: query,
12698            graphql_client: self.graphql_client.clone(),
12699        }
12700    }
12701    /// Adds a static field for an Object TypeDef, failing if the type is not an object.
12702    ///
12703    /// # Arguments
12704    ///
12705    /// * `name` - The name of the field in the object
12706    /// * `type_def` - The type of the field
12707    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12708    pub fn with_field_opts<'a>(
12709        &self,
12710        name: impl Into<String>,
12711        type_def: impl IntoID<TypeDefId>,
12712        opts: TypeDefWithFieldOpts<'a>,
12713    ) -> TypeDef {
12714        let mut query = self.selection.select("withField");
12715        query = query.arg("name", name.into());
12716        query = query.arg_lazy(
12717            "typeDef",
12718            Box::new(move || {
12719                let type_def = type_def.clone();
12720                Box::pin(async move { type_def.into_id().await.unwrap().quote() })
12721            }),
12722        );
12723        if let Some(description) = opts.description {
12724            query = query.arg("description", description);
12725        }
12726        if let Some(source_map) = opts.source_map {
12727            query = query.arg("sourceMap", source_map);
12728        }
12729        if let Some(deprecated) = opts.deprecated {
12730            query = query.arg("deprecated", deprecated);
12731        }
12732        TypeDef {
12733            proc: self.proc.clone(),
12734            selection: query,
12735            graphql_client: self.graphql_client.clone(),
12736        }
12737    }
12738    /// Adds a function for an Object or Interface TypeDef, failing if the type is not one of those kinds.
12739    pub fn with_function(&self, function: impl IntoID<FunctionId>) -> TypeDef {
12740        let mut query = self.selection.select("withFunction");
12741        query = query.arg_lazy(
12742            "function",
12743            Box::new(move || {
12744                let function = function.clone();
12745                Box::pin(async move { function.into_id().await.unwrap().quote() })
12746            }),
12747        );
12748        TypeDef {
12749            proc: self.proc.clone(),
12750            selection: query,
12751            graphql_client: self.graphql_client.clone(),
12752        }
12753    }
12754    /// Returns a TypeDef of kind Interface with the provided name.
12755    ///
12756    /// # Arguments
12757    ///
12758    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12759    pub fn with_interface(&self, name: impl Into<String>) -> TypeDef {
12760        let mut query = self.selection.select("withInterface");
12761        query = query.arg("name", name.into());
12762        TypeDef {
12763            proc: self.proc.clone(),
12764            selection: query,
12765            graphql_client: self.graphql_client.clone(),
12766        }
12767    }
12768    /// Returns a TypeDef of kind Interface with the provided name.
12769    ///
12770    /// # Arguments
12771    ///
12772    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12773    pub fn with_interface_opts<'a>(
12774        &self,
12775        name: impl Into<String>,
12776        opts: TypeDefWithInterfaceOpts<'a>,
12777    ) -> TypeDef {
12778        let mut query = self.selection.select("withInterface");
12779        query = query.arg("name", name.into());
12780        if let Some(description) = opts.description {
12781            query = query.arg("description", description);
12782        }
12783        if let Some(source_map) = opts.source_map {
12784            query = query.arg("sourceMap", source_map);
12785        }
12786        TypeDef {
12787            proc: self.proc.clone(),
12788            selection: query,
12789            graphql_client: self.graphql_client.clone(),
12790        }
12791    }
12792    /// Sets the kind of the type.
12793    pub fn with_kind(&self, kind: TypeDefKind) -> TypeDef {
12794        let mut query = self.selection.select("withKind");
12795        query = query.arg("kind", kind);
12796        TypeDef {
12797            proc: self.proc.clone(),
12798            selection: query,
12799            graphql_client: self.graphql_client.clone(),
12800        }
12801    }
12802    /// Returns a TypeDef of kind List with the provided type for its elements.
12803    pub fn with_list_of(&self, element_type: impl IntoID<TypeDefId>) -> TypeDef {
12804        let mut query = self.selection.select("withListOf");
12805        query = query.arg_lazy(
12806            "elementType",
12807            Box::new(move || {
12808                let element_type = element_type.clone();
12809                Box::pin(async move { element_type.into_id().await.unwrap().quote() })
12810            }),
12811        );
12812        TypeDef {
12813            proc: self.proc.clone(),
12814            selection: query,
12815            graphql_client: self.graphql_client.clone(),
12816        }
12817    }
12818    /// Returns a TypeDef of kind Object with the provided name.
12819    /// Note that an object's fields and functions may be omitted if the intent is only to refer to an object. This is how functions are able to return their own object, or any other circular reference.
12820    ///
12821    /// # Arguments
12822    ///
12823    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12824    pub fn with_object(&self, name: impl Into<String>) -> TypeDef {
12825        let mut query = self.selection.select("withObject");
12826        query = query.arg("name", name.into());
12827        TypeDef {
12828            proc: self.proc.clone(),
12829            selection: query,
12830            graphql_client: self.graphql_client.clone(),
12831        }
12832    }
12833    /// Returns a TypeDef of kind Object with the provided name.
12834    /// Note that an object's fields and functions may be omitted if the intent is only to refer to an object. This is how functions are able to return their own object, or any other circular reference.
12835    ///
12836    /// # Arguments
12837    ///
12838    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12839    pub fn with_object_opts<'a>(
12840        &self,
12841        name: impl Into<String>,
12842        opts: TypeDefWithObjectOpts<'a>,
12843    ) -> TypeDef {
12844        let mut query = self.selection.select("withObject");
12845        query = query.arg("name", name.into());
12846        if let Some(description) = opts.description {
12847            query = query.arg("description", description);
12848        }
12849        if let Some(source_map) = opts.source_map {
12850            query = query.arg("sourceMap", source_map);
12851        }
12852        if let Some(deprecated) = opts.deprecated {
12853            query = query.arg("deprecated", deprecated);
12854        }
12855        TypeDef {
12856            proc: self.proc.clone(),
12857            selection: query,
12858            graphql_client: self.graphql_client.clone(),
12859        }
12860    }
12861    /// Sets whether this type can be set to null.
12862    pub fn with_optional(&self, optional: bool) -> TypeDef {
12863        let mut query = self.selection.select("withOptional");
12864        query = query.arg("optional", optional);
12865        TypeDef {
12866            proc: self.proc.clone(),
12867            selection: query,
12868            graphql_client: self.graphql_client.clone(),
12869        }
12870    }
12871    /// Returns a TypeDef of kind Scalar with the provided name.
12872    ///
12873    /// # Arguments
12874    ///
12875    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12876    pub fn with_scalar(&self, name: impl Into<String>) -> TypeDef {
12877        let mut query = self.selection.select("withScalar");
12878        query = query.arg("name", name.into());
12879        TypeDef {
12880            proc: self.proc.clone(),
12881            selection: query,
12882            graphql_client: self.graphql_client.clone(),
12883        }
12884    }
12885    /// Returns a TypeDef of kind Scalar with the provided name.
12886    ///
12887    /// # Arguments
12888    ///
12889    /// * `opt` - optional argument, see inner type for documentation, use <func>_opts to use
12890    pub fn with_scalar_opts<'a>(
12891        &self,
12892        name: impl Into<String>,
12893        opts: TypeDefWithScalarOpts<'a>,
12894    ) -> TypeDef {
12895        let mut query = self.selection.select("withScalar");
12896        query = query.arg("name", name.into());
12897        if let Some(description) = opts.description {
12898            query = query.arg("description", description);
12899        }
12900        TypeDef {
12901            proc: self.proc.clone(),
12902            selection: query,
12903            graphql_client: self.graphql_client.clone(),
12904        }
12905    }
12906}
12907#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12908pub enum CacheSharingMode {
12909    #[serde(rename = "LOCKED")]
12910    Locked,
12911    #[serde(rename = "PRIVATE")]
12912    Private,
12913    #[serde(rename = "SHARED")]
12914    Shared,
12915}
12916#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12917pub enum ExistsType {
12918    #[serde(rename = "DIRECTORY_TYPE")]
12919    DirectoryType,
12920    #[serde(rename = "REGULAR_TYPE")]
12921    RegularType,
12922    #[serde(rename = "SYMLINK_TYPE")]
12923    SymlinkType,
12924}
12925#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12926pub enum FunctionCachePolicy {
12927    #[serde(rename = "Default")]
12928    Default,
12929    #[serde(rename = "Never")]
12930    Never,
12931    #[serde(rename = "PerSession")]
12932    PerSession,
12933}
12934#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12935pub enum ImageLayerCompression {
12936    #[serde(rename = "EStarGZ")]
12937    EStarGz,
12938    #[serde(rename = "ESTARGZ")]
12939    Estargz,
12940    #[serde(rename = "Gzip")]
12941    Gzip,
12942    #[serde(rename = "Uncompressed")]
12943    Uncompressed,
12944    #[serde(rename = "Zstd")]
12945    Zstd,
12946}
12947#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12948pub enum ImageMediaTypes {
12949    #[serde(rename = "DOCKER")]
12950    Docker,
12951    #[serde(rename = "DockerMediaTypes")]
12952    DockerMediaTypes,
12953    #[serde(rename = "OCI")]
12954    Oci,
12955    #[serde(rename = "OCIMediaTypes")]
12956    OciMediaTypes,
12957}
12958#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12959pub enum ModuleSourceExperimentalFeature {
12960    #[serde(rename = "SELF_CALLS")]
12961    SelfCalls,
12962}
12963#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12964pub enum ModuleSourceKind {
12965    #[serde(rename = "DIR")]
12966    Dir,
12967    #[serde(rename = "DIR_SOURCE")]
12968    DirSource,
12969    #[serde(rename = "GIT")]
12970    Git,
12971    #[serde(rename = "GIT_SOURCE")]
12972    GitSource,
12973    #[serde(rename = "LOCAL")]
12974    Local,
12975    #[serde(rename = "LOCAL_SOURCE")]
12976    LocalSource,
12977}
12978#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12979pub enum NetworkProtocol {
12980    #[serde(rename = "TCP")]
12981    Tcp,
12982    #[serde(rename = "UDP")]
12983    Udp,
12984}
12985#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12986pub enum ReturnType {
12987    #[serde(rename = "ANY")]
12988    Any,
12989    #[serde(rename = "FAILURE")]
12990    Failure,
12991    #[serde(rename = "SUCCESS")]
12992    Success,
12993}
12994#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
12995pub enum TypeDefKind {
12996    #[serde(rename = "BOOLEAN")]
12997    Boolean,
12998    #[serde(rename = "BOOLEAN_KIND")]
12999    BooleanKind,
13000    #[serde(rename = "ENUM")]
13001    Enum,
13002    #[serde(rename = "ENUM_KIND")]
13003    EnumKind,
13004    #[serde(rename = "FLOAT")]
13005    Float,
13006    #[serde(rename = "FLOAT_KIND")]
13007    FloatKind,
13008    #[serde(rename = "INPUT")]
13009    Input,
13010    #[serde(rename = "INPUT_KIND")]
13011    InputKind,
13012    #[serde(rename = "INTEGER")]
13013    Integer,
13014    #[serde(rename = "INTEGER_KIND")]
13015    IntegerKind,
13016    #[serde(rename = "INTERFACE")]
13017    Interface,
13018    #[serde(rename = "INTERFACE_KIND")]
13019    InterfaceKind,
13020    #[serde(rename = "LIST")]
13021    List,
13022    #[serde(rename = "LIST_KIND")]
13023    ListKind,
13024    #[serde(rename = "OBJECT")]
13025    Object,
13026    #[serde(rename = "OBJECT_KIND")]
13027    ObjectKind,
13028    #[serde(rename = "SCALAR")]
13029    Scalar,
13030    #[serde(rename = "SCALAR_KIND")]
13031    ScalarKind,
13032    #[serde(rename = "STRING")]
13033    String,
13034    #[serde(rename = "STRING_KIND")]
13035    StringKind,
13036    #[serde(rename = "VOID")]
13037    Void,
13038    #[serde(rename = "VOID_KIND")]
13039    VoidKind,
13040}