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

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

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

21 ответов

24 просмотра

Нет.

В общем случае, нет. Самое близкое -- 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, как всегда присутствует трейдофф "...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта