From 9f54fb95ff88dc1317fdcdb346395396d8a5a85b Mon Sep 17 00:00:00 2001 From: Ted Driggs Date: Wed, 21 Apr 2021 05:57:48 -0700 Subject: [PATCH 1/2] Move UninitializedFieldError to derive_builder UninitializedFieldError is part of the runtime API of derive_builder, not part of its compile-time macro machinery. Exporting it from the derive_builder_core crate caused downstream crates to unnecessarily import all of derive_builder_core, rather than only importing it via the proc-macro crate at compile-time. Fixes #201 --- derive_builder/Cargo.toml | 3 +-- {derive_builder_core => derive_builder}/src/error.rs | 5 +++++ derive_builder/src/lib.rs | 5 +++-- derive_builder_core/src/lib.rs | 3 --- 4 files changed, 9 insertions(+), 7 deletions(-) rename {derive_builder_core => derive_builder}/src/error.rs (90%) diff --git a/derive_builder/Cargo.toml b/derive_builder/Cargo.toml index 70c77de9..808d87ad 100644 --- a/derive_builder/Cargo.toml +++ b/derive_builder/Cargo.toml @@ -18,11 +18,10 @@ readme = "README.md" [features] default = ["std"] std = [] -clippy = ["derive_builder_macro/clippy", "derive_builder_core/clippy"] +clippy = ["derive_builder_macro/clippy"] [dependencies] derive_builder_macro = { version = "=0.10.1", path = "../derive_builder_macro" } -derive_builder_core = { version = "=0.10.1", path = "../derive_builder_core" } [dev-dependencies] pretty_assertions = "0.6.1" diff --git a/derive_builder_core/src/error.rs b/derive_builder/src/error.rs similarity index 90% rename from derive_builder_core/src/error.rs rename to derive_builder/src/error.rs index 6446da38..3e1fb4eb 100644 --- a/derive_builder_core/src/error.rs +++ b/derive_builder/src/error.rs @@ -1,5 +1,9 @@ +#[cfg(feature = "std")] use std::{error::Error, fmt}; +#[cfg(not(feature = "std"))] +use core::fmt; + /// Runtime error when a `build()` method is called and one or more required fields /// do not have a value. #[derive(Debug, Clone)] @@ -23,6 +27,7 @@ impl fmt::Display for UninitializedFieldError { } } +#[cfg(feature = "std")] impl Error for UninitializedFieldError {} impl From<&'static str> for UninitializedFieldError { diff --git a/derive_builder/src/lib.rs b/derive_builder/src/lib.rs index 4771165d..6da006e7 100644 --- a/derive_builder/src/lib.rs +++ b/derive_builder/src/lib.rs @@ -544,13 +544,14 @@ #[cfg(not(feature = "std"))] extern crate alloc; -extern crate derive_builder_core; extern crate derive_builder_macro; +mod error; + pub use derive_builder_macro::Builder; #[doc(inline)] -pub use derive_builder_core::UninitializedFieldError; +pub use error::UninitializedFieldError; #[doc(hidden)] pub mod export { diff --git a/derive_builder_core/src/lib.rs b/derive_builder_core/src/lib.rs index 5294b203..2970593b 100644 --- a/derive_builder_core/src/lib.rs +++ b/derive_builder_core/src/lib.rs @@ -37,14 +37,11 @@ mod builder; mod builder_field; mod deprecation_notes; mod doc_comment; -mod error; mod initializer; mod macro_options; mod options; mod setter; -pub use error::UninitializedFieldError; - pub(crate) use block::Block; pub(crate) use build_method::BuildMethod; pub(crate) use builder::Builder; From fd3da079a71d6f8123cb96e5fd3b0a8469b02972 Mon Sep 17 00:00:00 2001 From: Ted Driggs Date: Wed, 21 Apr 2021 08:39:24 -0700 Subject: [PATCH 2/2] Remove derive_builder_no_std_tests This is causing a CI failure which blocks fixing no_std support --- .github/workflows/build.yml | 6 ------ Cargo.toml | 2 +- derive_builder_no_std_tests/Cargo.toml | 11 ----------- derive_builder_no_std_tests/src/main.rs | 18 ------------------ 4 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 derive_builder_no_std_tests/Cargo.toml delete mode 100644 derive_builder_no_std_tests/src/main.rs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b48cad1a..a531681b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,9 +49,3 @@ jobs: cargo build ${{ matrix.features }} --verbose cargo test --no-fail-fast ${{ matrix.features }} --verbose -- --nocapture cargo doc - - - name: no_std tests crate - run: | - cd derive_builder_no_std_tests - cargo build ${{ matrix.features }} --verbose - cargo test --no-fail-fast ${{ matrix.features }} --verbose -- --nocapture diff --git a/Cargo.toml b/Cargo.toml index 0e0d0bd5..3a0eccc6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,2 +1,2 @@ [workspace] -members = ["derive_builder", "derive_builder_macro", "derive_builder_core", "derive_builder_no_std_tests"] +members = ["derive_builder", "derive_builder_macro", "derive_builder_core"] diff --git a/derive_builder_no_std_tests/Cargo.toml b/derive_builder_no_std_tests/Cargo.toml deleted file mode 100644 index 332e8104..00000000 --- a/derive_builder_no_std_tests/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "derive_builder_no_std_tests" -version = "0.1.0" -authors = ["Andrey Kutejko "] -edition = "2018" - -[features] -clippy = [] - -[dependencies] -derive_builder = { path = "../derive_builder", default-features = false } diff --git a/derive_builder_no_std_tests/src/main.rs b/derive_builder_no_std_tests/src/main.rs deleted file mode 100644 index 9ba077ac..00000000 --- a/derive_builder_no_std_tests/src/main.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![no_std] -#![allow(unused)] - -#[macro_use] -extern crate derive_builder; - -extern crate alloc; - -#[derive(Builder)] -#[builder(no_std)] -struct Foo { - bar: i32, -} - -fn main() { - let foo = FooBuilder::default().build(); - assert!(foo.is_err()); -}