Show newer

В итоге оказалось самое удобное просто все руками написать вместо автомаппингов, так как это просто надежнее и короче. Обычные запросы с именованными параметрами и обычные маппинги руками, либо придется городить вагон десериализаторов или промежуточных моделей. Не то что бы где-то по другому, но была надежда, что newtype хотя бы оно само проглотит, а оно не смогло это делать без доп пометок...что возня и не надо, так как тогда просто руками.

В итоге я так и не нашел удобного метода для кэшированного варианта, пришлось написать свой и юзать

pub fn get_user(username: &str) -> Result<UserDb> {
let conn = DB_POOL.get_connection()?;
let mut prepared = conn.prepare_cached(sql_fabric::get_user_sql())?;
get_single_entity(&mut prepared, params![username], from_row::<UserDb>)
.context("get user error")
}

а для не кэшированого он есть :)

Show thread

Теперь надо кэширование стейтментов наладить, там методы капец неудобные как раз в связи с конвертацией ошибок.

Show thread

Единственное, что меня пока тормозит это волшебные преобразования типов, когда через два дереф был найден и вызван метод. Или когда тип ошибки надо один в другой преобразовать и хз как быстро это сделать без километра кода. С эти еще бывают затыки где долго ищу "простое решение".

Show thread

Но serde сериализация и обратно и так для почти всех типов есть или ее можно легко сделать. Я десериализатор написал только что бы оперток не плодить

Show thread

При этом десериализаторы писать элементарно, они автоматом фактически делаются.

fn deserialize_language_identifier<'de, D>(deserializer: D) -> Result<LanguageIdentifier, D::Error>
where
D: Deserializer<'de>,
{
let s: String = Deserialize::deserialize(deserializer)?;
s.parse().map_err(serde::de::Error::custom)
}

Может и макрос для совсем автомата накатать или найти.

Show thread

Так и есть, diesel только порождает кучу дурной работы.

pub fn get_user(username: &str) -> Result<UserDb> {
DB_POOL.get_connection()?.query_row_and_then(
sql_fabric::get_user_sql(),
named_params! {":username":username},
|row| -> Result<UserDb> { from_row::<UserDb>(row).context("Get user info error") },
)
}

А вот так выглядит весь маппинг. Именнованные параметры есть, а выход мапится автоматом по совпадению имен...правда я еще не проверил работает ли :)

Show thread

rusqlite+serde_ruslite легко решают все, что надо с автомапингами, при этом по дороге бесплатно есть сериализация и обратно если надо, куда угодно, не только с базой. Красота. Кажется.

Show thread

Боже, благослови git и Торвальдса! Откатил два коммита назад что бы не вычищать дизель.

Show thread

Как выяснилось спустя два шага, дизель для хэловорда это больше гемора, а не меньше. Так как там надо адаптировать типы путем реализации кучи трейтов что бы автомаппинги работали, то есть написать другие маппинги только в десять раз длиннее, так что rusqlite, refinery и третья либа, которая распаковывает структуры в именованные параметры возвращаются.

Включил фильм Затоичи. Блин, какой класс

Была мысль все к нему свести, но я пока не знаю возможно ли это, спеку читать надо, а ее я читать буду как РОС поднимется с колен.

Show thread

Ну ладно, я еще хочу одно кв хранилище прикрутить, но пока не знаю зачем :) Оно мне просто понравилось, кэши собрался делать, а потом решил, что нахер мне кэши и выкинул сам подход, который переусложнял задачу в десять раз, а мне надо в одну харю.

Show thread

Ну, то есть их много, но до них доживать еще далеко.

Show thread

Вообще, я бы продолжил впиливание дизеля, но надо что бы мозги постепенно решили, что спать пора. После дизеля, в целом останется вероятно десериализатор один для серде запилить хитрый...или нет, как пойдет. Шобы потом оно как-то там все само. И наверное можно доделать уже два самых важных эндпоинта, а то там раскуроченные заготовки лежат, в которых пятьдесят "а вот так если?". Но уже почти все готово к тому что бы нудно пилить по очереди. Никаких "ой хочу еще это" пока нет.

Хочу кабана в шоколаде!

Roman boosted

Китай хочет присвоить всем пользователям интернета индивидуальные ID, чтобы покончить с анонимностью

Китайское правительство объявило о внедрении новой системы национального интернет-ID. Эта инициатива, разработанная в ответ на растущие проблемы с безопасностью и контролем в онлайн-пространстве, предполагает обязательную регистрацию пользователей в интернете с использованием уникального идентификатора, выданного государственными органами.

Читать далее >>> 3dnews.ru/1108956

Не нравится только, что что бы метаданные для схем генерить утилита нужна, либо руками писать. Жаль они макрос не сделали для этого, который бы автоматом все делал. Но в целом пойдет.

Show thread

Конечно мне не нравится, что diesel строит AST каждый раз и только потом вроде как решает, что запрос уже построен и можно переиспользовать, но погляжу как это будет на практике, на самом деле эндпоинты в этих системах отвечают долго и прям быстрого ответа не требуют, так что может и пойдет.

Show thread
Show older
MustUdon

I like Twitter, but, Mastodon it is so excited! Feel free to register it is server just for fun! Usefull links https://instances.social https://www.reddit.com/r/Mastodon/comments/yugh2o/some_useful_mastodon_lists/?utm_source=share&utm_medium=web2x&context=3