From 0fd4bf37f9b88a1e07f8fc83503306a34135ab9d Mon Sep 17 00:00:00 2001 From: Alissa Rao Date: Tue, 5 Apr 2022 00:50:15 -0700 Subject: [PATCH] Add a new std feature for enumset. Fixes #34 --- .travis.yml | 5 +++-- enumset/Cargo.toml | 2 ++ enumset_derive/Cargo.toml | 2 +- enumset_derive/src/lib.rs | 24 +++++++++++++++++------- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5d75b66..8a378b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,5 +11,6 @@ script: - cd "${TRAVIS_BUILD_DIR}/enumset" - cargo test - cargo test --features serde - - cargo test --release - - cargo test --features serde --release + - cargo test --features alloc + - cargo test --features std + - cargo test --release --all-features diff --git a/enumset/Cargo.toml b/enumset/Cargo.toml index 3cf07d1..4c51da1 100644 --- a/enumset/Cargo.toml +++ b/enumset/Cargo.toml @@ -20,6 +20,8 @@ maintenance = { status = "actively-developed" } [features] serde = ["serde2", "enumset_derive/serde"] +alloc = [] +std = ["alloc", "enumset_derive/proc-macro-crate"] [dependencies] enumset_derive = { version = "0.5.6", path = "../enumset_derive" } diff --git a/enumset_derive/Cargo.toml b/enumset_derive/Cargo.toml index 882b742..def3be1 100644 --- a/enumset_derive/Cargo.toml +++ b/enumset_derive/Cargo.toml @@ -22,4 +22,4 @@ darling = { version = "0.13.0", default-features = false } syn = "1" quote = "1" proc-macro2 = "1" -proc-macro-crate = "1.1.3" +proc-macro-crate = { version = "1.1.3", optional = true } diff --git a/enumset_derive/src/lib.rs b/enumset_derive/src/lib.rs index b779b8e..76e98f7 100644 --- a/enumset_derive/src/lib.rs +++ b/enumset_derive/src/lib.rs @@ -6,7 +6,6 @@ use darling::*; use proc_macro::TokenStream; use proc_macro2::{TokenStream as SynTokenStream, Literal, Span}; use std::collections::HashSet; -use proc_macro_crate::FoundCrate; use syn::{*, Result, Error}; use syn::spanned::Spanned; use quote::*; @@ -241,16 +240,27 @@ impl EnumSetInfo { /// Generates the actual `EnumSetType` impl. fn enum_set_type_impl(info: EnumSetInfo) -> SynTokenStream { let name = &info.name; + let enumset = match &info.crate_name { Some(crate_name) => quote!(::#crate_name), None => { - let crate_name = proc_macro_crate::crate_name("enumset"); - match crate_name { - Ok(FoundCrate::Name(name)) => { - let ident = Ident::new(&name, Span::call_site()); - quote!(::#ident) + #[cfg(feature = "proc-macro-crate")] + { + use proc_macro_crate::FoundCrate; + + let crate_name = proc_macro_crate::crate_name("enumset"); + match crate_name { + Ok(FoundCrate::Name(name)) => { + let ident = Ident::new(&name, Span::call_site()); + quote!(::#ident) + } + _ => quote!(::enumset), } - _ => quote!(::enumset), + } + + #[cfg(not(feature = "proc-macro-crate"))] + { + quote!(::enumset) } }, }; -- 2.44.0