Skip to content

Commit

Permalink
Merge branch 'feat/gix-momo'
Browse files Browse the repository at this point in the history
  • Loading branch information
Byron committed Sep 7, 2023
2 parents f658fcc + d76efdd commit a1ed6a1
Show file tree
Hide file tree
Showing 32 changed files with 774 additions and 5 deletions.
41 changes: 41 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ members = [
"gix-packetline",
"gix-packetline-blocking",
"gix-mailmap",
"gix-macros",
"gix-note",
"gix-negotiate",
"gix-fetchhead",
Expand Down
25 changes: 25 additions & 0 deletions gix-macros/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[package]
name = "gix-macros"
version = "0.0.0"
edition = "2021"
description = "Proc-macro utilities for gix"
authors = [
"Jiahao XU <Jiahao_XU@outlook.com>",
"Andre Bogus <bogusandre@gmail.com>",
"Sebastian Thiel <sebastian.thiel@icloud.com>",
]
repository = "https://github.com/Byron/gitoxide"
license = "MIT OR Apache-2.0"
include = ["src/**/*", "LICENSE-*", "CHANGELOG.md"]
rust-version = "1.65"

[lib]
proc_macro = true

[dependencies]
syn = { version = "2.0", features = ["full", "fold"] }
quote = "1.0"
proc-macro2 = "1.0"

[dev-dependencies]
trybuild = "1.0"
1 change: 1 addition & 0 deletions gix-macros/LICENSE-APACHE
1 change: 1 addition & 0 deletions gix-macros/LICENSE-MIT
25 changes: 25 additions & 0 deletions gix-macros/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//! A crate of useful macros used in `gix` primarily.
//!
//! Note that within `gix-*` crates, monomorphization should never be used for convenience, but only for performance
//! reasons. And in the latter case, manual denomophization should be considered if the trait in questions isn't called
//! often enough or measurements indicate that `&dyn Trait` is increasing the runtime. Thus, `gix-*` crates should probably
//! by default prefer using `&dyn` unless measurements indicate otherwise.
use proc_macro::TokenStream;

/// When applied to functions or methods, it will turn it into a wrapper that will immediately call
/// a de-monomorphized implementation (i.e. one that uses `&dyn Trait`).
///
/// That way, the landing-pads for convenience will be as small as possible which then delegate to a single
/// function or method for implementation.
///
/// The parameters using the following traits can be de-monomorphized:
///
/// * `Into`
/// * `AsRef`
/// * `AsMut`
#[proc_macro_attribute]
pub fn momo(_attrs: TokenStream, input: TokenStream) -> TokenStream {
momo::inner(input.into()).into()
}

mod momo;

0 comments on commit a1ed6a1

Please sign in to comment.