Ver código fonte

Refactor directory structure (#18)

* Use macro rules

* Update directory structure
Fernando Otero 1 ano atrás
pai
commit
3f559be488

+ 13 - 59
Cargo.lock

@@ -3,74 +3,28 @@
 version = 3
 
 [[package]]
-name = "bs58"
-version = "0.5.1"
+name = "five8_const"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4"
+checksum = "72b4f62f0f8ca357f93ae90c8c2dd1041a1f665fde2f889ea9b1787903829015"
 dependencies = [
- "tinyvec",
+ "five8_core",
 ]
 
 [[package]]
-name = "pinocchio"
-version = "0.0.1"
-
-[[package]]
-name = "pinocchio-macro"
-version = "0.0.1"
-dependencies = [
- "bs58",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.86"
+name = "five8_core"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
-dependencies = [
- "unicode-ident",
-]
+checksum = "9b2a72055cd9cffc40c9f75f1e5810c80559e158796cf2202292ce4745889588"
 
 [[package]]
-name = "quote"
-version = "1.0.36"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "syn"
-version = "1.0.109"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
+name = "pinocchio"
+version = "0.0.1"
 
 [[package]]
-name = "tinyvec"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+name = "pinocchio-pubkey"
+version = "0.0.1"
 dependencies = [
- "tinyvec_macros",
+ "five8_const",
+ "pinocchio",
 ]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"

+ 2 - 2
Cargo.toml

@@ -1,6 +1,6 @@
 [workspace]
 resolver = "2"
 members = [
-    "sdk",
-    "macro"
+    "sdk/pinocchio",
+    "sdk/pubkey",
 ]

+ 0 - 14
macro/Cargo.toml

@@ -1,14 +0,0 @@
-[package]
-name = "pinocchio-macro"
-description = "Companion macros for Pinocchio"
-version = "0.0.1"
-edition = "2021"
-
-[lib]
-proc-macro = true
-
-[dependencies]
-bs58 = "0.5.1"
-proc-macro2 = "1.0.46"
-quote = "^1.0"
-syn = { version = "^1.0", features = ["extra-traits", "full"] }

+ 0 - 18
macro/src/lib.rs

@@ -1,18 +0,0 @@
-mod parse;
-use parse::{DeclareId, Pubkey};
-
-use proc_macro::TokenStream;
-use quote::quote;
-use syn::parse_macro_input;
-
-#[proc_macro]
-pub fn pubkey(input: TokenStream) -> TokenStream {
-    let id = parse_macro_input!(input as Pubkey);
-    TokenStream::from(quote! {#id})
-}
-
-#[proc_macro]
-pub fn declare_id(input: TokenStream) -> TokenStream {
-    let id = parse_macro_input!(input as DeclareId);
-    TokenStream::from(quote! {#id})
-}

+ 0 - 42
macro/src/parse/declare_id.rs

@@ -1,42 +0,0 @@
-use quote::{quote, ToTokens};
-use syn::{
-    parse::{Parse, ParseStream},
-    Result,
-};
-
-use super::parse_id;
-
-pub(crate) struct DeclareId(proc_macro2::TokenStream);
-
-impl Parse for DeclareId {
-    fn parse(input: ParseStream) -> Result<Self> {
-        parse_id(input).map(Self)
-    }
-}
-
-impl ToTokens for DeclareId {
-    fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
-        id_to_tokens(&self.0, quote! { ::pinocchio::pubkey::Pubkey }, tokens)
-    }
-}
-
-fn id_to_tokens(
-    id: &proc_macro2::TokenStream,
-    pubkey_type: proc_macro2::TokenStream,
-    tokens: &mut proc_macro2::TokenStream,
-) {
-    tokens.extend(quote! {
-        /// The const program ID.
-        pub const ID: #pubkey_type = #id;
-
-        /// Returns `true` if given pubkey is the program ID.
-        pub fn check_id(id: &#pubkey_type) -> bool {
-            id == &ID
-        }
-
-        /// Returns the program ID.
-        pub const fn id() -> #pubkey_type {
-            ID
-        }
-    });
-}

+ 0 - 41
macro/src/parse/mod.rs

@@ -1,41 +0,0 @@
-mod declare_id;
-mod pubkey;
-
-pub(crate) use declare_id::DeclareId;
-pub(crate) use pubkey::Pubkey;
-
-use proc_macro2::Span;
-use quote::quote;
-use syn::{parse::ParseStream, Expr, LitByte, LitStr, Result};
-
-fn parse_id(input: ParseStream) -> Result<proc_macro2::TokenStream> {
-    let id = if input.peek(syn::LitStr) {
-        let id_literal: LitStr = input.parse()?;
-        parse_pubkey(&id_literal)?
-    } else {
-        let expr: Expr = input.parse()?;
-        quote! { #expr }
-    };
-
-    if !input.is_empty() {
-        let stream: proc_macro2::TokenStream = input.parse()?;
-        return Err(syn::Error::new_spanned(stream, "unexpected token"));
-    }
-    Ok(id)
-}
-
-fn parse_pubkey(id_literal: &LitStr) -> Result<proc_macro2::TokenStream> {
-    let id_vec = bs58::decode(id_literal.value())
-        .into_vec()
-        .map_err(|_| syn::Error::new_spanned(id_literal, "failed to decode base58 string"))?;
-    let id_array = <[u8; 32]>::try_from(<&[u8]>::clone(&&id_vec[..])).map_err(|_| {
-        syn::Error::new_spanned(
-            id_literal,
-            format!("pubkey array is not 32 bytes long: len={}", id_vec.len()),
-        )
-    })?;
-    let bytes = id_array.iter().map(|b| LitByte::new(*b, Span::call_site()));
-    Ok(quote! {
-        [#(#bytes,)*]
-    })
-}

+ 0 - 22
macro/src/parse/pubkey.rs

@@ -1,22 +0,0 @@
-use quote::{quote, ToTokens};
-use syn::{
-    parse::{Parse, ParseStream},
-    Result,
-};
-
-use super::parse_id;
-
-pub(crate) struct Pubkey(proc_macro2::TokenStream);
-
-impl Parse for Pubkey {
-    fn parse(input: ParseStream) -> Result<Self> {
-        parse_id(input).map(Self)
-    }
-}
-
-impl ToTokens for Pubkey {
-    fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
-        let id = &self.0;
-        tokens.extend(quote! {#id})
-    }
-}

+ 0 - 0
sdk/Cargo.toml → sdk/pinocchio/Cargo.toml


+ 0 - 0
sdk/README.md → sdk/pinocchio/README.md


+ 0 - 0
sdk/src/account_info.rs → sdk/pinocchio/src/account_info.rs


+ 0 - 0
sdk/src/entrypoint.rs → sdk/pinocchio/src/entrypoint.rs


+ 0 - 0
sdk/src/instruction.rs → sdk/pinocchio/src/instruction.rs


+ 0 - 0
sdk/src/lib.rs → sdk/pinocchio/src/lib.rs


+ 0 - 0
sdk/src/log.rs → sdk/pinocchio/src/log.rs


+ 0 - 0
sdk/src/program.rs → sdk/pinocchio/src/program.rs


+ 0 - 0
sdk/src/program_error.rs → sdk/pinocchio/src/program_error.rs


+ 0 - 0
sdk/src/pubkey.rs → sdk/pinocchio/src/pubkey.rs


+ 0 - 0
sdk/src/syscalls.rs → sdk/pinocchio/src/syscalls.rs


+ 0 - 0
sdk/src/sysvars/clock.rs → sdk/pinocchio/src/sysvars/clock.rs


+ 0 - 0
sdk/src/sysvars/fees.rs → sdk/pinocchio/src/sysvars/fees.rs


+ 0 - 0
sdk/src/sysvars/mod.rs → sdk/pinocchio/src/sysvars/mod.rs


+ 0 - 0
sdk/src/sysvars/rent.rs → sdk/pinocchio/src/sysvars/rent.rs


+ 9 - 0
sdk/pubkey/Cargo.toml

@@ -0,0 +1,9 @@
+[package]
+name = "pinocchio-pubkey"
+description = "Companion pubkey helpers for Pinocchio"
+version = "0.0.1"
+edition = "2021"
+
+[dependencies]
+five8_const = "0.1.3"
+pinocchio = { version="0.0.1", path="../pinocchio" }

+ 0 - 0
macro/README.md → sdk/pubkey/README.md


+ 34 - 0
sdk/pubkey/src/lib.rs

@@ -0,0 +1,34 @@
+pub use five8_const::decode_32_const;
+use pinocchio::pubkey::Pubkey;
+
+#[macro_export]
+macro_rules! declare_pubkey {
+    ( $id:expr ) => {
+        pinocchio_pubkey::decode($id)
+    };
+}
+
+#[macro_export]
+macro_rules! declare_id {
+    ( $id:expr ) => {
+        #[doc = "The const program ID."]
+        pub const ID: pinocchio::pubkey::Pubkey = pinocchio_pubkey::decode($id);
+
+        #[doc = "Returns `true` if given pubkey is the program ID."]
+        #[inline]
+        pub fn check_id(id: &pinocchio::pubkey::Pubkey) -> bool {
+            id == &ID
+        }
+
+        #[doc = "Returns the program ID."]
+        #[inline]
+        pub const fn id() -> pinocchio::pubkey::Pubkey {
+            ID
+        }
+    };
+}
+
+#[inline(always)]
+pub const fn decode(value: &str) -> Pubkey {
+    decode_32_const(value)
+}