1pub mod core;
2pub mod errors;
3
4pub mod logging;
5mod querybuilder;
6
7pub use crate::core::config::Config;
8
9#[cfg(feature = "gen")]
10#[allow(dead_code)]
11mod client;
12
13#[cfg(feature = "gen")]
14#[allow(dead_code)]
15mod gen;
16
17#[cfg(feature = "gen")]
18pub use client::*;
19
20#[cfg(feature = "gen")]
21pub use gen::*;
22
23pub mod id {
24 use std::pin::Pin;
25
26 use crate::errors::DaggerError;
27
28 pub trait IntoID<T>: Sized + Clone + Sync + Send + 'static {
29 fn into_id(
30 self,
31 ) -> Pin<Box<dyn core::future::Future<Output = Result<T, DaggerError>> + Send>>;
32 }
33}
34
35pub use querybuilder::Selection;
36
37pub mod loadable {
38 use std::sync::Arc;
39
40 use crate::core::cli_session::DaggerSessionProc;
41 use crate::core::graphql_client::DynGraphQLClient;
42 use crate::querybuilder::Selection;
43
44 pub trait Loadable: Sized {
48 fn graphql_type() -> &'static str;
50
51 fn from_query(
53 proc: Option<Arc<DaggerSessionProc>>,
54 selection: Selection,
55 graphql_client: DynGraphQLClient,
56 ) -> Self;
57 }
58}
59
60#[cfg(all(test, feature = "gen"))]
61mod tests {
62 use crate::{ContainerFromOpts, ContainerPublishOpts, RegistryProtocol};
63
64 #[test]
65 fn registry_protocol_options_use_owned_enum_values() {
66 let from_opts = ContainerFromOpts {
67 insecure_skip_tls_verify: Some(true),
68 protocol: Some(RegistryProtocol::Https),
69 registry_service: None,
70 version: None,
71 };
72 let publish_opts = ContainerPublishOpts {
73 forced_compression: None,
74 insecure_skip_tls_verify: Some(false),
75 media_types: None,
76 platform_variants: None,
77 protocol: Some(RegistryProtocol::Http),
78 registry_service: None,
79 };
80
81 assert_eq!(from_opts.protocol, Some(RegistryProtocol::Https));
82 assert_eq!(publish_opts.protocol, Some(RegistryProtocol::Http));
83 }
84}