Macro beaver::define [−][src]
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, } }