можно соответственно написать функции, например первая для того чтобы положить в HashMap, а вторая чтобы достать от туда значение
fn owning<T: Into<String>>(v: T) {...}
fn borrowing<T: AsRef<str>>(v: T) {...}
Как сделать тоже самое, но если я хочу спрятать String за typealias'ом? Возможно не AsRef, я вообще не уверен что правильно его выше применил.
type Id = String;
fn owning<T: Into<Id>>(v: T) {...}
fn borrowing<T: ???>(v: T) {...}
Понятно что это даже не тип. Я просто не хочу явно говорить что это строка. Может потом это будет uuid, или потом на i64 сменю
В описании есть запись, что, во-первых, для ключей должны быть заимплеменчены PartialEq, Eq, Hash (проще всего простым дерайвом), во-вторых, дозволяется любые Borrow-репрезентации ключей использовать для доступа к элементам. Дерайвишь три крейта, перечисленных выше, и по ссылке требуешь свой ньютайп, либо пишешь Borrow на str.
То есть примерно так (не считая накидать ограничений Eq, etc.)? https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b30247da0d8ac9de0b6b2f2274d6590d
Обсуждают сегодня