#prog #rust #rustlib #article
Announcing error-stack, a context-aware error library for Rust that supports arbitrary attached user data
Вы не поверите, но ещё одна Rust-библиотека для ошибок. Вместе со статьёй, в которой описывается мотивация для её создания и дизайна
Announcing error-stack, a context-aware error library for Rust that supports arbitrary attached user data
Вы не поверите, но ещё одна Rust-библиотека для ошибок. Вместе со статьёй, в которой описывается мотивация для её создания и дизайна
HASH for Developers
Announcing error-stack – HASH Developer Blog
A context-aware error library for Rust that supports arbitrary attached user data
👍2🎉1
#prog #rust #serde
В serde_json есть тип Value, который может представить любое валидное JSON-значение. Есть парочка вещей, которые не столь известны и стоят упоминания.
1.
2. В
3.
4. Если вам нужно достать глубоко вложенное значение, можно вместо череды индексаций или вызовов
6. У
В serde_json есть тип Value, который может представить любое валидное JSON-значение. Есть парочка вещей, которые не столь известны и стоят упоминания.
1.
Value
, а также обе разновидности ссылок на него могут быть сравнены на равенство со всеми примитивными числами, bool
, str
и String
.2. В
Value
можно сконвертировать из множества различных типов, которые могут входить в его состав, а также составлять из итератора по элементам и итератора по элементам вместе с ключами.3.
Value
можно индексировать как строками, так и числовыми индексами, при этом в случае, если индексировать значение таким образом нельзя, иммутабельное индексирование вместо паники возвращает ссылку на Value::Null
.4. Если вам нужно достать глубоко вложенное значение, можно вместо череды индексаций или вызовов
get
использовать метод pointer/pointer_mut, которые достают значение по указанному строковому пути:let data = json!({
"x": {
"y": ["z", "zz"]
}
});
assert_eq!(data.pointer("/x/y/1").unwrap(), &json!("zz"));
assert_eq!(data.pointer("/a/b/c"), None);
5. Value
и &Value
реализуют Deserialize
. Это значит, что если у вас есть разобранный JSON в неструктурированном виде, вы можете сконвертировать его в свои типы, реализующие Deserialize
— причём в случае со ссылкой у вас при этом останется изначальный JSON. Так можно пробовать десериализовывать поочерёдно в несколько типов, и это может оказаться дешевле, чем парсить всё с нуля.6. У
Value
есть собрат RawValue. Этот тип фактически представляет собой синтаксически валидный JSON, который хранится в виде слайса на входную строку. Его можно использовать для того, чтобы проводить манипуляции над JSON и при этом не хранить разобранный JSON в памяти целиком:use serde::{Deserialize, Serialize};
use serde_json::{Result, value::RawValue};
#[derive(Deserialize)]
struct Input<'a> {
code: u32,
#[serde(borrow)]
payload: &'a RawValue,
}
#[derive(Serialize)]
struct Output<'a> {
info: (u32, &'a RawValue),
}
// Efficiently rearrange JSON input containing separate "code" and "payload"
// keys into a single "info" key holding an array of code and payload.
//
// This could be done equivalently using serde_json::Value as the type for
// payload, but &RawValue will perform better because it does not require
// memory allocation. The correct range of bytes is borrowed from the input
// data and pasted verbatim into the output.
fn rearrange(input: &str) -> Result<String> {
let input: Input = serde_json::from_str(input)?;
let output = Output {
info: (input.code, input.payload),
};
serde_json::to_string(&output)
}
fn main() -> Result<()> {
let out = rearrange(r#" {"code": 200, "payload": {}} "#)?;
assert_eq!(out, r#"{"info":[200,{}]}"#);
Ok(())
}
docs.rs
Value in serde_json - Rust
Represents any valid JSON value.
👍10
Блог*
#science #article Прекрасная интерактивная статья, рассказывающая о том, как работает GPS, с поэтапным учётом всё новых и новых обстоятельств. (thanks @jemalloc)
#mechanics #article
Статья от того же автора. Покрывает не только часть, отвечающую за равномерный ход часов, но и также устройство механизма для показывания дня месяца, устройство головки часов, позволяющей заводить, корректировать время и день одной деталью, и механизм для автоподзавода часов. Крайне рекомендую к прочтению, часы — это восхитительный механизм.
(thanks @theLastOfCats)
Статья от того же автора. Покрывает не только часть, отвечающую за равномерный ход часов, но и также устройство механизма для показывания дня месяца, устройство головки часов, позволяющей заводить, корректировать время и день одной деталью, и механизм для автоподзавода часов. Крайне рекомендую к прочтению, часы — это восхитительный механизм.
(thanks @theLastOfCats)
ciechanow.ski
Mechanical Watch – Bartosz Ciechanowski
Interactive article explaining how a mechanical watch works.
❤5🤯3🔥1
Forwarded from dev optozorax
Какой же питон лютое говнище. Редактирую простой код 5 минут, и час отлаживаю ошибки типов. На расте я бы уже тыщу раз написал объявление структур и тыщу раз скомпилировал это. Откуда люди вообще взяли что на нём код быстро пишется.
👍21👎16❤4🥰1
Forwarded from Технологический Болт Генона
After a long time it’s time for a big upgrade of my computer hardware orchestra. Here it is! The bigger and better Floppotron 3.0. 512 floppy disk drives, 4 scanners and 16 hard disk drives.
The Floppotron 3.0
https://silent.org.pl/home/2022/06/13/the-floppotron-3-0/
🔥5🤩2🎉1
#prog #c #ruby #article
An in-depth look at CVE-2018-8778 or why integer overflows are still a thing!
An in-depth look at CVE-2018-8778 or why integer overflows are still a thing!
Sqreen Blog
An in-depth look at CVE-2018-8778 or why integer overflows are still a thing! - Sqreen Blog
CVE-2018-8778 is a Buffer under-read that is triggered by `String#unpack`. In this article, we will do a deep dive into the vulnerability, show how to exploit it and how to mitigate it.
Уважаемые разработчики мобильных приложений. Знаете ли вы, когда наиболее подходящий момент просить оценить приложение?
Никогда.
Никогда.
🔥40🥰2💩2
#prog #amazingopensource #gamedev
MarkovJunior is a probabilistic programming language where programs are combinations of rewrite rules and inference is performed via constraint propagation.
MarkovJunior is a probabilistic programming language where programs are combinations of rewrite rules and inference is performed via constraint propagation.
🔥9