From f4a812a7d24e9e09cb4e3cbde56ee0b3ac774b62 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Wed, 1 Feb 2023 15:27:44 +0100 Subject: [PATCH] with proper optional types --- .../dagger-codegen/src/handlers/type_ref.rs | 18 +- crates/dagger-codegen/src/predicates.rs | 6 +- crates/dagger-sdk/src/gen.rs | 655 +++++++++--------- 3 files changed, 337 insertions(+), 342 deletions(-) diff --git a/crates/dagger-codegen/src/handlers/type_ref.rs b/crates/dagger-codegen/src/handlers/type_ref.rs index 3cc5a8f..05a4b7e 100644 --- a/crates/dagger-codegen/src/handlers/type_ref.rs +++ b/crates/dagger-codegen/src/handlers/type_ref.rs @@ -11,15 +11,6 @@ pub fn render_type_ref(inner: &TypeRef) -> eyre::Result { return t.clone().of_type.map(|t| *t); }; - if !is_required_type_ref(inner) { - if let Some(inner_of_type) = extract_of_type(inner) { - let inner_field = render_type_ref(&inner_of_type)?; - return Ok(quote! { - Option<$inner_field> - }); - } - } - if is_list_type(&inner) { if let Some(inner_of_type) = extract_of_type(inner) { let inner_field = render_type_ref(&inner_of_type)?; @@ -58,6 +49,15 @@ pub fn render_type_ref(inner: &TypeRef) -> eyre::Result { }); } + if !is_required_type_ref(inner) { + if let Some(inner_of_type) = extract_of_type(inner) { + let inner_field = render_type_ref(&inner_of_type)?; + return Ok(quote! { + Option<$inner_field> + }); + } + } + if let Some(inner_type) = inner.of_type.as_ref() { return render_type_ref(&inner_type); } diff --git a/crates/dagger-codegen/src/predicates.rs b/crates/dagger-codegen/src/predicates.rs index d807bcc..d75f0ce 100644 --- a/crates/dagger-codegen/src/predicates.rs +++ b/crates/dagger-codegen/src/predicates.rs @@ -32,8 +32,8 @@ pub fn is_input_object_type(t: &FullType) -> bool { pub fn is_required_type(t: &FullTypeInputFields) -> bool { match t.input_value.type_.kind { - Some(__TypeKind::NON_NULL) => return false, - Some(_) => return true, + Some(__TypeKind::NON_NULL) => return true, + Some(_) => return false, _ => return false, } } @@ -42,7 +42,7 @@ pub fn is_required_type_ref(t: &TypeRef) -> bool { match t.kind { Some(__TypeKind::NON_NULL) => return true, Some(_) => return false, - _ => return true, + _ => return false, } } diff --git a/crates/dagger-sdk/src/gen.rs b/crates/dagger-sdk/src/gen.rs index 5b885d9..0e6c650 100644 --- a/crates/dagger-sdk/src/gen.rs +++ b/crates/dagger-sdk/src/gen.rs @@ -2,164 +2,37 @@ use dagger_core::{Boolean, Input, Int, Scalar}; // code generated by dagger. DO NOT EDIT. +/// A content-addressed socket identifier. +pub struct SocketID(Scalar); + +/// A unique identifier for a secret. +pub struct SecretID(Scalar); + +/// A unique container identifier. Null designates an empty container (scratch). +pub struct ContainerID(Scalar); + /// A content-addressed directory identifier. pub struct DirectoryID(Scalar); -/// A global cache volume identifier. -pub struct CacheID(Scalar); - /// The platform config OS and architecture in a Container. /// The format is [os]/[platform]/[version] (e.g. darwin/arm64/v7, windows/amd64, linux/arm64). pub struct Platform(Scalar); +/// A global cache volume identifier. +pub struct CacheID(Scalar); + /// A file identifier. pub struct FileID(Scalar); -/// A content-addressed socket identifier. -pub struct SocketID(Scalar); - -/// A unique container identifier. Null designates an empty container (scratch). -pub struct ContainerID(Scalar); - -/// A unique identifier for a secret. -pub struct SecretID(Scalar); - /// pub struct BuildArg { - pub value: String, - pub name: String, + + pub value: String, } impl Input for BuildArg {} -/// A reference to a secret value, which can be handled more safely than the value itself. -pub struct Secret {} - -impl Secret { - /// The identifier for this secret. - pub fn id(&self) -> SecretID { - todo!() - } - - /// The value of this secret. - pub fn plaintext(&self) -> String { - todo!() - } -} - -impl Input for Secret {} - -/// Information about the host execution environment. -pub struct Host {} - -impl Host { - /// Accesses a directory on the host. - pub fn directory( - &self, - path: String, - exclude: Option, - include: Option, - ) -> Directory { - todo!() - } - - /// Accesses an environment variable on the host. - pub fn env_variable(&self, name: String) -> HostVariable { - todo!() - } - - /// Accesses a Unix socket on the host. - pub fn unix_socket(&self, path: String) -> Socket { - todo!() - } - - /// Retrieves the current working directory on the host. - pub fn workdir(&self, exclude: Option, include: Option) -> Directory { - todo!() - } -} - -impl Input for Host {} - -/// A git repository. -pub struct GitRepository {} - -impl GitRepository { - /// Returns details on one branch. - pub fn branch(&self, name: String) -> GitRef { - todo!() - } - - /// Lists of branches on the repository. - pub fn branches(&self) -> Option { - todo!() - } - - /// Returns details on one commit. - pub fn commit(&self, id: String) -> GitRef { - todo!() - } - - /// Returns details on one tag. - pub fn tag(&self, name: String) -> GitRef { - todo!() - } - - /// Lists of tags on the repository. - pub fn tags(&self) -> Option { - todo!() - } -} - -impl Input for GitRepository {} - -/// A git ref (tag, branch or commit). -pub struct GitRef {} - -impl GitRef { - /// The digest of the current value of this ref. - pub fn digest(&self) -> String { - todo!() - } - - /// The filesystem tree at this ref. - pub fn tree(&self, ssh_known_hosts: String, ssh_auth_socket: SocketID) -> Directory { - todo!() - } -} - -impl Input for GitRef {} - -/// An environment variable on the host environment. -pub struct HostVariable {} - -impl HostVariable { - /// A secret referencing the value of this variable. - pub fn secret(&self) -> Secret { - todo!() - } - - /// The value of this variable. - pub fn value(&self) -> String { - todo!() - } -} - -impl Input for HostVariable {} - -/// A directory whose contents persist across runs. -pub struct CacheVolume {} - -impl CacheVolume { - /// - pub fn id(&self) -> CacheID { - todo!() - } -} - -impl Input for CacheVolume {} - /// A directory. pub struct Directory {} @@ -190,14 +63,14 @@ impl Directory { &self, dockerfile: String, platform: Platform, - build_args: Option, + build_args: Vec, target: String, ) -> Container { todo!() } /// Returns a list of files and directories at the given path. - pub fn entries(&self, path: String) -> Option { + pub fn entries(&self, path: String) -> Vec { todo!() } @@ -239,8 +112,8 @@ impl Directory { &self, path: String, directory: DirectoryID, - exclude: Option, - include: Option, + exclude: Vec, + include: Vec, ) -> Directory { todo!() } @@ -278,22 +151,303 @@ impl Directory { impl Input for Directory {} -/// A simple key value object that represents a label. -pub struct Label {} +/// A file. +pub struct File {} -impl Label { - /// The label name. +impl File { + /// Retrieves the contents of the file. + pub fn contents(&self) -> String { + todo!() + } + + /// Writes the file to a file path on the host. + pub fn export(&self, path: String) -> Boolean { + todo!() + } + + /// Retrieves the content-addressed identifier of the file. + pub fn id(&self) -> FileID { + todo!() + } + + /// Retrieves a secret referencing the contents of this file. + pub fn secret(&self) -> Secret { + todo!() + } + + /// Gets the size of the file, in bytes. + pub fn size(&self) -> Int { + todo!() + } + + /// Retrieves this file with its created/modified timestamps set to the given time, in seconds from the Unix epoch. + pub fn with_timestamps(&self, timestamp: Int) -> File { + todo!() + } +} + +impl Input for File {} + +/// +pub struct Socket {} + +impl Socket { + /// The content-addressed identifier of the socket. + pub fn id(&self) -> SocketID { + todo!() + } +} + +impl Input for Socket {} + +/// A simple key value object that represents an environment variable. +pub struct EnvVariable {} + +impl EnvVariable { + /// The environment variable name. pub fn name(&self) -> String { todo!() } - /// The label value. + /// The environment variable value. pub fn value(&self) -> String { todo!() } } -impl Input for Label {} +impl Input for EnvVariable {} + +/// A git repository. +pub struct GitRepository {} + +impl GitRepository { + /// Returns details on one branch. + pub fn branch(&self, name: String) -> GitRef { + todo!() + } + + /// Lists of branches on the repository. + pub fn branches(&self) -> Vec { + todo!() + } + + /// Returns details on one commit. + pub fn commit(&self, id: String) -> GitRef { + todo!() + } + + /// Returns details on one tag. + pub fn tag(&self, name: String) -> GitRef { + todo!() + } + + /// Lists of tags on the repository. + pub fn tags(&self) -> Vec { + todo!() + } +} + +impl Input for GitRepository {} + +/// A directory whose contents persist across runs. +pub struct CacheVolume {} + +impl CacheVolume { + /// + pub fn id(&self) -> CacheID { + todo!() + } +} + +impl Input for CacheVolume {} + +/// A reference to a secret value, which can be handled more safely than the value itself. +pub struct Secret {} + +impl Secret { + /// The identifier for this secret. + pub fn id(&self) -> SecretID { + todo!() + } + + /// The value of this secret. + pub fn plaintext(&self) -> String { + todo!() + } +} + +impl Input for Secret {} + +/// A git ref (tag, branch or commit). +pub struct GitRef {} + +impl GitRef { + /// The digest of the current value of this ref. + pub fn digest(&self) -> String { + todo!() + } + + /// The filesystem tree at this ref. + pub fn tree(&self, ssh_known_hosts: String, ssh_auth_socket: SocketID) -> Directory { + todo!() + } +} + +impl Input for GitRef {} + +/// An environment variable on the host environment. +pub struct HostVariable {} + +impl HostVariable { + /// A secret referencing the value of this variable. + pub fn secret(&self) -> Secret { + todo!() + } + + /// The value of this variable. + pub fn value(&self) -> String { + todo!() + } +} + +impl Input for HostVariable {} + +/// +pub struct Query {} + +impl Query { + /// Constructs a cache volume for a given cache key. + /// # Arguments + /// + /// * `key` - A string identifier to target this cache volume (e.g. "myapp-cache"). + /// A string identifier to target this cache volume (e.g. "myapp-cache"). + pub fn cache_volume(&self, key: String) -> CacheVolume { + todo!() + } + + /// Loads a container from ID. + /// Null ID returns an empty container (scratch). + /// Optional platform argument initializes new containers to execute and publish as that platform. Platform defaults to that of the builder's host. + pub fn container(&self, id: ContainerID, platform: Platform) -> Container { + todo!() + } + + /// The default platform of the builder. + pub fn default_platform(&self) -> Platform { + todo!() + } + + /// Load a directory by ID. No argument produces an empty directory. + pub fn directory(&self, id: DirectoryID) -> Directory { + todo!() + } + + /// Loads a file by ID. + pub fn file(&self, id: FileID) -> File { + todo!() + } + + /// Queries a git repository. + pub fn git(&self, url: String, keep_git_dir: Boolean) -> GitRepository { + todo!() + } + + /// Queries the host environment. + pub fn host(&self) -> Host { + todo!() + } + + /// Returns a file containing an http remote url content. + pub fn http(&self, url: String) -> File { + todo!() + } + + /// Creates a named sub-pipeline + pub fn pipeline(&self, name: String, description: String) -> Query { + todo!() + } + + /// Look up a project by name + pub fn project(&self, name: String) -> Project { + todo!() + } + + /// Loads a secret from its ID. + pub fn secret(&self, id: SecretID) -> Secret { + todo!() + } + + /// Loads a socket by its ID. + pub fn socket(&self, id: SocketID) -> Socket { + todo!() + } +} + +impl Input for Query {} + +/// Information about the host execution environment. +pub struct Host {} + +impl Host { + /// Accesses a directory on the host. + pub fn directory(&self, path: String, exclude: Vec, include: Vec) -> Directory { + todo!() + } + + /// Accesses an environment variable on the host. + pub fn env_variable(&self, name: String) -> HostVariable { + todo!() + } + + /// Accesses a Unix socket on the host. + pub fn unix_socket(&self, path: String) -> Socket { + todo!() + } + + /// Retrieves the current working directory on the host. + pub fn workdir(&self, exclude: Vec, include: Vec) -> Directory { + todo!() + } +} + +impl Input for Host {} + +/// A set of scripts and/or extensions +pub struct Project {} + +impl Project { + /// extensions in this project + pub fn extensions(&self) -> Vec { + todo!() + } + + /// Code files generated by the SDKs in the project + pub fn generated_code(&self) -> Directory { + todo!() + } + + /// install the project's schema + pub fn install(&self) -> Boolean { + todo!() + } + + /// name of the project + pub fn name(&self) -> String { + todo!() + } + + /// schema provided by the project + pub fn schema(&self) -> String { + todo!() + } + + /// sdk used to generate code for and/or execute this project + pub fn sdk(&self) -> String { + todo!() + } +} + +impl Input for Project {} /// An OCI-compatible container, also known as a docker container. pub struct Container {} @@ -315,14 +469,14 @@ impl Container { &self, context: DirectoryID, dockerfile: String, - build_args: Option, + build_args: Vec, target: String, ) -> Container { todo!() } /// Retrieves default arguments for future commands. - pub fn default_args(&self) -> Option { + pub fn default_args(&self) -> Vec { todo!() } @@ -332,7 +486,7 @@ impl Container { } /// Retrieves entrypoint to be prepended to the arguments of all commands. - pub fn entrypoint(&self) -> Option { + pub fn entrypoint(&self) -> Vec { todo!() } @@ -342,7 +496,7 @@ impl Container { } /// Retrieves the list of environment variables passed to commands. - pub fn env_variables(&self) -> Option { + pub fn env_variables(&self) -> Vec { todo!() } @@ -363,7 +517,7 @@ impl Container { /// The command being executed WILL BE GRANTED FULL ACCESS TO YOUR HOST FILESYSTEM. pub fn exec( &self, - args: Option, + args: Vec, stdin: String, redirect_stdout: String, redirect_stderr: String, @@ -388,7 +542,7 @@ impl Container { /// * `platformVariants` - Identifiers for other platform specific containers. /// Identifiers for other platform specific containers. /// Used for multi-platform image. - pub fn export(&self, path: String, platform_variants: Option) -> Boolean { + pub fn export(&self, path: String, platform_variants: Vec) -> Boolean { todo!() } @@ -423,12 +577,12 @@ impl Container { } /// Retrieves the list of labels passed to container. - pub fn labels(&self) -> Option