1use boulder::{BuildableWithPersianRug, GeneratableWithPersianRug};
2use boulder::{Inc, Pattern, Some as GSome};
3use django_query::{
4 filtering::FilterableWithPersianRug, row::IntoRowWithPersianRug,
5 sorting::SortableWithPersianRug,
6};
7use persian_rug::{contextual, Context, Proxy};
8
9#[derive(
12 Clone,
13 Debug,
14 FilterableWithPersianRug,
15 SortableWithPersianRug,
16 IntoRowWithPersianRug,
17 BuildableWithPersianRug,
18 GeneratableWithPersianRug,
19)]
20#[django(persian_rug(context=C, access(User<C>, Group<C>)))]
21#[boulder(persian_rug(context=C, access(User<C>, Group<C>)))]
22#[contextual(C)]
23pub struct User<C: Context + 'static> {
24 #[boulder(generator=Inc(0))]
25 #[django(sort)]
26 pub id: i64,
27 #[boulder(buildable_with_persian_rug, generatable_with_persian_rug)]
28 #[django(traverse, foreign_key = "id")]
29 pub group: Option<Proxy<Group<C>>>,
30 #[boulder(default="test-username",
31 generator=Pattern!("test-user-{}", Inc(1)))]
32 #[django(op(in, contains, icontains, startswith, endswith))]
33 pub username: String,
34 #[boulder(default=Some("test@test.com".to_string()),
35 generator=GSome(Pattern!("test-user-{}@example.com", Inc(1))))]
36 #[django(op(in, contains, icontains, startswith, endswith))]
37 pub email: Option<String>,
38}
39
40#[derive(
43 Clone,
44 Debug,
45 FilterableWithPersianRug,
46 SortableWithPersianRug,
47 IntoRowWithPersianRug,
48 BuildableWithPersianRug,
49 GeneratableWithPersianRug,
50)]
51#[django(persian_rug(context=C, access(Group<C>)))]
52#[boulder(persian_rug(context=C, access(Group<C>)))]
53#[contextual(C)]
54pub struct Group<C: Context + 'static> {
55 #[django(exclude)]
56 _marker: core::marker::PhantomData<C>,
57 #[boulder(generator=Inc(0))]
58 #[django(sort)]
59 pub id: i64,
60 #[boulder(default="test-group",
61 generator=Pattern!("test-group-{}", Inc(1)))]
62 #[django(op(in, contains, icontains, startswith, endswith))]
63 pub name: String,
64}