Size: a a a

Rust — русскоговорящее сообществo

2020 September 29

KR

Kai Ren in Rust — русскоговорящее сообществo
Nick Linker
#вопрос Коллеги, кто знаком с juniper, два вопроса:
Вопрос первый.
#[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 тип.
источник

f

faramo_zayw in Rust — русскоговорящее сообществo
Кстати, а кто-то пробовал вот эту либу для GraphQL? Интересно удобство в сравнение с juniper 👀

https://lib.rs/crates/async-graphql
источник

NL

Nick Linker in Rust — русскоговорящее сообществo
Kai Ren
Пока всё плохо.

1) GraphQLObject пока не умеют быть обощенными на уровне Rust. Почему? Потому что при построении GraphQL-схемы (та самая что через интроспекцию дёргается) информация о типах GraphQL выводится из типов Rust. Если у тебя обощенный object, то параметризуя его разными типами ты претендуешь на то, что разные Rust типы будут регистрировать в схеме один и тот же GraphQL тип. Это пока не очень работает на уровне либы. Я кое-какие подвижки в этом плане сделал в рамках union'ов и interface'ов, но это всё очень далеко от того "как надо" и "как хорошо".
Просто сразу прими тот факт, что object'ами могут быть конкретные уточненный полностью типы, и никак иначе.

2) Подобный дерайв не работает, потому что, как я вчера и упоминал, хэш-мапов нет в спеке GraphQL. Соответвенно HashMap ничего не имплементит, а значит и не может быть дерайвнуто.
Тебе в этом случае нужно переключиться на #[graphql_object] макрос и возвращать через computed field что-то, что реализует GraphQL тип.
Спасибо, Kai!
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
faramo_zayw
Кстати, а кто-то пробовал вот эту либу для GraphQL? Интересно удобство в сравнение с juniper 👀

https://lib.rs/crates/async-graphql
У меня с неё горело одно время. Автор слямзил juniper и переработал частично под своё понимание и умение. Там до сих порм, по моему, лежат некоторые фикстуры и валидационные тесты почти 1-в-1 с juniper.

Многие вещи сильно упрощены. Перфоманс за счёт full async вроде хуже.

Ну и я перестал изучать исходники и копаться в этом проекте, когда в недрах наткнулся на трансмьют в 'static лайфтайм, по которому потом весь код выводится.
В juniper везде честные лайфтаймы торчат, а тут автор видимо решил упростить себе жизнь таким образом.
источник

NL

Nick Linker in Rust — русскоговорящее сообществo
Kai Ren
У меня с неё горело одно время. Автор слямзил juniper и переработал частично под своё понимание и умение. Там до сих порм, по моему, лежат некоторые фикстуры и валидационные тесты почти 1-в-1 с juniper.

Многие вещи сильно упрощены. Перфоманс за счёт full async вроде хуже.

Ну и я перестал изучать исходники и копаться в этом проекте, когда в недрах наткнулся на трансмьют в 'static лайфтайм, по которому потом весь код выводится.
В juniper везде честные лайфтаймы торчат, а тут автор видимо решил упростить себе жизнь таким образом.
А вот ещё: serde_json::Value можно замапить только на String в GraphQL, или возможен более структурный мэппинг?
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
Nick Linker
А вот ещё: serde_json::Value можно замапить только на String в GraphQL, или возможен более структурный мэппинг?
In limbo state: https://github.com/graphql-rust/juniper/pull/325

А что у тебя там гоняется? Мы привыкли всё в типы заганять.
источник

NL

Nick Linker in Rust — русскоговорящее сообществo
Kai Ren
In limbo state: https://github.com/graphql-rust/juniper/pull/325

А что у тебя там гоняется? Мы привыкли всё в типы заганять.
Да, есть такое, но именно в одном месте у меня поле типа
HashMap<String, serde_json::Value>, и это максимум, который удаётся достичь, ибо структуру диктует внешняя система.
источник

NL

Nick Linker in Rust — русскоговорящее сообществo
Kai Ren
In limbo state: https://github.com/graphql-rust/juniper/pull/325

А что у тебя там гоняется? Мы привыкли всё в типы заганять.
Поставил палец 👍
источник

DP

Daniel Podolsky in Rust — русскоговорящее сообществo
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Daniel Podolsky
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
Совершенству нет предела?
источник

tr

tony radonezhsky in Rust — русскоговорящее сообществo
Daniel Podolsky
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
teloxide как иконка
источник

tr

tony radonezhsky in Rust — русскоговорящее сообществo
распечатать код на принтере и повесить возле постельки
источник

DP

Daniel Podolsky in Rust — русскоговорящее сообществo
tony radonezhsky
распечатать код на принтере и повесить возле постельки
Мама наругает
источник

Э

Эрик in Rust — русскоговорящее сообществo
tony radonezhsky
teloxide как иконка
Это же мем, нет?
источник

tr

tony radonezhsky in Rust — русскоговорящее сообществo
Daniel Podolsky
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
сходите в RustBeginners, там есть примеры хорошего стиля программирования на раст
источник

V

Vetro in Rust — русскоговорящее сообществo
Daniel Podolsky
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
Hyper,
Tokio,
TikV,
Serde

из тех что сразу в глаза бросаются
источник

DP

Daniel Podolsky in Rust — русскоговорящее сообществo
Спасибо!
источник

KR

Kai Ren in Rust — русскоговорящее сообществo
rigrep можно
источник

NL

Nick Linker in Rust — русскоговорящее сообществo
Daniel Podolsky
Коллеги, а какой проект у нас икона стиля? Что мне почитать, чтобы понять, как надо писать на расте?
Я бы ориентировался на код этих молодцев
https://github.com/dtolnay
https://github.com/carllerche
https://github.com/petrochenkov
https://github.com/matklad
и топ 16 контрибьюторов в rust-lang
источник

Э

Эрик in Rust — русскоговорящее сообществo
Kai Ren
rigrep можно
Кстати да, консольные штуки на расте хорошо написаны обычно.
источник