From 3e32fc7b048d8bb0ed32ad98a59bf5caef884b2b Mon Sep 17 00:00:00 2001 From: sup39 <dev@sup39.dev> Date: Fri, 12 Apr 2024 12:24:57 +0900 Subject: [PATCH] feat (macro-rs): add macro_rs::export macro Co-authored-by: naskya <m@naskya.net> --- packages/backend-rs/src/lib.rs | 2 +- packages/backend-rs/src/misc/acct.rs | 6 +++--- packages/backend-rs/src/misc/nyaify.rs | 2 +- packages/backend-rs/src/util/id.rs | 4 ++-- packages/backend-rs/src/util/random.rs | 2 +- packages/macro-rs/src/lib.rs | 24 +++++++++++++++++++----- 6 files changed, 27 insertions(+), 13 deletions(-) diff --git a/packages/backend-rs/src/lib.rs b/packages/backend-rs/src/lib.rs index 0d90d642ab..3a8bb4550e 100644 --- a/packages/backend-rs/src/lib.rs +++ b/packages/backend-rs/src/lib.rs @@ -1,4 +1,4 @@ -pub use macro_rs::napi as export; +pub use macro_rs::export; pub mod database; pub mod misc; diff --git a/packages/backend-rs/src/misc/acct.rs b/packages/backend-rs/src/misc/acct.rs index 41cdc10309..3347a58077 100644 --- a/packages/backend-rs/src/misc/acct.rs +++ b/packages/backend-rs/src/misc/acct.rs @@ -1,11 +1,11 @@ #[derive(Debug, PartialEq)] -#[cfg_attr(feature = "napi", crate::export(object, use_nullable = true))] +#[crate::export(object)] pub struct Acct { pub username: String, pub host: Option<String>, } -#[cfg_attr(feature = "napi", crate::export)] +#[crate::export] pub fn string_to_acct(acct: &str) -> Acct { let split: Vec<&str> = if let Some(stripped) = acct.strip_prefix('@') { stripped @@ -25,7 +25,7 @@ pub fn string_to_acct(acct: &str) -> Acct { } } -#[cfg_attr(feature = "napi", crate::export)] +#[crate::export] pub fn acct_to_string(acct: &Acct) -> String { match &acct.host { Some(host) => format!("{}@{}", acct.username, host), diff --git a/packages/backend-rs/src/misc/nyaify.rs b/packages/backend-rs/src/misc/nyaify.rs index 9ce25b8b4a..46539e1fed 100644 --- a/packages/backend-rs/src/misc/nyaify.rs +++ b/packages/backend-rs/src/misc/nyaify.rs @@ -1,7 +1,7 @@ use once_cell::sync::Lazy; use regex::{Captures, Regex}; -#[cfg_attr(feature = "napi", crate::export)] +#[crate::export] pub fn nyaify(text: &str, lang: Option<&str>) -> String { let mut to_return = text.to_owned(); diff --git a/packages/backend-rs/src/util/id.rs b/packages/backend-rs/src/util/id.rs index d840f6f719..20b2f2b74c 100644 --- a/packages/backend-rs/src/util/id.rs +++ b/packages/backend-rs/src/util/id.rs @@ -17,7 +17,7 @@ const TIME_2000: i64 = 946_684_800_000; const TIMESTAMP_LENGTH: u16 = 8; /// Initializes Cuid2 generator. Must be called before any [create_id]. -#[cfg_attr(feature = "napi", crate::export)] +#[crate::export] pub fn init_id_generator(length: u16, fingerprint: &str) { FINGERPRINT.get_or_init(move || format!("{}{}", fingerprint, cuid2::create_id())); GENERATOR.get_or_init(move || { @@ -44,7 +44,7 @@ pub fn create_id(datetime: &NaiveDateTime) -> Result<String, ErrorUninitialized> } } -#[cfg_attr(feature = "napi", crate::export)] +#[crate::export] pub fn get_timestamp(id: &str) -> i64 { let n: Option<u64> = BASE36.decode_var_len(&id[0..8]); match n { diff --git a/packages/backend-rs/src/util/random.rs b/packages/backend-rs/src/util/random.rs index 31befbd978..61edbf11cf 100644 --- a/packages/backend-rs/src/util/random.rs +++ b/packages/backend-rs/src/util/random.rs @@ -9,7 +9,7 @@ pub fn gen_string(length: u16) -> String { .collect() } -#[cfg_attr(feature = "napi", crate::export(js_name = "secureRndstr"))] +#[crate::export(js_name = "secureRndstr")] pub fn native_random_str(length: Option<u16>) -> String { gen_string(length.unwrap_or(32)) } diff --git a/packages/macro-rs/src/lib.rs b/packages/macro-rs/src/lib.rs index 24cf1a5ad9..668d366cb1 100644 --- a/packages/macro-rs/src/lib.rs +++ b/packages/macro-rs/src/lib.rs @@ -2,14 +2,18 @@ use convert_case::{Case, Casing}; use proc_macro2::{TokenStream, TokenTree}; use quote::{quote, ToTokens}; -// FIXME -/// For doctest only #[proc_macro_attribute] -pub fn dummy_macro( - _attr: proc_macro::TokenStream, +pub fn export( + attr: proc_macro::TokenStream, item: proc_macro::TokenStream, ) -> proc_macro::TokenStream { - item + let attr: TokenStream = attr.into(); + let item: TokenStream = item.into(); + + quote! { + #[cfg_attr(feature = "napi", macro_rs::napi(#attr))] + #item + }.into() } /// Creates extra wrapper function for napi. @@ -343,6 +347,16 @@ fn napi_impl(macro_attr: TokenStream, item: TokenStream) -> TokenStream { } } +// FIXME +/// For doctest only +#[proc_macro_attribute] +pub fn dummy_macro( + _attr: proc_macro::TokenStream, + item: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + item +} + #[cfg(test)] mod tests { use proc_macro2::TokenStream;