In this section,
we'll be using another example to demonstrate
more of what derive-deftly
can do.
We'll be building a Constructor
template
to define a new()
function for a struct,
without having to write out all of its arguments.
Let's start with the following (struct-only) template:
#![allow(unused)]
fn main() {
use derive_deftly::define_derive_deftly;
define_derive_deftly! {
Constructor:
impl<$tgens> $ttype where $twheres {
pub fn new( $( $fname: $ftype , ) ) -> Self {
Self {
$( $fname , )
}
}
}
}
}
When you apply the above template to a type like this:
#![allow(unused)]
fn main() {
use derive_deftly::define_derive_deftly;
define_derive_deftly! {
Constructor:
impl<$tgens> $ttype where $twheres {
pub fn new( $( $fname: $ftype , ) ) -> Self {
Self {
$( $fname , )
}
}
}
}
use derive_deftly::Deftly;
#[derive(Deftly)]
#[derive_deftly(Constructor)]
struct Ex<A> {
a: f64,
b: A,
c: String
}
}
You'll get a constructor like this:
#![allow(unused)]
fn main() {
struct Ex<A> { a: f64, b: A, c: String }
impl<A> Ex<A> {
pub fn new( a: f64, b: A, c: String ) -> Self {
Self { a, b, c }
}
}
}
So far, there aren't any new techniques at work here.
We'll add some more down below.