From 26069a82a69ec7265216c8ddaceb37228dd0fb81 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Wed, 1 Feb 2023 16:34:59 +0100 Subject: [PATCH] fix optional types for real --- .../dagger-codegen/src/handlers/type_ref.rs | 49 +- crates/dagger-sdk/src/gen.rs | 761 +++++++++--------- 2 files changed, 431 insertions(+), 379 deletions(-) diff --git a/crates/dagger-codegen/src/handlers/type_ref.rs b/crates/dagger-codegen/src/handlers/type_ref.rs index 05a4b7e..b7c45e6 100644 --- a/crates/dagger-codegen/src/handlers/type_ref.rs +++ b/crates/dagger-codegen/src/handlers/type_ref.rs @@ -6,14 +6,33 @@ use crate::predicates::{ is_custom_scalar_type_ref, is_list_type, is_required_type_ref, is_scalar_type_ref, }; +//fn optional(t: rust::Tokens) -> impl FormatInto { +// quote_fn! {"Option<$[const](t)>"} +//} +// +//fn required(t: rust::Tokens) -> impl FormatInto { +// quote_fn! {"$[const](t)"} +//} + pub fn render_type_ref(inner: &TypeRef) -> eyre::Result { let extract_of_type = |t: &TypeRef| -> Option { return t.clone().of_type.map(|t| *t); }; + let (optional, inner) = if !is_required_type_ref(inner) { + (true, inner.clone()) + } else { + (false, extract_of_type(inner).unwrap()) + }; + if is_list_type(&inner) { - if let Some(inner_of_type) = extract_of_type(inner) { + if let Some(inner_of_type) = extract_of_type(&inner) { let inner_field = render_type_ref(&inner_of_type)?; + if optional { + return Ok(quote! { + Option> + }); + } return Ok(quote! { Vec<$inner_field> }); @@ -21,8 +40,13 @@ pub fn render_type_ref(inner: &TypeRef) -> eyre::Result { } if is_custom_scalar_type_ref(&inner) { - if let Some(inner_of_type) = extract_of_type(inner) { + if let Some(inner_of_type) = extract_of_type(&inner) { let inner_field = render_type_ref(&inner_of_type)?; + if optional { + return Ok(quote! { + Option<$inner_field> + }); + } return Ok(quote! { $inner_field }); @@ -44,25 +68,34 @@ pub fn render_type_ref(inner: &TypeRef) -> eyre::Result { _ => eyre::bail!("missing type in the end of chain"), }; + if optional { + return Ok(quote! { + Option<$name> + }); + } + return Ok(quote! { $name }); } - 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)?; + if let Some(inner_type) = inner.of_type.as_ref() { + let inner_field = render_type_ref(&inner_type)?; + if optional { return Ok(quote! { Option<$inner_field> }); } - } - if let Some(inner_type) = inner.of_type.as_ref() { - return render_type_ref(&inner_type); + return Ok(inner_field); } if let Some(name) = inner.name.as_ref() { + if optional { + return Ok(quote! { + Option<$name> + }); + } return Ok(quote! { $name }); diff --git a/crates/dagger-sdk/src/gen.rs b/crates/dagger-sdk/src/gen.rs index e87d386..9186a35 100644 --- a/crates/dagger-sdk/src/gen.rs +++ b/crates/dagger-sdk/src/gen.rs @@ -2,28 +2,28 @@ use dagger_core::{Boolean, Input, Int, Scalar}; // code generated by dagger. DO NOT EDIT. -/// A unique identifier for a secret. -pub struct SecretID(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 file identifier. -pub struct FileID(Scalar); - -/// A content-addressed directory identifier. -pub struct DirectoryID(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 content-addressed socket identifier. -pub struct SocketID(Scalar); +/// A content-addressed directory identifier. +pub struct DirectoryID(Scalar); + +/// A file identifier. +pub struct FileID(Scalar); + +/// A unique identifier for a secret. +pub struct SecretID(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); + /// pub struct BuildArg { pub name: String, @@ -33,12 +33,29 @@ pub struct BuildArg { 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 {} + /// A set of scripts and/or extensions pub struct Project {} impl Project { /// extensions in this project - pub fn extensions(&self) -> Vec { + pub fn extensions(&self) -> Option> { todo!() } @@ -58,61 +75,289 @@ impl Project { } /// schema provided by the project - pub fn schema(&self) -> String { + pub fn schema(&self) -> Option { todo!() } /// sdk used to generate code for and/or execute this project - pub fn sdk(&self) -> String { + pub fn sdk(&self) -> Option { todo!() } } impl Input for Project {} -/// 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 {} + +/// 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 {} -/// Information about the host execution environment. -pub struct Host {} +/// A directory. +pub struct Directory {} -impl Host { - /// Accesses a directory on the host. - pub fn directory(&self, path: String, exclude: Vec, include: Vec) -> Directory { +impl Directory { + /// Gets the difference between this directory and an another directory. + pub fn diff(&self, other: DirectoryID) -> Directory { todo!() } - /// Accesses an environment variable on the host. - pub fn env_variable(&self, name: String) -> HostVariable { + /// Retrieves a directory at the given path. + pub fn directory(&self, path: String) -> Directory { todo!() } - /// Accesses a Unix socket on the host. - pub fn unix_socket(&self, path: String) -> Socket { + /// Builds a new Docker container from this directory. + /// # Arguments + /// + /// * `dockerfile` - Path to the Dockerfile to use. + /// Defaults to './Dockerfile'. + /// * `platform` - The platform to build. + /// * `buildArgs` - Additional build arguments. + /// * `target` - Target build stage to build. + pub fn docker_build( + &self, + dockerfile: Option, + platform: Option, + build_args: Option>, + target: Option, + ) -> Container { todo!() } - /// Retrieves the current working directory on the host. - pub fn workdir(&self, exclude: Vec, include: Vec) -> Directory { + /// Returns a list of files and directories at the given path. + pub fn entries(&self, path: Option) -> Vec { + todo!() + } + + /// Writes the contents of the directory to a path on the host. + pub fn export(&self, path: String) -> Boolean { + todo!() + } + + /// Retrieves a file at the given path. + pub fn file(&self, path: String) -> File { + todo!() + } + + /// The content-addressed identifier of the directory. + pub fn id(&self) -> DirectoryID { + todo!() + } + + /// load a project's metadata + pub fn load_project(&self, config_path: String) -> Project { + todo!() + } + + /// Creates a named sub-pipeline. + pub fn pipeline(&self, name: String, description: Option) -> Directory { + todo!() + } + + /// Retrieves this directory plus a directory written at the given path. + /// # Arguments + /// + /// * `exclude` - Exclude artifacts that match the given pattern. + /// (e.g. ["node_modules/", ".git*"]). + /// * `include` - Include only artifacts that match the given pattern. + /// (e.g. ["app/", "package.*"]). + pub fn with_directory( + &self, + path: String, + directory: DirectoryID, + exclude: Option>, + include: Option>, + ) -> Directory { + todo!() + } + + /// Retrieves this directory plus the contents of the given file copied to the given path. + pub fn with_file(&self, path: String, source: FileID, permissions: Option) -> Directory { + todo!() + } + + /// Retrieves this directory plus a new directory created at the given path. + pub fn with_new_directory(&self, path: String, permissions: Option) -> Directory { + todo!() + } + + /// Retrieves this directory plus a new file written at the given path. + pub fn with_new_file( + &self, + path: String, + contents: String, + permissions: Option, + ) -> Directory { + todo!() + } + + /// Retrieves this directory with all file/dir timestamps set to the given time, in seconds from the Unix epoch. + pub fn with_timestamps(&self, timestamp: Int) -> Directory { + todo!() + } + + /// Retrieves this directory with the directory at the given path removed. + pub fn without_directory(&self, path: String) -> Directory { + todo!() + } + + /// Retrieves this directory with the file at the given path removed. + pub fn without_file(&self, path: String) -> Directory { todo!() } } -impl Input for Host {} +impl Input for Directory {} + +/// +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"). + 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: Option, platform: Option) -> 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: Option) -> Directory { + todo!() + } + + /// Loads a file by ID. + pub fn file(&self, id: FileID) -> Option { + todo!() + } + + /// Queries a git repository. + pub fn git(&self, url: String, keep_git_dir: Option) -> 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: Option) -> 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: Option) -> Socket { + todo!() + } +} + +impl Input for Query {} + +/// 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 {} /// An OCI-compatible container, also known as a docker container. pub struct Container {} @@ -129,15 +374,15 @@ impl Container { pub fn build( &self, context: DirectoryID, - dockerfile: String, - build_args: Vec, - target: String, + dockerfile: Option, + build_args: Option>, + target: Option, ) -> Container { todo!() } /// Retrieves default arguments for future commands. - pub fn default_args(&self) -> Vec { + pub fn default_args(&self) -> Option> { todo!() } @@ -147,12 +392,12 @@ impl Container { } /// Retrieves entrypoint to be prepended to the arguments of all commands. - pub fn entrypoint(&self) -> Vec { + pub fn entrypoint(&self) -> Option> { todo!() } /// Retrieves the value of the specified environment variable. - pub fn env_variable(&self, name: String) -> String { + pub fn env_variable(&self, name: String) -> Option { todo!() } @@ -173,18 +418,18 @@ impl Container { /// The command being executed WILL BE GRANTED FULL ACCESS TO YOUR HOST FILESYSTEM. pub fn exec( &self, - args: Vec, - stdin: String, - redirect_stdout: String, - redirect_stderr: String, - experimental_privileged_nesting: Boolean, + args: Option>, + stdin: Option, + redirect_stdout: Option, + redirect_stderr: Option, + experimental_privileged_nesting: Option, ) -> Container { todo!() } /// Exit code of the last executed command. Zero means success. /// Null if no command has been executed. - pub fn exit_code(&self) -> Int { + pub fn exit_code(&self) -> Option { todo!() } @@ -196,7 +441,7 @@ impl Container { /// Path can be relative to the engine's workdir or absolute. /// * `platformVariants` - Identifiers for other platform specific containers. /// Used for multi-platform image. - pub fn export(&self, path: String, platform_variants: Vec) -> Boolean { + pub fn export(&self, path: String, platform_variants: Option>) -> Boolean { todo!() } @@ -225,7 +470,7 @@ impl Container { } /// Retrieves the value of the specified label. - pub fn label(&self, name: String) -> String { + pub fn label(&self, name: String) -> Option { todo!() } @@ -240,7 +485,7 @@ impl Container { } /// Creates a named sub-pipeline - pub fn pipeline(&self, name: String, description: String) -> Container { + pub fn pipeline(&self, name: String, description: Option) -> Container { todo!() } @@ -256,7 +501,7 @@ impl Container { /// Formatted as [host]/[user]/[repo]:[tag] (e.g. docker.io/dagger/dagger:main). /// * `platformVariants` - Identifiers for other platform specific containers. /// Used for multi-platform image. - pub fn publish(&self, address: String, platform_variants: Vec) -> String { + pub fn publish(&self, address: String, platform_variants: Option>) -> String { todo!() } @@ -267,23 +512,23 @@ impl Container { /// The error stream of the last executed command. /// Null if no command has been executed. - pub fn stderr(&self) -> String { + pub fn stderr(&self) -> Option { todo!() } /// The output stream of the last executed command. /// Null if no command has been executed. - pub fn stdout(&self) -> String { + pub fn stdout(&self) -> Option { todo!() } /// Retrieves the user to be set for all commands. - pub fn user(&self) -> String { + pub fn user(&self) -> Option { todo!() } /// Configures default arguments for future commands. - pub fn with_default_args(&self, args: Vec) -> Container { + pub fn with_default_args(&self, args: Option>) -> Container { todo!() } @@ -292,8 +537,8 @@ impl Container { &self, path: String, directory: DirectoryID, - exclude: Vec, - include: Vec, + exclude: Option>, + include: Option>, ) -> Container { todo!() } @@ -321,10 +566,10 @@ impl Container { pub fn with_exec( &self, args: Vec, - stdin: String, - redirect_stdout: String, - redirect_stderr: String, - experimental_privileged_nesting: Boolean, + stdin: Option, + redirect_stdout: Option, + redirect_stderr: Option, + experimental_privileged_nesting: Option, ) -> Container { todo!() } @@ -335,7 +580,7 @@ impl Container { } /// Retrieves this container plus the contents of the given file copied to the given path. - pub fn with_file(&self, path: String, source: FileID, permissions: Int) -> Container { + pub fn with_file(&self, path: String, source: FileID, permissions: Option) -> Container { todo!() } @@ -349,7 +594,7 @@ impl Container { &self, path: String, cache: CacheID, - source: DirectoryID, + source: Option, ) -> Container { todo!() } @@ -375,7 +620,12 @@ impl Container { } /// Retrieves this container plus a new file written at the given path. - pub fn with_new_file(&self, path: String, contents: String, permissions: Int) -> Container { + pub fn with_new_file( + &self, + path: String, + contents: Option, + permissions: Option, + ) -> Container { todo!() } @@ -425,121 +675,94 @@ impl Container { } /// Retrieves the working directory for all commands. - pub fn workdir(&self) -> String { + pub fn workdir(&self) -> Option { todo!() } } impl Input for Container {} +/// 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: Option, + ssh_auth_socket: Option, + ) -> Directory { + todo!() + } +} + +impl Input for GitRef {} + +/// A simple key value object that represents a label. +pub struct Label {} + +impl Label { + /// The label name. + pub fn name(&self) -> String { + todo!() + } + + /// The label value. + pub fn value(&self) -> String { + todo!() + } +} + +impl Input for Label {} + +/// 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) -> Option { + 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 {} + /// -pub struct Query {} +pub struct Socket {} -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"). - 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 { +impl Socket { + /// The content-addressed identifier of the socket. + pub fn id(&self) -> SocketID { todo!() } } -impl Input for Query {} - -/// A file. -pub struct File {} - -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 {} +impl Input for Socket {} /// A git repository. pub struct GitRepository {} @@ -572,207 +795,3 @@ impl GitRepository { } 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 {} - -/// 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 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 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 environment variable value. - pub fn value(&self) -> String { - todo!() - } -} - -impl Input for EnvVariable {} - -/// A directory. -pub struct Directory {} - -impl Directory { - /// Gets the difference between this directory and an another directory. - pub fn diff(&self, other: DirectoryID) -> Directory { - todo!() - } - - /// Retrieves a directory at the given path. - pub fn directory(&self, path: String) -> Directory { - todo!() - } - - /// Builds a new Docker container from this directory. - /// # Arguments - /// - /// * `dockerfile` - Path to the Dockerfile to use. - /// Defaults to './Dockerfile'. - /// * `platform` - The platform to build. - /// * `buildArgs` - Additional build arguments. - /// * `target` - Target build stage to build. - pub fn docker_build( - &self, - dockerfile: String, - platform: Platform, - build_args: Vec, - target: String, - ) -> Container { - todo!() - } - - /// Returns a list of files and directories at the given path. - pub fn entries(&self, path: String) -> Vec { - todo!() - } - - /// Writes the contents of the directory to a path on the host. - pub fn export(&self, path: String) -> Boolean { - todo!() - } - - /// Retrieves a file at the given path. - pub fn file(&self, path: String) -> File { - todo!() - } - - /// The content-addressed identifier of the directory. - pub fn id(&self) -> DirectoryID { - todo!() - } - - /// load a project's metadata - pub fn load_project(&self, config_path: String) -> Project { - todo!() - } - - /// Creates a named sub-pipeline. - pub fn pipeline(&self, name: String, description: String) -> Directory { - todo!() - } - - /// Retrieves this directory plus a directory written at the given path. - /// # Arguments - /// - /// * `exclude` - Exclude artifacts that match the given pattern. - /// (e.g. ["node_modules/", ".git*"]). - /// * `include` - Include only artifacts that match the given pattern. - /// (e.g. ["app/", "package.*"]). - pub fn with_directory( - &self, - path: String, - directory: DirectoryID, - exclude: Vec, - include: Vec, - ) -> Directory { - todo!() - } - - /// Retrieves this directory plus the contents of the given file copied to the given path. - pub fn with_file(&self, path: String, source: FileID, permissions: Int) -> Directory { - todo!() - } - - /// Retrieves this directory plus a new directory created at the given path. - pub fn with_new_directory(&self, path: String, permissions: Int) -> Directory { - todo!() - } - - /// Retrieves this directory plus a new file written at the given path. - pub fn with_new_file(&self, path: String, contents: String, permissions: Int) -> Directory { - todo!() - } - - /// Retrieves this directory with all file/dir timestamps set to the given time, in seconds from the Unix epoch. - pub fn with_timestamps(&self, timestamp: Int) -> Directory { - todo!() - } - - /// Retrieves this directory with the directory at the given path removed. - pub fn without_directory(&self, path: String) -> Directory { - todo!() - } - - /// Retrieves this directory with the file at the given path removed. - pub fn without_file(&self, path: String) -> Directory { - todo!() - } -} - -impl Input for Directory {} - -/// 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 {} - -/// -pub struct Socket {} - -impl Socket { - /// The content-addressed identifier of the socket. - pub fn id(&self) -> SocketID { - todo!() - } -} - -impl Input for Socket {}