From 9184475e6857832f226e1ca7fc446cf35394a46a Mon Sep 17 00:00:00 2001 From: Ximo Guanter Date: Fri, 8 Jan 2021 21:56:44 +0100 Subject: [PATCH] minor refactor --- Cargo.lock | 128 +++++++++--------- dockerfile-plus/Cargo.toml | 2 +- dockerfile-plus/examples/README.md | 21 --- dockerfile-plus/src/main.rs | 40 +++--- .../{options/deserializer.rs => options.rs} | 0 dockerfile-plus/src/options/common.rs | 40 ------ dockerfile-plus/src/options/default.rs | 9 -- dockerfile-plus/src/options/mod.rs | 123 ----------------- 8 files changed, 87 insertions(+), 276 deletions(-) delete mode 100644 dockerfile-plus/examples/README.md rename dockerfile-plus/src/{options/deserializer.rs => options.rs} (100%) delete mode 100644 dockerfile-plus/src/options/common.rs delete mode 100644 dockerfile-plus/src/options/default.rs delete mode 100644 dockerfile-plus/src/options/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 0d9caec..ad8efbb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,9 +2,9 @@ # It is not intended for manual editing. [[package]] name = "addr2line" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" dependencies = [ "gimli", ] @@ -159,9 +159,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.3.4" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" [[package]] name = "bytes" @@ -169,6 +169,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +[[package]] +name = "bytes" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72" + [[package]] name = "cfg-if" version = "0.1.10" @@ -264,7 +270,7 @@ dependencies = [ [[package]] name = "dockerfile-plus" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", "async-trait", @@ -276,7 +282,7 @@ dependencies = [ "futures", "libc", "mio", - "pin-project 1.0.2", + "pin-project 1.0.3", "prost", "prost-types", "regex", @@ -375,9 +381,9 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +checksum = "c70be434c505aee38639abccb918163b63158a4b4bb791b45b7023044bdc3c9c" dependencies = [ "futures-channel", "futures-core", @@ -390,9 +396,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +checksum = "f01c61843314e95f96cc9245702248733a3a3d744e43e2e755e3c7af8348a0a9" dependencies = [ "futures-core", "futures-sink", @@ -400,15 +406,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" +checksum = "db8d3b0917ff63a2a96173133c02818fac4a746b0a57569d3baca9ec0e945e08" [[package]] name = "futures-executor" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +checksum = "9ee9ca2f7eb4475772cf39dd1cd06208dce2670ad38f4d9c7262b3e15f127068" dependencies = [ "futures-core", "futures-task", @@ -417,15 +423,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" +checksum = "e37c1a51b037b80922864b8eed90692c5cd8abd4c71ce49b77146caa47f3253b" [[package]] name = "futures-macro" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +checksum = "0f8719ca0e1f3c5e34f3efe4570ef2c0610ca6da85ae7990d472e9cbfba13664" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -435,24 +441,24 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" +checksum = "f6adabac1290109cfa089f79192fb6244ad2c3f1cc2281f3e1dd987592b71feb" [[package]] name = "futures-task" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +checksum = "a92a0843a2ff66823a8f7c77bffe9a09be2b64e533562c412d63075643ec0038" dependencies = [ "once_cell", ] [[package]] name = "futures-util" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +checksum = "036a2107cdeb57f6d7322f1b6c363dad67cd63ca3b7d1b925bdf75bd5d96cda9" dependencies = [ "futures-channel", "futures-core", @@ -461,7 +467,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project 1.0.2", + "pin-project-lite 0.2.1", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -479,11 +485,11 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 0.1.10", + "cfg-if 1.0.0", "libc", "wasi", ] @@ -500,7 +506,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" dependencies = [ - "bytes", + "bytes 0.5.6", "fnv", "futures-core", "futures-sink", @@ -540,11 +546,11 @@ dependencies = [ [[package]] name = "http" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84129d298a6d57d246960ff8eb831ca4af3f96d29e2e28848dae275408658e26" +checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes", + "bytes 1.0.0", "fnv", "itoa", ] @@ -555,7 +561,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" dependencies = [ - "bytes", + "bytes 0.5.6", "http", ] @@ -583,7 +589,7 @@ version = "0.13.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ad767baac13b44d4529fcf58ba2cd0995e36e7b435bc5b039de6f47e880dbf" dependencies = [ - "bytes", + "bytes 0.5.6", "futures-channel", "futures-core", "futures-util", @@ -593,7 +599,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project 1.0.2", + "pin-project 1.0.3", "socket2", "tokio", "tower-service", @@ -664,9 +670,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.81" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" +checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929" [[package]] name = "log" @@ -817,11 +823,11 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ccc2237c2c489783abd8c4c80e5450fc0e98644555b1364da68cc29aa151ca7" +checksum = "5a83804639aad6ba65345661744708855f9fbcb71176ea8d28d05aeb11d975e7" dependencies = [ - "pin-project-internal 1.0.2", + "pin-project-internal 1.0.3", ] [[package]] @@ -837,9 +843,9 @@ dependencies = [ [[package]] name = "pin-project-internal" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8e8d2bf0b23038a4424865103a4df472855692821aab4e4f5c3312d461d9e5f" +checksum = "b7bcc46b8f73443d15bc1c5fecbb315718491fa9187fa483f0e359323cde8b3a" dependencies = [ "proc-macro2", "quote", @@ -854,9 +860,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c" +checksum = "e36743d754ccdf9954c2e352ce2d4b106e024c814f6499c2dadff80da9a442d8" [[package]] name = "pin-utils" @@ -897,7 +903,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212" dependencies = [ - "bytes", + "bytes 0.5.6", "prost-derive", ] @@ -907,7 +913,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26" dependencies = [ - "bytes", + "bytes 0.5.6", "heck", "itertools", "log", @@ -938,7 +944,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa" dependencies = [ - "bytes", + "bytes 0.5.6", "prost", ] @@ -1010,9 +1016,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "regex" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" dependencies = [ "aho-corasick", "memchr", @@ -1022,9 +1028,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" [[package]] name = "remove_dir_all" @@ -1115,9 +1121,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9802ddde94170d186eeee5005b798d9c159fa970403f1be19976d0cfb939b72" +checksum = "cc60a3d73ea6594cd712d830cc1f0390fd71542d8c8cd24e70cc54cdfd5e05d5" dependencies = [ "proc-macro2", "quote", @@ -1161,9 +1167,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +checksum = "bb9bc092d0d51e76b2b19d9d85534ffc9ec2db959a2523cdae0697e2972cd447" dependencies = [ "lazy_static", ] @@ -1189,7 +1195,7 @@ version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "099837d3464c16a808060bb3f02263b412f6fafcb5d01c533d309985fbeebe48" dependencies = [ - "bytes", + "bytes 0.5.6", "fnv", "futures-core", "iovec", @@ -1219,7 +1225,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" dependencies = [ - "bytes", + "bytes 0.5.6", "futures-core", "futures-sink", "log", @@ -1235,7 +1241,7 @@ dependencies = [ "async-stream", "async-trait", "base64", - "bytes", + "bytes 0.5.6", "futures-core", "futures-util", "http", @@ -1334,9 +1340,9 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35d656f2638b288b33495d1053ea74c40dc05ec0b92084dd71ca5566c4ed1dc" +checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" [[package]] name = "tower-limit" @@ -1453,7 +1459,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.0", + "pin-project-lite 0.2.1", "tracing-attributes", "tracing-core", ] diff --git a/dockerfile-plus/Cargo.toml b/dockerfile-plus/Cargo.toml index e41cb11..df9b9fb 100644 --- a/dockerfile-plus/Cargo.toml +++ b/dockerfile-plus/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dockerfile-plus" -version = "0.1.0" +version = "0.2.0" authors = ["Ximo Guanter "] edition = "2018" diff --git a/dockerfile-plus/examples/README.md b/dockerfile-plus/examples/README.md deleted file mode 100644 index 3118396..0000000 --- a/dockerfile-plus/examples/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Examples - -In this folder you can find some example Dockerfile syntax extensions. - -## Noop - -This is the most basic example. It just adds a new instruction `NOOP` which does nothing (i.e. it is ignored). With this extension, the following Dockerfile would success fully compile: - -```dockerfile -# syntax = edrevo/noop-dockerfile - -NOOP - -FROM alpine - -NOOP - -WORKDIR / - -RUN echo "Hello World" -``` \ No newline at end of file diff --git a/dockerfile-plus/src/main.rs b/dockerfile-plus/src/main.rs index 6c5f3da..1d2d24d 100644 --- a/dockerfile-plus/src/main.rs +++ b/dockerfile-plus/src/main.rs @@ -41,7 +41,7 @@ where Ok(response) } -async fn solve<'a>(client: &mut LlbBridgeClient, graph: Terminal<'a>) -> Result { +async fn solve(client: &mut LlbBridgeClient, graph: Terminal<'_>) -> Result { let solve_request = SolveRequest { definition: Some(graph.into_definition()), exporter_attr: vec![], @@ -62,13 +62,7 @@ async fn solve<'a>(client: &mut LlbBridgeClient, graph: Terminal<'a>) - } } -async fn run() -> Result<()> { - let channel = { - Endpoint::from_static("http://[::]:50051") - .connect_with_connector(service_fn(stdio::stdio_connector)) - .await? - }; - let mut client = LlbBridgeClient::new(channel); +async fn run(mut client: LlbBridgeClient) -> Result { let o: DockerfileOptions = options::from_env(std::env::vars())?; let dockerfile_path = o .filename @@ -80,24 +74,28 @@ async fn run() -> Result<()> { let dockerfile_contents = String::from_utf8(read_file(&mut client, &dockerfile_layer, dockerfile_path, None).await?)?; let dockerfile_frontend = DockerfileFrontend::new(client.clone(), dockerfile_path); - let result = dockerfile_trap(client.clone(), dockerfile_frontend, dockerfile_contents) - .await - .unwrap_or_else(|e| ReturnRequest { - result: None, - error: Some(Status { - code: 128, - message: e.to_string(), - details: vec![], - }), - }); - client.r#return(result).await?; - Ok(()) + dockerfile_trap(client.clone(), dockerfile_frontend, dockerfile_contents).await } #[tokio::main] async fn main() { env_logger::init(); - run().await.unwrap(); + let channel = { + Endpoint::from_static("http://[::]:50051") + .connect_with_connector(service_fn(stdio::stdio_connector)) + .await + .unwrap() + }; + let mut client = LlbBridgeClient::new(channel); + let result = run(client.clone()).await.unwrap_or_else(|e| ReturnRequest { + result: None, + error: Some(Status { + code: 128, + message: e.to_string(), + details: vec![], + }), + }); + client.r#return(result).await.unwrap(); } #[derive(Debug, Deserialize)] diff --git a/dockerfile-plus/src/options/deserializer.rs b/dockerfile-plus/src/options.rs similarity index 100% rename from dockerfile-plus/src/options/deserializer.rs rename to dockerfile-plus/src/options.rs diff --git a/dockerfile-plus/src/options/common.rs b/dockerfile-plus/src/options/common.rs deleted file mode 100644 index b011e6c..0000000 --- a/dockerfile-plus/src/options/common.rs +++ /dev/null @@ -1,40 +0,0 @@ -use std::collections::HashMap; - -use buildkit_proto::moby::buildkit::v1::frontend::CacheOptionsEntry as CacheOptionsEntryProto; -use serde::Deserialize; - -#[derive(Clone, Debug, Deserialize, PartialEq)] -pub struct CacheOptionsEntry { - #[serde(rename = "Type")] - pub cache_type: CacheType, - - #[serde(rename = "Attrs")] - pub attrs: HashMap, -} - -#[derive(Clone, Debug, Deserialize, PartialEq)] -#[serde(rename_all = "lowercase")] -pub enum CacheType { - Local, - Registry, - Inline, -} - -impl Into for CacheOptionsEntry { - fn into(self) -> CacheOptionsEntryProto { - CacheOptionsEntryProto { - r#type: self.cache_type.into(), - attrs: self.attrs, - } - } -} - -impl Into for CacheType { - fn into(self) -> String { - match self { - CacheType::Local => "local".into(), - CacheType::Registry => "registry".into(), - CacheType::Inline => "inline".into(), - } - } -} diff --git a/dockerfile-plus/src/options/default.rs b/dockerfile-plus/src/options/default.rs deleted file mode 100644 index e01df0f..0000000 --- a/dockerfile-plus/src/options/default.rs +++ /dev/null @@ -1,9 +0,0 @@ -use serde::Deserialize; - -#[derive(Debug, PartialEq, Deserialize)] -#[serde(untagged)] -enum OptionValue { - Flag(bool), - Single(String), - Multiple(Vec), -} diff --git a/dockerfile-plus/src/options/mod.rs b/dockerfile-plus/src/options/mod.rs deleted file mode 100644 index 2887361..0000000 --- a/dockerfile-plus/src/options/mod.rs +++ /dev/null @@ -1,123 +0,0 @@ -mod default; -mod deserializer; - -pub use self::deserializer::from_env; - -pub mod common; - -#[cfg(test)] -mod tests { - use std::path::PathBuf; - - use super::*; - use serde::Deserialize; - - #[derive(Debug, Deserialize, PartialEq)] - #[serde(untagged)] - #[serde(field_identifier, rename_all = "lowercase")] - enum Debug { - All, - LLB, - Frontend, - } - - #[derive(Debug, Deserialize, PartialEq)] - #[serde(rename_all = "kebab-case")] - struct CustomOptions { - filename: Option, - verbosity: u32, - - #[serde(default)] - debug: Vec, - - #[serde(default)] - cache_imports: Vec, - } - - #[test] - fn custom_options() { - let env = vec![ - ( - "BUILDKIT_FRONTEND_OPT_0".into(), - "filename=/path/to/Dockerfile".into(), - ), - ( - "BUILDKIT_FRONTEND_OPT_1".into(), - "debug=llb,frontend".into(), - ), - ( - "BUILDKIT_FRONTEND_OPT_2".into(), - r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(), - ), - ( - "BUILDKIT_FRONTEND_OPT_3".into(), - "verbosity=12345678".into(), - ), - ]; - - assert_eq!( - from_env::(env.into_iter()).unwrap(), - CustomOptions { - filename: Some(PathBuf::from("/path/to/Dockerfile")), - verbosity: 12_345_678, - - debug: vec![Debug::LLB, Debug::Frontend], - - cache_imports: vec![common::CacheOptionsEntry { - cache_type: common::CacheType::Local, - attrs: vec![("src".into(), "cache".into())].into_iter().collect() - }], - } - ); - } - - #[test] - fn env_variable_names() { - let env = vec![ - ( - "ANOTHER_OPT_0".into(), - "filename=/path/to/Dockerfile".into(), - ), - ( - "ANOTHER_OPT_2".into(), - r#"cache-imports=[{"Type":"local","Attrs":{"src":"cache"}}]"#.into(), - ), - ("BUILDKIT_FRONTEND_OPT_1".into(), "debug=all".into()), - ( - "BUILDKIT_FRONTEND_OPT_2".into(), - "verbosity=12345678".into(), - ), - ]; - - assert_eq!( - from_env::(env.into_iter()).unwrap(), - CustomOptions { - filename: None, - verbosity: 12_345_678, - debug: vec![Debug::All], - cache_imports: vec![], - } - ); - } - - #[test] - fn empty_cache() { - let env = vec![ - ("BUILDKIT_FRONTEND_OPT_1".into(), "cache-imports=".into()), - ( - "BUILDKIT_FRONTEND_OPT_2".into(), - "verbosity=12345678".into(), - ), - ]; - - assert_eq!( - from_env::(env.into_iter()).unwrap(), - CustomOptions { - filename: None, - verbosity: 12_345_678, - debug: vec![], - cache_imports: vec![], - } - ); - } -}