172 похожих чатов

Подскажите плиз, если в rust возможность реализовать что-то типа питоновского

getattr ? Есть обьект структура которого создается в рантайме из описания в json и хочется иметь доступ к полям обьекта просто через точку - типа o.field (имя которое после точки во время компиляции неизвестно). С какой стороны заходить?

21 ответов

27 просмотров

Нет.

В общем случае, нет. Самое близкое -- serde_json::Value, но это далеко не так эргономично как ты хочешь. Для неизвестных схем удобных решений нет. Для частично известных -- смотри в сторону serde-query

А ты уверен что схему нельзя статически задать?

Наделай методов объекту по типу .field() и будет почти то же самое, только две скобочки ещё

ik- Автор вопроса
Dmytro Polunin
А ты уверен что схему нельзя статически задать?

уверен, она реально меняется иногда. Это модель описания сети. Host имеет аттрибуты name, hardwareType и тд. В какой-то момент это число атрибутов меняется - могут добавить что-нибудь. Мне нужно сделать либу что-бы с этим было удобно работать

Andrey Vlasov
Наделай методов объекту по типу .field() и будет п...

Зачем плохому новичков учишь :\ Ну можно возвращать Option<&T> и будет норм, да.

ik- Автор вопроса
antuan
удалятся поля могут?

теортетически да

ik
уверен, она реально меняется иногда. Это модель оп...

ИМХО, задать схему статически и обновлять при необходимости удобнее чем жонглировать динамическим Value

ik
теортетически да

а есть набор полей, которые никогда не будут удаляться\изменяться?

ik
теортетически да

Что ты намерен делать если нужное поле удалилось?

Возможность есть, через макросы. Аналогично тому, как это сделано в sqlx https://github.com/launchbadge/sqlx/blob/master/src/macros.rs Позволяет писать async fn list_todos(pool: &MySqlPool) -> anyhow::Result<()> { let recs = sqlx::query!( r#" SELECT id, description, done FROM todos ORDER BY id "# ) .fetch_all(pool) .await?; // NOTE: Booleans in MySQL are stored as `TINYINT(1)` / `i8` // 0 = false, non-0 = true for rec in recs { println!( "- [{}] {}: {}", if rec.done != 0 { "x" } else { " " }, rec.id, &rec.description, ); } Ok(()) } вот эти rec.id, rec.description и rec.done определяются из схемы базы данных на этапе билда. Там же проверяется наличие этих полей в рекордсете, который генерирует SQL запрос выше. Реализация конечно жесть, но теоретически возможность есть.

ik- Автор вопроса
antuan
а есть набор полей, которые никогда не будут удаля...

я бы у структуры задал явно те поля, которые никогда не будут удаляться остальное клал бы в какую-нибудь хешмапу (поле экстра), у которой значения хранить как стринги

antuan
я бы у структуры задал явно те поля, которые никог...

Я бы Apache avro внедрил бы с обоих сторон)) так, холиварить нельзя в этом чате

Artem
Я бы Apache avro внедрил бы с обоих сторон)) так, ...

Тормозной avro, как всегда присутствует трейдофф "гибкость -vs- производительность". Avro решили выбрать один конец, иногда это оправдано.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Тормозной avro, как всегда присутствует трейдофф "...

Компактный, можно поля удалять в отличии от... альтернатив. Растовой реализации не видел, кстати.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта