Size: a a a

Rust — русскоговорящее сообществo

2020 December 07

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
/bin/cat
Можно ли добавить в конец такой структуры поле md5_post_signature, которое нужно сериализовать как md5(sorted + "const string"), где sorted это отсортированные по алфавиту названия полей в формате f_name=value?

#[derive(Debug, Serialize)]
pub struct CheckIfUserExists<'a> {
   email: &'a str,
   #[serde(with = "string")]
   birthday: Birthday,
   #[serde(with = "string")]
   name: Name<'a>,
}```sorted для этой структуры выглядит примерно так:
```birthday=self.birthday&email=self.email&name=self.name
#[derive(Debug, Serialize)]
pub struct CheckIfUserExists<'a> {
   email: &'a str,
   #[serde(with = "string")]
   birthday: Birthday,
   #[serde(with = "string")]
   name: Name<'a>,
   f_name: String
}

держи
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Mikail Bagishov
Пока звучала претензия только к тому, что алфавит больше 1е6 символов, поэтому сведение к str не работает.
под алфавитом имеются в виду готовые слова. "стол", "стул", "компьютер" - алфавит русского языка
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
#[derive(Debug, Serialize)]
pub struct CheckIfUserExists<'a> {
   email: &'a str,
   #[serde(with = "string")]
   birthday: Birthday,
   #[serde(with = "string")]
   name: Name<'a>,
   f_name: String
}

держи
суть в том, чтобы не писать его руками
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
под алфавитом имеются в виду готовые слова. "стол", "стул", "компьютер" - алфавит русского языка
Готовые слова - это язык, а не алфавит.
источник

/

/bin/cat in Rust — русскоговорящее сообществo
ну или писать, но 2 строчки только
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
/bin/cat
ну или писать, но 2 строчки только
в расте нет способа "Обойти все поля и сделать Х". Точнее способы есть но они хуже чем просто накопипастить. Так что только макросом, да
источник

Oℕ

Oleg ℕizhnik in Rust — русскоговорящее сообществo
В моём случае алфавит вообще не конечный.
Закодировать в чары, я думаю, я его всегда смогу, но работы очень много дополнительной с сопоставлением потом
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Насколько я помню, алгоритм построения суфмасса (по крайней мере тот, который через классы эквивалентности) все равно на первой фазе занумерует различные символы различными числами
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
что-то вроде:

pub trait MyHash {
 fn hash(&self) -> String;
}

#[derive(Debug, Serialize)]
pub struct HashedStruct<T> {
  [serde(flatten)]
  value: T,
  f_name: String
}

impl<T: MyHash> HashedStruct<T> {
 pub fn new(value: T) -> Self {
   Self { value, f_name: value.hash() }
 }
}

...

impl_hash!(CheckIfUserExists: email, birthday, name)

...

let to_serialize = HashedStruct::new(my_value);
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Хотя окей, если через автомат строить то это не нужно, согласен.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
источник

Oℕ

Oleg ℕizhnik in Rust — русскоговорящее сообществo
Mikail Bagishov
Насколько я помню, алгоритм построения суфмасса (по крайней мере тот, который через классы эквивалентности) все равно на первой фазе занумерует различные символы различными числами
Нет, там только есть несколько сортировок, которые в практических версиях делаются радикссортом, чтобы сохранить линейностт
источник

Oℕ

Oleg ℕizhnik in Rust — русскоговорящее сообществo
Но можно модифицировать алгоритм для работы и с нефинитным алавитом, говорю, потому что делал
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Добавилась еще одна проблема. Смотрю запросы приложения и там все поля как string
источник

/

/bin/cat in Rust — русскоговорящее сообществo
т.е. json для подписи пишет все типы как string: birthday={"day":7,"month":"12","year":2019}
источник

/

/bin/cat in Rust — русскоговорящее сообществo
хм, или это такая "фича" с месяцем
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
ну, с макросами и генериками у тебя достаточно инструментов чтобы это обработать
источник

/

/bin/cat in Rust — русскоговорящее сообществo
да, тут главное время
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Надеюсь, они передумают насчёт донейшнов от частных лиц.
Я давно хочу такую возможность -- мозилла не позволяла выбрать на какие проекты идут пожертвования.
источник