# On-demand functions using macros

**URL:** https://internals.rust-lang.org/t/on-demand-functions-using-macros/681
**Category:** ideas (deprecated)
**Created:** [October 21, 2014, 5:17am UTC](https://internals.rust-lang.org/t/on-demand-functions-using-macros/681 "2014-10-21T05:17:43Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![s\_panferov](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/s_panferov/32/318_2.png) [@s\_panferov](https://internals.rust-lang.org/u/s_panferov)
#### Post date: [October 21, 2014, 5:17am UTC](https://internals.rust-lang.org/t/on-demand-functions-using-macros/681/1 "2014-10-21T05:17:44Z")

</div>

I started to write some simple ORM for test purposes and i’m very interested in ability to make some dynamic code generation that could replace Ruby’s `method_missing`.

Pseudo-code to illustrate the idea:

```rust
impl UserModel {
	pub fn macro_method (find_by, $($field_name:ident)_and_+) (&self, $($field_value:expr),+) -> SelectQuery {
		self.select_all().where_(
			$(
				self.$field_name().is($field_value),
			)	
		)
	}
}

let query = user_model.find_by_id!(100u);
let query = user_model.find_by_first_name_and_last_name!("Luke", "Skywalker");

```

What do you think about that? I you not interested please close this issue and never mind.

---

<div class="post-metadata">

### Author: ![stebalien](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/stebalien/32/228_2.png) [@stebalien](https://internals.rust-lang.org/u/stebalien)
#### Post date: [October 21, 2014, 6:25am UTC](https://internals.rust-lang.org/t/on-demand-functions-using-macros/681/2 "2014-10-21T06:25:37Z")

</div>

Why not:

1. Builder style (methods generated with by a compiler plugin): `UserModel.where().first_name("Luke").and().last_name("Skywalker")`
2. Macro style: `query!(UserModel where first_name is "Luke" and last_name is "Skywalker")` (basically typesafe SQL).

---

<div class="post-metadata">

### Author: ![system](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/system/32/14092_2.png) [@system](https://internals.rust-lang.org/u/system)
#### Post date: [March 25, 2019, 8:23am UTC](https://internals.rust-lang.org/t/on-demand-functions-using-macros/681/3 "2019-03-25T08:23:01Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
