In general, you can't return values with a type that is non-trivial from an ABI point of view, i.e., anything other than primitive numbers, String (which is special-cased), or one of the (U)Int[8/16/32/64]Array flat buffer types.
You should probably not worry about efficiency unless you have measured by actual benchmarks (or better yet, real usage data) that the speed of returning JSON to WASM matters. Write for clarity first, and optimize later if/when needed.
The implementation of a function doesn't affect its ABI/interface; the problem now becomes the Fs type itself, not the Vec. Unfortunately, support for enums in wasm_bindgen is genuinely not too good, so I until the situation improves, I usually just use const string literals instead.