Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
Alexander Irbis
@alexander-irbis
О, а я раньше и не замечал, что меня rustup update на такую красивую страничку посылает, когда обновить из-за компонентов не может :-)
Nikolay Koshkin
@koshkin-kna
let res = sch_products::products
        .inner_join(infra::schema::variants::dsl::variants)
        .select((infra::schema::products::all_columns, sql("sum(variants.in_stock) as sum_in_stock")))
        .limit(paginator.per_page())
        .offset(paginator.offset())
        .order(sum_in_stock)
        .group_by(sch_products::id)
        .filter(sch_products::name_external.like(&like_prepare))
        .into_boxed();
Может знает кто как в diesel в order запихнуть значение из select (sum_in_stock)?
order не принимает sql так же, как select
Alexander Irbis
@alexander-irbis
Насколько я понял, Expression можно реализовать для своего типа и тогда использовать в order
https://docs.diesel.rs/diesel/expression/trait.Expression.html
https://docs.diesel.rs/src/diesel/expression/functions/date_and_time.rs.html#14-16
Alexander Irbis
@alexander-irbis
Хм, Expression реализован для SqlLiteral (его возвращает функция sql). order, по идее, должен таки его принимать.
Nikolay Koshkin
@koshkin-kna
error[E0282]: type annotations needed
   --> src\api\view\product_view.rs:175:19
    |
175 |         .order_by(sql("sum_in_stock"))
    |                   ^^^ cannot infer type for `ST`
в issue в похожем вопросе предлагают использовать sql_function!
но что-то я в нём так и не смог разобраться, никаких экзамплов толковых не нашёл
Chikirev Sirguy
@cheblin

изучаю сетевые возможности Rust
возникли вопросы
получается длинно. читать вопрос тут https://docs.google.com/document/d/e/2PACX-1vQkty98S2BTSLtkDRCCU0vRmyn5H7-PQfKjIbaDwaGyCBjpnJEHqDtLS7GADxohfVAvW3qE1gspvK6o/pub

СО СРЕДИНЫ

Denis Lisov
@tanriol
@cheblin А ты работаешь со стабильной веткой tokio 0.1 или с альфами 0.2?
Chikirev Sirguy
@cheblin
пытаясь прикрутить BlackBox читаю документацию и вот офигиваю от прочитанного
Denis Lisov
@tanriol
Потому что эта часть между 0.1 и 0.2 существенно меняется.
Chikirev Sirguy
@cheblin
я в основном по исходникам 0.1

[dependencies]
tokio = "0.2"

?

Denis Lisov
@tanriol
На настоящий момент 0.2.0-alpha.6
Chikirev Sirguy
@cheblin
error: failed to select a version for the requirement tokio = "^0.2"
Denis Lisov
@tanriol
Да, потому что 0.2 и эквивалентное ^0.2 на альфы не распространяются, нужно именно tokio = "0.2.0-alpha.6"
Поскольку это будет версия с нативной поддержкой async/await, имеет смысл сразу знакомиться с ней.
Так вот, в ней есть два разных split: один общий, в tokio-io, через лок; а другой конкретно для TcpStream / UnixStream / UdpSocket без всяких локов.
Chikirev Sirguy
@cheblin
вот тут подбросили tokio-rs/tokio#1108
Denis Lisov
@tanriol
Отвечая на второй вопрос: то, что передаётся в функцию, перемещается, но не клонируется. Оно перемещается внутрь Arc, после чего клонируется только Arc (то есть создаётся лишний умный указатель и увеличивается счётчик существующих умных указателей на это)
Chikirev Sirguy
@cheblin

прикрутил последнюю версию, и началось....
у меня main сделан так

#[cfg(not(test))]
fn main()  {
}

при компиляции в test внезапно получаю

rror[E0601]: `main` function not found in crate `black_box_demo`
   --> src\main.rs:1:1
    |
1   | / #![feature(const_transmute)]
2   | | #![feature(const_fn)]
3   | | //=======================================
4   | | #![allow(non_upper_case_globals)]
...   |
112 | |     Ok(())
113 | | }
    | |_^ consider adding a `main` function to `src\main.rs`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0601`.
error: could not compile `black_box-demo`.
warning: build failed, waiting for other jobs to finish...
error: build failed

убрал #[cfg(not(test))] всеравно не видит main

хмм

Alexander Irbis
@alexander-irbis
А как до этого собиралось? Версия токио здесь не должна влиять.
Chikirev Sirguy
@cheblin
перегенерировал проект и всё наладилось... глюк какой-то
Chikirev Sirguy
@cheblin

хотя нет не глюк
и вот что происходит
я беру и вставляю в свой main.rs код отсюда
и каак только вставляю стороку
'#![cfg(feature = "rt-full")]'
вылазит ошибка та, что выше

и ещё вопрос
что за

#[tokio::main]
async fn main(){
}
Denis Lisov
@tanriol
Это при компиляции в test? Я бы скорее просто при компиляции бинарника это ожидал.
Chikirev Sirguy
@cheblin
да при компиляции test
и он бинарник, только стартфункция другая
Denis Lisov
@tanriol
Другая - это про встроенный тест-раннер или это что-то самописное?
Chikirev Sirguy
@cheblin
#[test]
fn it_works() -> ::std::io::Result<()> {
}
Denis Lisov
@tanriol
Это не стартфункция, но разница невелика. Тогда странно.
Chikirev Sirguy
@cheblin
а мой main соответтсвенно
#[cfg(not(test))]
fn main() { println!("run") }
Denis Lisov
@tanriol
Просто потому, что строчка #![cfg(feature = "rt-full")] обозначает "этот модуль/крейт не использовать, если нет активной фичи rt-full", а в твоём проекте же такой фичи нет, надо думать?
Chikirev Sirguy
@cheblin
сменил версию на 0.1 не помогло
error[E0601]: `main` function not found in crate `black_box_demo`
  --> src\main.rs:2:1
   |
2  | / #![feature(const_transmute)]
3  | | #![feature(const_fn)]
4  | | //=======================================
5  | | #![allow(non_upper_case_globals)]
...  |
40 | | #[cfg(not(test))]
41 | | fn main() { println!("run") }
   | |_____________________________^ consider adding a `main` function to `src\main.rs`
ок. тогда просто убираю #![cfg(feature = "rt-full")]?
Denis Lisov
@tanriol
Полагаю, что да.
Кстати, ты же в курсе, что функций с атрибутом #[test] может быть несколько и каждая из них - это независимый тест?
Chikirev Sirguy
@cheblin
нет не знал , но
мне так и не понятно про
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
и как это варить?
понятно оно конфликтует с обычной main
обычное main убирать просто?
Denis Lisov
@tanriol
Ага, этот макрос генерирует небольшой враппер main, который инициализирует рантайм tokio и запускает предоставленный код как фьючу.
Chikirev Sirguy
@cheblin
убрал старый main
ругается на
error[E0432]: unresolved import `bytes`
  --> src\main.rs:34:5
   |
34 | use bytes::Bytes;
   |     ^^^^^ use of undeclared type or module `bytes`

error[E0432]: unresolved import `futures`
  --> src\main.rs:36:5
   |
36 | use futures::{FutureExt, SinkExt, StreamExt};
   |     ^^^^^^^ use of undeclared type or module `futures`

error[E0433]: failed to resolve: use of undeclared type or module `env_logger`
  --> src\main.rs:50:10
   |
50 |     let _ = env_logger::init();
   |             ^^^^^^^^^^ use of undeclared type or module `env_logger`

error[E0433]: failed to resolve: use of undeclared type or module `futures`
  --> src\main.rs:72:8
   |
72 |     match futures::future::try_join(a, b).await {
   |           ^^^^^^^ use of undeclared type or module `futures`

error[E0432]: unresolved import `bytes`
  --> src\main.rs:34:5
   |
34 | use bytes::Bytes;
   |     ^^^^^ use of undeclared type or module `bytes`
мне что это нужно вс ручками импортировать? разве просто указанное tokio в зависимостях
не экспортирует это?
Denis Lisov
@tanriol
Нет, просто указанное tokio это не экспортирует, а надо?
Chikirev Sirguy
@cheblin
ай-ай... обновил ночник называется rust-lang/rust#65335
все попереломали
Denis Lisov
@tanriol
На стейбле жить в этом плане проще :-)
Chikirev Sirguy
@cheblin
починили, а то уже думал откладывается все на неопрадаленное...
Chikirev Sirguy
@cheblin

посмотрел как переделали tokio 0.2

/// Split the UdpSocket into a receive half and a send half. The two parts
    /// can be used to receive and send datagrams concurrently, even from two
    /// different tasks.
    ///
    /// See the module level documenation of [split](super::split) for more
    /// details.
    pub fn split(self) -> (UdpSocketRecvHalf, UdpSocketSendHalf) {
        split(self)
    }

вот теперь обещают full duplex
становится понятно как встраивать свой BlackBox который full duplex с самого начала