Usually From isn’t used too much with references. Sure, some types implement such conversions like e.g. String: From<&str>, but the use cases for such implementations are commonly limited to only
the convenience of the user being able to write ….into(), or String::from(…) directly
APIs that accept an owned (x: T) where String: From<T> being also callable with references like &str
When an API surface expects something that is always a reference, and still also always convertible, it’s common to not use From anymore, but start considering using your own trait; perhaps you only need the (&First) -> Second conversion anyways and don't need the (First) -> Second at all, your trait could just have a &self method.
The &'a T: Into<something::TheSecond> / something::TheSecond: From<&'a T> approach becomes even more weird if you want to call .into() in your function on a &T reference that borrows a value owned by your own function
Technically, From/Into is still usable then, but you’d have to go into HRTBs like for<'b> &'b T: Into<something::TheSecond>.
A custom trait with a &self method has full support for this use case, too, and without any of this lifetime-weirdness.
Yes, that’s what I mean. It really depends on your use-case of course whether you can find a fitting name for such a trait and its method. Perhaps you’ll find that the sort of types you want to work with end up requiring more capabilities anyway besides this conversion, so the trait could even get more methods.
Another thing I wanted to mention, because your example only involved simple enum that could be Copy. If your types are all small copyable data, then you could also work with T: Copy + Into<TheSecond>, and work with &T by copying the T, then doing the conversion.
Another use-case could be that T is a type that containsTheSecond, but T isn’t cheap to copy or something… but you’re fine with copying/cloning TheSecond. In this case, you could consider implementing T: AsRef<TheSecond> and do your &T -> TheSecond conversion by first projecting &T to &TheSecond via AsRef and then copying/cloning the result.