KR
Вопрос первый.
#[derive(juniper::GraphQLObject)]
struct Test<T> { t: T }
не работает. Какие есть пути для того, чтобы такие объекты можно было толкать в Query/Mutations? Нужно потребовать
juniper::ScalarValue для T? А если это необязательно скаляр?Вопрос второй:
#[derive(juniper::GraphQLObject)]
struct Test {
t: HashMap<String, serde_json::Value>
}
так тоже не работает, для структуры не может вывестись вот тот трейт. Что нужно сделать? (в примерах juniper что-то не нашёл)
По-видимому, тебе снова вопрос, @tyranron😉
1)
GraphQLObject пока не умеют быть обощенными на уровне Rust. Почему? Потому что при построении GraphQL-схемы (та самая что через интроспекцию дёргается) информация о типах GraphQL выводится из типов Rust. Если у тебя обощенный object, то параметризуя его разными типами ты претендуешь на то, что разные Rust типы будут регистрировать в схеме один и тот же GraphQL тип. Это пока не очень работает на уровне либы. Я кое-какие подвижки в этом плане сделал в рамках union'ов и interface'ов, но это всё очень далеко от того "как надо" и "как хорошо".Просто сразу прими тот факт, что object'ами могут быть конкретные уточненный полностью типы, и никак иначе.
2) Подобный дерайв не работает, потому что, как я вчера и упоминал, хэш-мапов нет в спеке GraphQL. Соответвенно
HashMap ничего не имплементит, а значит и не может быть дерайвнуто.Тебе в этом случае нужно переключиться на
#[graphql_object] макрос и возвращать через computed field что-то, что реализует GraphQL тип.


