Sorry I didn't really get which is the difference between the structure method and trait method version.
I was thinking that returning impl Trait is a sort of indication for the compiler that tells it: "hey, here I want to return a type that is implementing some trait T, please check that is true when somebody will do", so I cannot understand why I cannot do inside a trait.
impl Trait in a return type means you don't want to, or can't, name the return type, there's still only one return type and what that type is is inferred by what's in the function's body.