Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# This workflow checks each crate builds and runs, and for lints.
name: Check

# Runs this workflow
on:
# On all pull requests, regardless of target branch
pull_request:
# On PRs in the merge queue
merge_group:
# After merges to main
push:
branches:
- main
# When a developer asks for a manual workflow run
workflow_dispatch:

jobs:
build-rust:
name: 1. Build Rust crates
runs-on: ubuntu-latest
# Actions are pinned to a commit to prevent supply-chain attacks
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
# Use the same components in every step for caching
components: cargo,clippy,rustfmt
- name: Build each Rust crate
run: cargo build --workspace --all-targets --all-features

test-rust:
name: 2. Test Rust crates
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
components: cargo,clippy,rustfmt
- name: Test each Rust crate
run: cargo test --workspace --all-targets --all-features

run:
name: 3. Run default Rust crate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
components: cargo,clippy,rustfmt
- name: Run default Rust crate
run: # cargo run --all-features --bin-name TODO

clippy-rust:
name: 4. Clippy lints on Rust crates
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
components: cargo,clippy,rustfmt
- name: Run clippy on Rust crates
run: cargo clippy --workspace --all-targets --all-features -- --deny warnings

doc-rust:
name: 5. Doc lints on Rust crates
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
components: cargo,clippy,rustfmt
- name: Run doc checks on Rust crates
run: cargo doc --workspace --all-features

fmt-rust:
name: 6. Code format on Rust crates
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions-rust-lang/setup-rust-toolchain@166cdcfd11aee3cb47222f9ddb555ce30ddb9659 # v1.17.0
with:
toolchain: nightly
components: cargo,clippy,rustfmt
- name: Run rustfmt checks on crates
run: cargo fmt --all -- --check

all:
name: All checks
# Always run this job, even if earlier steps were skipped (or failed):
# <https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks>
if: ${{ always() }}
runs-on: ubuntu-latest
needs:
- build-rust
- test-rust
- run
- clippy-rust
- doc-rust
- fmt-rust
steps:
- name: Fail if any other job failed
# Every job status needs to be checked here, because `always()` stops failures from propagating automatically
run: |
echo "Checking other jobs..."
[[ "${{ needs.build-rust.result }}" == "success" ]] || exit 1
[[ "${{ needs.test-rust.result }}" == "success" ]] || exit 1
[[ "${{ needs.run.result }}" == "success" ]] || exit 1
[[ "${{ needs.clippy-rust.result }}" == "success" ]] || exit 1
[[ "${{ needs.doc-rust.result }}" == "success" ]] || exit 1
[[ "${{ needs.fmt-rust.result }}" == "success" ]] || exit 1
16 changes: 16 additions & 0 deletions Cargo.lock

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

30 changes: 30 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
[workspace]
resolver = "3"
members = [
"splat-overload",
]
default-members = [
"splat-overload",
]

[workspace.package]
version = "0.0.0"
authors = [
"teor <teor@riseup.net",
]
edition = "2024"
homepage = "https://rust-lang.github.io/rust-project-goals/2026/overloading-for-ffi.html"
keywords = [
"overload",
"C++",
"interop",
]
license = "MIT OR APACHE-2.0"
readme = "README.md"
repository = "https://github.com/rustfoundation/overloading-macros"
# Requires #[splat] which was introduced just before 1.99 branched
rust-version = "1.99"

[workspace.dependencies]
# Delete this package and replace it with the actual dependencies
example = "1.1.0"
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Rust Function Overloading Macros

This repository contains macros and other code for function overloading in Rust.
This repository contains *experimental* macros and other code for function overloading in Rust.

Some of this code requires a recent nightly Rust compiler.

## Quick Setup

```sh
rustup update nightly
cd overloading-macros
rustup override set nightly
cargo build
```
16 changes: 16 additions & 0 deletions splat-overload/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Modify the workspace Cargo.toml instead of this file (if possible)
[package]
name = "splat-overload"
version.workspace = true
authors.workspace = true
edition.workspace = true
homepage.workspace = true
keywords.workspace = true
license.workspace = true
readme.workspace = true
repository.workspace = true
rust-version.workspace = true

[dependencies]
# Delete this package and replace it with the actual dependencies
example.workspace = true
1 change: 1 addition & 0 deletions splat-overload/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//! Delete this comment and add the actual code here