Денис
какой тип у telemetry_values[i].value?
Денис
ну так тебе и не нужно тогда конвертить между типами
Денис
тебе нужно парсить данные в инт в соответствии с различными правилами
Golodnyi
Ну так правила определяют ифы в плюсах
Golodnyi
В идеале я бы хотел видеть там цикл и одну строку кода, который преобразует данные, в БД можно хранить любую мета информацию о правиле преобразования данных
Денис
а ты хочешь чтобы компилятор видя строку "I32" волшебным образом понимал, какие правила применять? )
Golodnyi
Не обязательно i32, может есть в расте метод toI32 и я через мета программирование вызываю этот метод над данными, че нить такое нельзя?
Денис
единственное что можно упростить, это использовать вот это — https://docs.rs/bytes/0.4.7/bytes/trait.ByteOrder.html — чтобы ручками не конвертировать
Golodnyi
Воот, мб, если дергать методы этого трейта мета программированием, то хранят имена нужных методов можно магически вжух сделать
Денис
и будет, грубо говоря,
dataFlex->telemetry_values[i].value = match dataFlex->telemetry_values[i].type {
"I32" => LittleEndian::read_i32(&buff),
"U32" => LittleEndian::read_u32(&buff),
...
};
Golodnyi
А разве нельзя
LittleEndian::(readType)(buff);? Синтаксис не знаю, выше вроде проводили пример вызова метода через переменную
Денис
ну это я условно написал
Денис
но как ты хочешь сделать не получится, потому что у методов сигнатуры разные
Golodnyi
Ну там одинаковый, буфев данных на вход
Макс
Есть вопрос про Rust и Docker.
Предыстория: работал с проектом на OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
doc
Есть вопрос про Rust и Docker.
Предыстория: работал с проектом на OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
1)примонтировать папку с этим регистри
2) создать свой образ со скачанным регистри
Marat
Есть вопрос про Rust и Docker.
Предыстория: работал с проектом на OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
Сейчас скину как надо делать
Marat
Есть вопрос про Rust и Docker.
Предыстория: работал с проектом на OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
RUN USER=root cargo new project_dir
COPY Cargo.toml Cargo.lock /project_dir/
WORKDIR /project_dir
RUN cargo build --release
COPY src ./src
RUN cargo build --release
Marat
Как-то так короче
Marat
Тогда он будет перекачивать зависимости только если обновились
doc
можно cargo clean сделать в той же команде
doc
но посыл тот же - чтобы реестр уже был выкачан
Макс
Ладно, я кажется плохо знаю докер, буду читать документацию
Marat
doc
doc
Marat
Marat
Вообще я multi-stage builds делаю, чтобы бинарник в итоге в своем контейнере был
doc
Чтобы артефактов Билла не оставалось. Когда в контейнере будешь билдить, будет начисто
Marat
Marat
https://github.com/pepeground/tiemur_bot_rs/blob/master/Dockerfile
Marat
Вот короче если кому интересно, как по хорошему вообще делать
Marat
В итоге получаем отдельный контейнер с бинарником
պլհկ
Есть вопрос про Rust и Docker.
Предыстория: работал с проектом на OSX, после этого попытался тот же самый проект сбилдить на Windows. Посыпались ошибки линкера (не установлен драйвер на postgresql), от них мне стало грустно. Я решил пересесть на докер, и билдить всё сразу в нём. Вроде как правильный CI, локально работать в том же самом окружении, что и в продакшне (ну, почти).
Однако тут сразу вылезла проблема: при каждом запуске docker build cargo делает очень длинный и печальный Updating registry. Воспроизводимость без сайд-эффектов это, конечно, хорошо, но ждать билда так долго каждый раз - это уже не очень.
Вопрос: как это можно оптимизировать? Сделать базовый докер-образ, где нужные библиотеки будут уже загружены и откомпилированы? Вообще кто-то реально использует такой паттерн (с билдами внутри докера), или я устраиваю себе ненужный лишний гемморой?
делать билд в докерфайле это бред
делаешь билд контейнер с компилятором и основными зависимостями (типа openssl и проч)
делаешь волум /root/.cargo и target
после сборки бинарника собираешь новый контейнер со своим докерфайлом и бинарником в нем
Макс
ОК, понял общую суть советов, буду читать доки докера и ссылки. Спасибо
պլհկ
возьми нормальную ci
պլհկ
гитлаб или трэвис
Marat
Макс
гитлаб или трэвис
Вот gitlab и хотел взять кстати. В перспективе - автоматически по git push делать докер-образы для aws beanstalk, но пока мне хотя бы чтобы оно просто сбилдилось
Макс
պլհկ
Dårk
как жить без mpsc select на stable?
Dårk
хочу забирать событие с одного из каналов
Dårk
а хотя не надо. обходной путь подошел.
while let Ok(report) = reports.recv() {
if let Err(mpsc::TryRecvError::Disconnected) = ctl_rx.try_recv() {
// Game Over
break;
}
// do something with report
}
Маjко
Что от меня хочет borrowck?
Маjко
https://play.rust-lang.org/?gist=266f8da9b9ad391be7be67261745e455&version=stable&mode=debug
Filipp
хороший вопрос
Маjко
Ага. Если что, это пример написанный по куску реального кода, просто демонстрация
Переписать на итераторах нельзя, надо обходить
Denys
у меня ощущение что ты наткнулся на то что матсакис описивал про текущий борровк и то для чего нужны нлл, но имхо
Filipp
https://play.rust-lang.org/?gist=129bb31af98d120feae9c6c9ec607111&version=stable&mode=debug
Filipp
вот чуть более понятная ошибка
Маjко
Маjко
Filipp
почему?
Маjко
Потому что я не бинжу нигде иммутабельную ссылку
Filipp
так а зачем тебе мутабельная ссылка для сравнения?
Filipp
я думал можно обойти сравнивая по иммутабельной и потом вернуть мутабельную
Filipp
или вопрос был не в том как решить, а почему такое происходит?
Filipp
тогда да, проблема в том, что борроук по скоупам заимствования смотрит
Маjко
Маjко
А, нет, пизжу
Маjко
С nll проблемы нет
Маjко
Теперь вопрос: как обойти на стейбле?
Denys
кстати а ты как на нлл запускаешь?
Денис
вангую, что #![feature(nll)]
Маjко
Andrey
https://play.rust-lang.org/?gist=fa893d6ac7fbd549902a182d3068c455&version=stable&mode=debug
Маjко
Andrey
Ну так надо же как-то ограничить лайфтайм у value.
Денис
Маjко
Денис
а блин