Size: a a a

2021 April 30

DF

Dollar Føølish in Rust Async
Я вас не понимаю
источник

MB

Mikail Bagishov in Rust Async
Звучит как once-cell
источник

K

Kitsu in Rust Async
его в трейт то не засунешь
источник

IL

Ilya Lakhin in Rust Async
trait Foo {
 fn name() -> & 'static str;

 fn lower_case_name() -> & 'static str { здесь как-то похимичить }
}

struct Bar {}

impl Foo for Bar { fn name() -> & 'static str {"Bar"} }

assert_eq!("bar", Bar::lower_case_name())
источник

MB

Mikail Bagishov in Rust Async
В дефолтную реализацию - почему бы и нет?
источник

IL

Ilya Lakhin in Rust Async
Ну а что в этот OnceCell положить?
источник

MB

Mikail Bagishov in Rust Async
Ну, вычисленную строку
источник

K

Kitsu in Rust Async
она будет общей для всех же
источник

IL

Ilya Lakhin in Rust Async
Она будет расшарена на все имплементации.
источник

IL

Ilya Lakhin in Rust Async
Да
источник

IL

Ilya Lakhin in Rust Async
Если туда даже условный hashmap, завернутый в mutex, положить, я же не смогу из мьютекса &'static референс таскать
источник

K

Kitsu in Rust Async
думаю что это либо кодген (например через дерайвы), либо сомнительные решения типо Box::leak
источник

IL

Ilya Lakhin in Rust Async
Через кодеген думал сделать, но тоже громоздко. И не универсально(как бы не совсем из коробки получается)
источник

PL

Paul ❌ Loyd in Rust Async
Мб сделать обертку Cached<I> и добавить инстанс Foo for Cached where I: Foo + Any, а различать по typeid?
источник

PL

Paul ❌ Loyd in Rust Async
Но это кэш на тип, а не на инстанс
источник

IL

Ilya Lakhin in Rust Async
Что такое Cached?
источник

MB

Mikail Bagishov in Rust Async
Хм, можно все-таки взять мапу из type_id в строки, а потом ансейфа накинуть.

Ну или сменить тип на Cow<str>
источник

IL

Ilya Lakhin in Rust Async
А как именно ансейф накидывать?
источник

K

Kitsu in Rust Async
String -> &str -(unsafe)> &'static str
источник

PL

Paul ❌ Loyd in Rust Async
Ну вот сам напишешь, вызывает внутренний метод, если ещё нет в кеше
источник