diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
new file mode 100644
index 0000000..984f7e4
--- /dev/null
+++ b/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+  "git": {
+    "sha1": "68b6baab911f1fdf9d3ab1d3b3ab08b73b28d21a"
+  }
+}
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..c519e1f
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,23 @@
+// This file is generated by cargo2android.py.
+
+rust_proc_macro {
+    name: "libpaste_impl",
+    crate_name: "paste_impl",
+    srcs: ["src/lib.rs"],
+    edition: "2018",
+    rlibs: [
+        "libproc_macro2",
+        "libquote",
+        "libsyn",
+    ],
+    proc_macros: [
+        "libproc_macro_hack",
+    ],
+}
+
+// dependent_library ["feature_list"]
+//   proc-macro-hack-0.5.12
+//   proc-macro2-1.0.9 "default,proc-macro"
+//   quote-1.0.3 "default,proc-macro"
+//   syn-1.0.16 "clone-impls,default,derive,parsing,printing,proc-macro,quote"
+//   unicode-xid-0.2.0 "default"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..91725d4
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,38 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies
+#
+# If you believe there's an error in this file please file an
+# issue against the rust-lang/cargo repository. If you're
+# editing this file be aware that the upstream Cargo.toml
+# will likely look very different (and much more reasonable)
+
+[package]
+edition = "2018"
+name = "paste-impl"
+version = "0.1.8"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+description = "Implementation detail of the `paste` crate"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/dtolnay/paste"
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+
+[lib]
+proc-macro = true
+[dependencies.proc-macro-hack]
+version = "0.5"
+
+[dependencies.proc-macro2]
+version = "1.0"
+
+[dependencies.quote]
+version = "1.0"
+
+[dependencies.syn]
+version = "1.0"
+[badges.travis-ci]
+repository = "dtolnay/paste"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
new file mode 100644
index 0000000..8082791
--- /dev/null
+++ b/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+name = "paste-impl"
+version = "0.1.8"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+edition = "2018"
+license = "MIT OR Apache-2.0"
+description = "Implementation detail of the `paste` crate"
+repository = "https://github.com/dtolnay/paste"
+
+[lib]
+proc-macro = true
+
+[badges]
+travis-ci = { repository = "dtolnay/paste" }
+
+[dependencies]
+proc-macro-hack = "0.5"
+proc-macro2 = "1.0"
+quote = "1.0"
+syn = "1.0"
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
diff --git a/LICENSE b/LICENSE
new file mode 120000
index 0000000..6b579aa
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1 @@
+LICENSE-APACHE
\ No newline at end of file
diff --git a/LICENSE-APACHE b/LICENSE-APACHE
new file mode 100644
index 0000000..16fe87b
--- /dev/null
+++ b/LICENSE-APACHE
@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/LICENSE-MIT b/LICENSE-MIT
new file mode 100644
index 0000000..815d6c0
--- /dev/null
+++ b/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2018
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..c28d4fe
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,17 @@
+name: "paste-impl"
+description:
+    "Implementation detail of the `paste` crate"
+
+third_party {
+  url {
+    type: HOMEPAGE
+    value: "https://crates.io/crates/paste-impl"
+  }
+  url {
+    type: GIT
+    value: "https://github.com/dtolnay/paste"
+  }
+  version: "0.1.8"
+  last_upgrade_date { year: 2020 month: 3 day: 19 }
+  license_type: NOTICE
+}
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/NOTICE b/NOTICE
new file mode 120000
index 0000000..7a694c9
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1 @@
+LICENSE
\ No newline at end of file
diff --git a/src/enum_hack.rs b/src/enum_hack.rs
new file mode 100644
index 0000000..626b265
--- /dev/null
+++ b/src/enum_hack.rs
@@ -0,0 +1,61 @@
+use std::collections::hash_map::DefaultHasher;
+use std::hash::{Hash, Hasher};
+
+use proc_macro2::{Ident, Span, TokenStream, TokenTree};
+use quote::quote;
+use syn::parse::{Parse, ParseStream, Result};
+use syn::{braced, parenthesized, parse_macro_input, Token};
+
+pub fn wrap(output: TokenStream) -> TokenStream {
+    let mut hasher = DefaultHasher::default();
+    output.to_string().hash(&mut hasher);
+    let mangled_name = format!("_paste_{}", hasher.finish());
+    let ident = Ident::new(&mangled_name, Span::call_site());
+
+    quote! {
+        #[derive(paste::EnumHack)]
+        enum #ident {
+            Value = (stringify! {
+                #output
+            }, 0).1,
+        }
+    }
+}
+
+struct EnumHack {
+    token_stream: TokenStream,
+}
+
+impl Parse for EnumHack {
+    fn parse(input: ParseStream) -> Result<Self> {
+        input.parse::<Token![enum]>()?;
+        input.parse::<Ident>()?;
+
+        let braces;
+        braced!(braces in input);
+        braces.parse::<Ident>()?;
+        braces.parse::<Token![=]>()?;
+
+        let parens;
+        parenthesized!(parens in braces);
+        parens.parse::<Ident>()?;
+        parens.parse::<Token![!]>()?;
+
+        let inner;
+        braced!(inner in parens);
+        let token_stream: TokenStream = inner.parse()?;
+
+        parens.parse::<Token![,]>()?;
+        parens.parse::<TokenTree>()?;
+        braces.parse::<Token![.]>()?;
+        braces.parse::<TokenTree>()?;
+        braces.parse::<Token![,]>()?;
+
+        Ok(EnumHack { token_stream })
+    }
+}
+
+pub fn extract(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    let inner = parse_macro_input!(input as EnumHack);
+    proc_macro::TokenStream::from(inner.token_stream)
+}
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..97190d6
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,200 @@
+extern crate proc_macro;
+
+mod enum_hack;
+
+use proc_macro2::{Delimiter, Group, Ident, Punct, Spacing, Span, TokenStream, TokenTree};
+use proc_macro_hack::proc_macro_hack;
+use quote::{quote, ToTokens};
+use std::iter::FromIterator;
+use syn::parse::{Error, Parse, ParseStream, Parser, Result};
+use syn::{parenthesized, parse_macro_input, Lit, LitStr, Token};
+
+#[proc_macro]
+pub fn item(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    let input = parse_macro_input!(input as PasteInput);
+    proc_macro::TokenStream::from(input.expanded)
+}
+
+#[proc_macro]
+pub fn item_with_macros(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    let input = parse_macro_input!(input as PasteInput);
+    proc_macro::TokenStream::from(enum_hack::wrap(input.expanded))
+}
+
+#[proc_macro_hack]
+pub fn expr(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    let input = parse_macro_input!(input as PasteInput);
+    let output = input.expanded;
+    proc_macro::TokenStream::from(quote!({ #output }))
+}
+
+#[doc(hidden)]
+#[proc_macro_derive(EnumHack)]
+pub fn enum_hack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
+    enum_hack::extract(input)
+}
+
+struct PasteInput {
+    expanded: TokenStream,
+}
+
+impl Parse for PasteInput {
+    fn parse(input: ParseStream) -> Result<Self> {
+        let mut expanded = TokenStream::new();
+        while !input.is_empty() {
+            match input.parse()? {
+                TokenTree::Group(group) => {
+                    let delimiter = group.delimiter();
+                    let content = group.stream();
+                    let span = group.span();
+                    if delimiter == Delimiter::Bracket && is_paste_operation(&content) {
+                        let segments = parse_bracket_as_segments.parse2(content)?;
+                        let pasted = paste_segments(span, &segments)?;
+                        pasted.to_tokens(&mut expanded);
+                    } else if delimiter == Delimiter::None && is_single_ident(&content) {
+                        content.to_tokens(&mut expanded);
+                    } else {
+                        let nested = PasteInput::parse.parse2(content)?;
+                        let mut group = Group::new(delimiter, nested.expanded);
+                        group.set_span(span);
+                        group.to_tokens(&mut expanded);
+                    }
+                }
+                other => other.to_tokens(&mut expanded),
+            }
+        }
+        Ok(PasteInput { expanded })
+    }
+}
+
+fn is_paste_operation(input: &TokenStream) -> bool {
+    let input = input.clone();
+    parse_bracket_as_segments.parse2(input).is_ok()
+}
+
+fn is_single_ident(input: &TokenStream) -> bool {
+    let mut has_ident = false;
+    for tt in input.clone() {
+        match tt {
+            TokenTree::Ident(_) if !has_ident => has_ident = true,
+            _ => return false,
+        }
+    }
+    has_ident
+}
+
+enum Segment {
+    String(String),
+    Apostrophe(Span),
+    Env(LitStr),
+    Modifier(Token![:], Ident),
+}
+
+fn parse_bracket_as_segments(input: ParseStream) -> Result<Vec<Segment>> {
+    input.parse::<Token![<]>()?;
+
+    let segments = parse_segments(input)?;
+
+    input.parse::<Token![>]>()?;
+    if !input.is_empty() {
+        return Err(input.error("invalid input"));
+    }
+    Ok(segments)
+}
+
+fn parse_segments(input: ParseStream) -> Result<Vec<Segment>> {
+    let mut segments = Vec::new();
+    while !(input.is_empty() || input.peek(Token![>])) {
+        match input.parse()? {
+            TokenTree::Ident(ident) => {
+                let mut fragment = ident.to_string();
+                if fragment.starts_with("r#") {
+                    fragment = fragment.split_off(2);
+                }
+                if fragment == "env" && input.peek(Token![!]) {
+                    input.parse::<Token![!]>()?;
+                    let arg;
+                    parenthesized!(arg in input);
+                    let var: LitStr = arg.parse()?;
+                    segments.push(Segment::Env(var));
+                } else {
+                    segments.push(Segment::String(fragment));
+                }
+            }
+            TokenTree::Literal(lit) => {
+                let value = match syn::parse_str(&lit.to_string())? {
+                    Lit::Str(string) => string.value().replace('-', "_"),
+                    Lit::Int(_) => lit.to_string(),
+                    _ => return Err(Error::new(lit.span(), "unsupported literal")),
+                };
+                segments.push(Segment::String(value));
+            }
+            TokenTree::Punct(punct) => match punct.as_char() {
+                '_' => segments.push(Segment::String("_".to_string())),
+                '\'' => segments.push(Segment::Apostrophe(punct.span())),
+                ':' => segments.push(Segment::Modifier(Token![:](punct.span()), input.parse()?)),
+                _ => return Err(Error::new(punct.span(), "unexpected punct")),
+            },
+            TokenTree::Group(group) => {
+                if group.delimiter() == Delimiter::None {
+                    let nested = parse_segments.parse2(group.stream())?;
+                    segments.extend(nested);
+                } else {
+                    return Err(Error::new(group.span(), "unexpected token"));
+                }
+            }
+        }
+    }
+    Ok(segments)
+}
+
+fn paste_segments(span: Span, segments: &[Segment]) -> Result<TokenStream> {
+    let mut evaluated = Vec::new();
+    let mut is_lifetime = false;
+
+    for segment in segments {
+        match segment {
+            Segment::String(segment) => {
+                evaluated.push(segment.clone());
+            }
+            Segment::Apostrophe(span) => {
+                if is_lifetime {
+                    return Err(Error::new(*span, "unexpected lifetime"));
+                }
+                is_lifetime = true;
+            }
+            Segment::Env(var) => {
+                let resolved = match std::env::var(var.value()) {
+                    Ok(resolved) => resolved,
+                    Err(_) => {
+                        return Err(Error::new(var.span(), "no such env var"));
+                    }
+                };
+                let resolved = resolved.replace('-', "_");
+                evaluated.push(resolved);
+            }
+            Segment::Modifier(colon, ident) => {
+                let span = quote!(#colon #ident);
+                let last = match evaluated.pop() {
+                    Some(last) => last,
+                    None => return Err(Error::new_spanned(span, "unexpected modifier")),
+                };
+                if ident == "lower" {
+                    evaluated.push(last.to_lowercase());
+                } else {
+                    return Err(Error::new_spanned(span, "unsupported modifier"));
+                }
+            }
+        }
+    }
+
+    let pasted = evaluated.into_iter().collect::<String>();
+    let ident = TokenTree::Ident(Ident::new(&pasted, span));
+    let tokens = if is_lifetime {
+        let apostrophe = TokenTree::Punct(Punct::new('\'', Spacing::Joint));
+        vec![apostrophe, ident]
+    } else {
+        vec![ident]
+    };
+    Ok(TokenStream::from_iter(tokens))
+}
