Using an Option<S>is perfectly valid given only the info we've been given.
Technically you could say where Option<S>: Into<String> but that most likely isn't what you want to do.
Please share some more code to elaborate the errors your code presents.
What I would like to get is that I can send Option < &str > or Option < String > into a function parameter... (Option < Something > where < who knows > )
I can send &str or String to the same function parameter when I add "where S: Into < String > ".
What I would like to do is the same thing for Option<&str> and Option < String >.
I can define that parameter as Option < String > but then I have to convert from &str to String every time I call that function with a &str --- Some("something".to_string());
Instead of being generic over <S : Into<String>> and then using S in the signature, you can also use impl Into<String> wherever S was used, which will implicitly declare as many generic parameters as there are occurrences of S. This has the advantage of, in your example, allowing to have first_name: &str and last_name: String.