Size: a a a

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

2020 March 27

В

Вафель in Rust — русскоговорящее сообществo
; вместо , поставь
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
то есть ему не нравится запятая после T в [T, MAP_SIZE]
источник

В

Вафель in Rust — русскоговорящее сообществo
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
аа
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
хотелось бы просто инициализировать этот массив как-то
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
а с дефолтом я бы мог писать Board<bool>::default()
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
наверное
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
а с дефолтом я бы мог писать Board<bool>::default()
Ты и так можешь, без баунда
источник

В

Вафель in Rust — русскоговорящее сообществo
Точно так-же как ты можешь написать <[bool; 10]>::default()
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
Вафель
Ты и так можешь, без баунда
а если тип в массиве будет без дефолта?
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
а если тип в массиве будет без дефолта?
Тогда не можешь :)
источник

В

Вафель in Rust — русскоговорящее сообществo
Если тебе надо это в дженерик функции знать, то просто добавляешь баунд туда:

fn test<T>() -> Board<T>
where
   T: Default,
{
   <_>::default()
}
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
окей, спасибо, так даже правильней думаю будет
источник

В

Вафель in Rust — русскоговорящее сообществo
Ну и вообще, в расте принято делать баунды там где они применяются. Т.е. например та же HashMap структура не требует чтобы ключ был Hash + Eq, этого требуют только функции которые с ней работают (и не все) @aangairbender
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
я не могу реализовать Display для вектора своих типов?
impl fmt::Display for Vec<Action> { ... }
источник

DB

Dmitrii Balakin in Rust — русскоговорящее сообществo
Всем привет, помогите новичку.
Есть сервис на gotham, нужно прокинуть gateway в handler
Gateway для mongo предсталяет собой структуру
 :::rust
 pub struct ImageGatewayMongo {
     pool: Client,
     database_name: String,
     collection_name: String,
 }
Client - это Arc<T>

Handler принимает trait
 :::rust
 pub struct PostImageHandler<'a, T: ImageGateway + Sync> {
       gateway: &'a T,
 }

 impl<'a, T: ImageGateway + Sync> PostImageHandler<'a, T> {
         pub fn new(gateway: &'a T) -> Self {
             PostImageHandler { gateway }
         }
       }

Вот создание gateway в main
 :::rust
 let gateway = ImageGatewayMongo::new(mongo_uri, mongo_db, mongo_coll);
     match &gateway {
       Ok(image_gateway) => start_server(get_addr(), image_gateway),
       Err(_e) => {
           error!(
               "ImageGateway cannot connect to {}. Error: {}",
               mongo_uri,
               _e.description()
           );
           process::exit(1);
       }
   }

Проблема в том что ImageGatewayMongo не реализует Copy, и как поступить с RefUnwindSafe

error[E0277]: the trait bound handlers::PostImageHandler<'_, T>: std::marker::Copy is not satisfied
 --> src/main.rs:60:21
  |
60 |                 .to(PostImageHandler::new(gateway));
  |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait std::marker::Copy is not implemented for handlers::PostImageHandler<'_, T>

error[E0277]: the type T may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
 --> src/main.rs:60:21
  |
39 | fn router<T: ImageGateway + Sync>(gateway: &T) -> Router {
  |           -- help: consider further restricting this bound: T: std::panic::RefUnwindSafe +
...
60 |                 .to(PostImageHandler::new(gateway));
  |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ T may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
  |
  = help: within handlers::PostImageHandler<'_, T>, the trait std::panic::RefUnwindSafe is not implemented for T
  = note: required because it appears within the type &T
  = note: required because it appears within the type handlers::PostImageHandler<'_, T>

Спасибо
источник

🦉⁣

🦉 ⁣ in Rust — русскоговорящее сообществo
Dmitrii Balakin
Всем привет, помогите новичку.
Есть сервис на gotham, нужно прокинуть gateway в handler
Gateway для mongo предсталяет собой структуру
 :::rust
 pub struct ImageGatewayMongo {
     pool: Client,
     database_name: String,
     collection_name: String,
 }
Client - это Arc<T>

Handler принимает trait
 :::rust
 pub struct PostImageHandler<'a, T: ImageGateway + Sync> {
       gateway: &'a T,
 }

 impl<'a, T: ImageGateway + Sync> PostImageHandler<'a, T> {
         pub fn new(gateway: &'a T) -> Self {
             PostImageHandler { gateway }
         }
       }

Вот создание gateway в main
 :::rust
 let gateway = ImageGatewayMongo::new(mongo_uri, mongo_db, mongo_coll);
     match &gateway {
       Ok(image_gateway) => start_server(get_addr(), image_gateway),
       Err(_e) => {
           error!(
               "ImageGateway cannot connect to {}. Error: {}",
               mongo_uri,
               _e.description()
           );
           process::exit(1);
       }
   }

Проблема в том что ImageGatewayMongo не реализует Copy, и как поступить с RefUnwindSafe

error[E0277]: the trait bound handlers::PostImageHandler<'_, T>: std::marker::Copy is not satisfied
 --> src/main.rs:60:21
  |
60 |                 .to(PostImageHandler::new(gateway));
  |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait std::marker::Copy is not implemented for handlers::PostImageHandler<'_, T>

error[E0277]: the type T may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
 --> src/main.rs:60:21
  |
39 | fn router<T: ImageGateway + Sync>(gateway: &T) -> Router {
  |           -- help: consider further restricting this bound: T: std::panic::RefUnwindSafe +
...
60 |                 .to(PostImageHandler::new(gateway));
  |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ T may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary
  |
  = help: within handlers::PostImageHandler<'_, T>, the trait std::panic::RefUnwindSafe is not implemented for T
  = note: required because it appears within the type &T
  = note: required because it appears within the type handlers::PostImageHandler<'_, T>

Спасибо
для новичковых вопросов есть @rust_beginners_ru
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
я не могу реализовать Display для вектора своих типов?
impl fmt::Display for Vec<Action> { ... }
Нет, не можешь
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
Вафель
Нет, не можешь
в таком случае нужно свою коллекцию делать? (стракт с полем Vec)
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
потому что type alias не помог
источник