Derive Macro edgedb_query_derive::SelectQuery
source · [−]#[derive(SelectQuery)]
{
// Attributes available to this derive:
#[meta]
#[result]
#[filter]
#[filters]
#[options]
}
Expand description
SelectQuery creates implementations of following traits for the annotated struct :
- edgedb_query::ToEdgeValue
- edgedb_query::ToEdgeQl
- edgedb_query::ToEdgeScalar
- edgedb_query::models::edge_query::ToEdgeQuery
- ToString
Usage
use edgedb_protocol::value::Value;
use edgedb_protocol::codec::EnumValue;
use edgedb_query::{*, ToEdgeShape, models::{ edge_query::*, query_result::BasicResult}};
use edgedb_query::queries::{select::{OrderDir, OrderOptions, SelectOptions} , filter::Filter};
#[derive(SelectQuery)]
pub struct FindMajorUsersWithOptions {
#[meta(module = "users", table = "User")]
#[result(type = "UserResult")]
__meta__: (),
#[options]
options: SelectOptions<'static>,
#[filter(operator = "GreaterThanOrEqual")]
pub age: i8,
}
#[derive(Default, EdgedbResult)]
pub struct UserResult {
pub id: String,
pub name: String,
}
fn main() {
let q = FindMajorUsersWithOptions {
__meta__ : (),
options: SelectOptions {
table_name: "User",
module: Some("users"),
order_options: Some(OrderOptions {
order_by: "name".to_string(),
order_direction: Some(OrderDir::Desc)
}),
page_options: None
},
age: 18
};
let edge_query : EdgeQuery = q.to_edge_query();
let expected = "select users::User {id,name,age} filter users::User.age >= (select <int16>$age) order by users::User.name desc";
assert_eq!(edge_query.query, expected);
if let Some(Value::Object { shape, fields }) = edge_query.args {
crate::test_utils::check_shape(&shape, vec!["age"]);
assert_eq!(fields, vec![
Some(Value::Int16(q.age as i16))
])
} else {
assert!(false)
}
}