Macro beaver::define[][src]

macro_rules! define {
    ($($tokens:tt)*) => { ... };
}

Defines a Factory.

Usage

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Post {
    id: u16,
    title: String,
    approved: bool,
}

beaver::define! {
    PostFactory (Post) {
        id -> |n| n,
        title -> |n| format!("post-{}", n),
        approved -> |_| false,
    }
}

If you want to use a sub factory, you can use build(n) like the following. (Example)

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct File {
    id: u16,
    path: String,
}

#[derive(Serialize, Deserialize)]
struct User {
    id: u16,
    name: String,
    file: File,
}

beaver::define! {
    UserFactory (User) {
        id -> |n| n,
        name -> |n| format!("user-{}", n),
        file -> |n| FileFactory::build(n),
    }
}

beaver::define! {
    FileFactory (File) {
        id -> |n| n,
        path -> |n| format!("path/to/file-{}", n),
    }
}

If you want to use a vector of sub factories, you can use build_list(number, n) like the following. (Example)

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct Post {
    id: u16,
    title: String,
    approved: bool,
    tags: Vec<Tag>,
}

#[derive(Serialize, Deserialize)]
struct Tag {
    id: u16,
    name: String,
}

beaver::define! {
    PostFactory (Post) {
        id -> |n| n,
        title -> |n| format!("post-{}", n),
        approved -> |_| true,
        tags -> |n| TagFactory::build_list(3, n),
    }
}

beaver::define! {
    TagFactory (Tag) {
        id -> |n| beaver::sequence(100, n),
        name -> |n| format!("tag-{}", n),
    }
}

If you want to use factories outside modules, you need to make factories public. (Example)

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
// `Post` needs to be public.
pub struct Post {
    id: u16,
    title: String,
    approved: bool,
}

beaver::define! {
    // `PostFactory` needs to be public.
    pub PostFactory (Post) {
        id -> |n| n,
        title -> |n| format!("post-{}", n),
        approved -> |_| false,
    }
}