My question is very similar to the question Default arguments with default values in Thrift Python client which was never completely resolved (one answer was a guess and the other was very hard to understand).
The question is, can you have a default parameter for service method without resorting to creating a struct for every method that needs one. I have the following Java service that I'd like to wrap with a Thrift handler
class MyService {
public void foo(){ foo(false); }
public void foo(boolean someAdvancedFeature){...}
}
so I'd like to create the Thrift IDL
service MyServiceThrift {
void foo(),
void foo(1:bool),
}
but that is not valid as you can't have 2 methods named foo. So I tried
service MyServiceThrift {
void foo(1:optional bool someAdvancedFeature = false)
}
but I get a parse error saying Cannot use reserved language keyword: "false"
So I though well maybe I could just make it optional
service MyServiceThrift {
void foo(1: optional bool someAdvancedFeature)
}
but I get the warning optional keyword is ignored in argument lists.
, which in hindsight makes some sense as it's just creating creating interfaces.
So is the only way to do this to create a new struct
for every single method that takes an optional parameter? (Yes, you could re-use the struct for some methods, but I'd need one for every permutation of parameters, plus that'd break things down the road if one method added a parameter and the others didn't). It seems silly to make the users create a (potentially empty) class just to pass parameters to a method, and I really don't like the idea of having to generate/maintain a separate class for every single method in my services. Am I missing something?