how to use enum in swig with python?
enums, python, swig
Solution
To SWIG, an `enum` is just an integer. To use it as an output parameter as in your example, you also can declare the parameter as an output parameter like so:
%module x
// Declare "mail* status" as an output parameter.
// It will be returned along with the return value of a function
// as a tuple if necessary, and will not be required as a function
// parameter.
%include <typemaps.i>
%apply int *OUTPUT {mail* status};
%inline %{
typedef enum mail_ {
Out = 0,
Int = 1,
Spam = 2
} mail;
int fill_mail_data(int i, mail* status)
{
*status = Spam;
return i+1;
}
%}
Use:
>>> import x
>>> dir(x) # Note no "mail" object, just Int, Out, Spam which are ints.
['Int', 'Out', 'Spam', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_newclass', '_object', '_swig_getattr', '_swig_property', '_swig_repr', '_swig_setattr', '_swig_setattr_nondynamic', '_x', 'fill_mail_data']
>>> x.fill_mail_data(5)
[6, 2]
>>> ret,mail = x.fill_mail_data(5)
>>> mail == x.Spam
True
Problem
I have a enum declaration as follows: ``` typedef enum mail_ { Out = 0, Int = 1, Spam = 2 } mail; ``` Function: ``` mail status; int fill_mail_data(int i, &status); ``` In the function above, `status` gets filled up and will send. When I am trying this through swig I am facing the following issues: - It is not showing details of `mail`. When I try to print `mail.__doc__` or `help(mail)`, it is throwing an error saying there is no such Attribute, though though i am able to use those values (`Spam`, `In`, and `Out`). - As shown above, the Swig does not know what `main` is, so it is not accepting any function arguments for that `mail`.