EG
Size: a a a
EG
G
EG
G
serde_json::Value
. Если мне нужно строить долгоживущее приложение, я обмажусь #[derive(Serialize, Deserialize)]
и прочими аттрибутами, чтобы обеспечить типобезопасность и интеграцию с IDE. ЯЗыки со статической типизацией позволяют перемещаться по "уровням типизации": от Any до serde_json::Value
до моих тайп-чекед структур.EG
try:
field1 = data['with']['long']['path'][0]['five']
field2 = data['with']['parameters']
if field2['type'] == 'param1':
field3 = data['for']['param1']
else:
field3 = data['for']['param2']
return [
checked_cast(str, field1),
checked_cast(int, field2),
checked_cast(bool, field3)
]
except (LookupError, CastingError):
log.error("Bad answer from API: %s", data)
return None
G
try:
field1 = data['with']['long']['path'][0]['five']
field2 = data['with']['parameters']
if field2['type'] == 'param1':
field3 = data['for']['param1']
else:
field3 = data['for']['param2']
return [
checked_cast(str, field1),
checked_cast(int, field2),
checked_cast(bool, field3)
]
except (LookupError, CastingError):
log.error("Bad answer from API: %s", data)
return None
EG
Option
на каждый .get()
G
Option
на каждый .get()
EG
EG
G
EG
EG
catch_unwind
, но это уже как-то ну такоеEG
EG
G
.get().ok_or(())?
EG
1[1]
должна бросать эксепшн.EG
.get().ok_or(())?
λ
['пишу']['такое']['выражение']
и получаю.let val = json ^? at 'пишу' . at 'такое' . at 'выражение'