entity_async_graphql/filter/
mod.rs1use async_graphql::InputObject;
2use entity::{Filter, Predicate, Query};
3
4mod float;
5pub use float::*;
6
7mod primitive;
8pub use primitive::*;
9
10#[derive(Clone, InputObject)]
12#[graphql(rename_fields = "snake_case")]
13pub struct GqlEntFilter {
14 id: Option<GqlPredicate_Id>,
16
17 #[graphql(name = "type")]
19 r#type: Option<GqlPredicate_String>,
20
21 created: Option<GqlPredicate_u64>,
23
24 last_updated: Option<GqlPredicate_u64>,
26
27 fields: Option<Vec<GqlEntFieldFilter>>,
29
30 edges: Option<Vec<GqlEntEdgeFilter>>,
32}
33
34impl From<GqlEntFilter> for Query {
35 fn from(x: GqlEntFilter) -> Self {
45 let mut query = Query::default();
46
47 if let Some(pred) = x.id {
48 query.add_filter(Filter::where_id(Predicate::from(pred)));
49 }
50
51 if let Some(pred) = x.r#type {
52 query.add_filter(Filter::where_type(Predicate::from(pred)));
53 }
54
55 if let Some(pred) = x.created {
56 query.add_filter(Filter::where_created(Predicate::from(pred)));
57 }
58
59 if let Some(pred) = x.last_updated {
60 query.add_filter(Filter::where_last_updated(Predicate::from(pred)));
61 }
62
63 if let Some(gql_filters) = x.fields {
64 for f in gql_filters {
65 query.add_filter(Filter::where_field(f.name, f.predicate));
66 }
67 }
68
69 if let Some(gql_filters) = x.edges {
70 for f in gql_filters {
71 let edge_query = Query::from(f.filter.as_ref().clone());
72 for edge_filter in edge_query {
73 query.add_filter(Filter::where_edge(&f.name, edge_filter));
74 }
75 }
76 }
77
78 query
79 }
80}
81
82#[derive(Clone, InputObject)]
83#[graphql(rename_fields = "snake_case")]
84pub struct GqlEntFieldFilter {
85 name: String,
86 predicate: GqlPredicate_Value,
87}
88
89#[derive(Clone, InputObject)]
90#[graphql(rename_fields = "snake_case")]
91pub struct GqlEntEdgeFilter {
92 name: String,
93 filter: Box<GqlEntFilter>,
94}