Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Nikolay Koshkin
    @koshkin-kna
    примерная структура ошибок
    enum UserErr {
        PasswordLenMinErr
    }
    
    enum UserDomainServiceErr {
        UniqueUsernameErr
    }
    
    enum UserServiceErr {
        UserDomainServiceErr(UserDomainServiceErr),
        UserErr(UserErr),
        RepoErr(RepErr),
    }
    Denis Lisov
    @tanriol
    По-моему, для такой структуры эти From может вывести, например, derive_more.
    Psilon
    @Pzixel
    может
    Alexander Irbis
    @alexander-irbis
    Да, derive_more - мастхев™ против всего этого бойлерплейта.
    Заодно он позволяет ещё красиво объявить Display (там сразу в README пример).
    Nikolay Koshkin
    @koshkin-kna
    спасибо)
    Nikolay Koshkin
    @koshkin-kna
    Вопрос возник по поводу derive_more
    у меня некоторые Enum лежат в разных крейтах
    и derive(From) не работает, если источник из другого крейта
    failed to resolve: could not find `convert` in `core`
    Это можно как-то обойти? Или в таких случаях уже в ручную From реализовывать?
    Psilon
    @Pzixel
    без примеров кода сказать ничего нельзя
    Nikolay Koshkin
    @koshkin-kna
    Есть ошибка в дочернем крейте core
    #[derive(From, Display, Debug)]
    pub enum UserCRUDServiceErr {
        #[display(fmt = "Ошибка валидации User")]
        ValidationUserErr(Vec<UserErr>),
        RepoErr(RepoErr),
        #[display(fmt = "Не получилоь создать hash для password: {}", _0)]
        CreateHashPasswordErr(BcryptError),
    }
    А в родительском крейте я делаю так
    #[derive(Debug, From)]
    pub enum ApiViewErr2{
        UserCRUDServiceErr(UserCRUDServiceErr)
    }
    error[E0433]: failed to resolve: could not find `convert` in `core`
     --> src\api\err_view2.rs:7:17
      |
    7 | #[derive(Debug, From)]
      |                 ^^^^ could not find `convert` in `core`
    
    error: aborting due to previous error
    когда переношу ApiViewErr2 в crate core - всё работает
    Denis Lisov
    @tanriol
    Потому что нефиг делать свой дочерний крейт core - он прячет стандартный крейт core, и некоторые вещи, написанные с расчётом на no_std, могут отвалиться.
    Nikolay Koshkin
    @koshkin-kna
    типа названия крейта надо поменять?
    не знал, что это имя таким образом занято)
    Denis Lisov
    @tanriol
    Ага. У тебя derive генерирует impl ::core::convert::From в расчёте на стандартный крейт core.
    Nikolay Koshkin
    @koshkin-kna
    Спасибо, я уж подумал что derive_more не работает между крейтами
    Mihail Iosilevich
    @yosik_gitlab
    Созрел небольшой вопрос по поводу плагинов для вима. Поддерживает ли rust.vim нормальное дополннение синтаксиса? А если да то зачем нужен vim-racer?
    Denis Lisov
    @tanriol
    А что такое "нормальное" дополнение синтаксиса?
    Mihail Iosilevich
    @yosik_gitlab
    image.png
    Psilon
    @Pzixel
    рлс хреново работает имхо. Поэтому ставишь идею и пользуешься
    ну или ставишь вим и страдаешь) тут уж как захочешь
    Denis Lisov
    @tanriol
    Да ладно, и без идеи жизнь есть :-) хотя кому без дополнения жизни нет, тем, конечно, хуже.
    Mihail Iosilevich
    @yosik_gitlab
    @Pzixel стоит clion, но жрет много памяти и запускается долго, и если надо что-то быстро отредактировать, то пользуюсь вимом
    Psilon
    @Pzixel
    ну если надо быстро отредактировать то не работает дополнение, очевидно
    он же не просто так долго грузится
    а для того чтобы все эти дополнения работали
    Alexander Irbis
    @alexander-irbis
    @yosik_gitlab кстати, примеры кода, где тормозит, если это опенсорс, было бы неплохо сообщать авторам плагина для Идеи - это в перспективе поможет улучшить ситуацию, а может даже баг прямо сейчас пофиксится.
    Сухарик
    @suhr

    рлс хреново работает имхо. Поэтому ставишь rust-analyzer

    Fixed.

    Можно даже одновременно с rls использовать.
    Psilon
    @Pzixel
    аналайзер вроде сырой еще
    по крайней мере сомневаюсь что до идеи дотягивает
    через годик мб
    хотя тестить кому-то надо)..
    Сухарик
    @suhr
    Сырой, но юзабельный же.
    Serhii Plyhun
    @snuk182
    и только я здесь остался на старом эклипсе)
    Nikolay Koshkin
    @koshkin-kna
    Может кто попроще объяснить чем будет отличаться Rc<ReffCell> от просто Rc<>? а то всё читаю но чуть понять не могу
    у менять в коде есть диспатчер
    pub dispatcher: Rc<Dispatcher<Event>>
    ...
    Rc::get_mut(&mut self.dispatcher).unwrap().dispatch_event(&Event::ProductChangedEvent(ProductChangedEvent {id: product_id}));
    и пока не очень красиво выходит, вот думаю, нужен ли тут ReffCell
    склоняюсь к тому, что RefCell нужен, так как это как минимум избавляет от &mut self структуры, владеющим диспатчером
    Serhii Plyhun
    @snuk182
    разное назначение.
    Rc -> reference counting. Можно содержать несколько ссылок на одно и то же значение одного и того же уровня доступа (mut или const)
    RefCell - определение уровня доступа в рантайме. по сути мьютекс, но однопоточный
    обычно одно без другого не используют, так как смысла мало
    Nikolay Koshkin
    @koshkin-kna
    плохо всё равно понял, у Rc же есть get_mut or make_mut
    в чём будет разница если делать borrow_mut?
    Denis Lisov
    @tanriol
    Посмотри внимательно документацию get_mut и make_mut - это штуки для специфических случаев, обычно они не подходят.
    Pavel Babyak
    @QuarkDoe

    Что-то туплю.
    Как инициализировать структуру с массивом внутри?

    struct T{
        uint32: [u32;64],
    }
    
    fn main() {
        let t: T = { uint32 : [ 0u32;64 ] };
    }

    Выдаёт ошибку.

    error: expected type, found `0u32`
     --> src/lib.rs:6:29
      |
    6 |     let t: T = { uint32 : [ 0u32;64 ] };
      |                         -   ^^^^ expected type
      |                         |
      |                         tried to parse a type due to this
    
    error: aborting due to previous error
    Пардон, вопрос снимается. Конечно же T{ uint32 : [ 0u32;64 ] };