David Hull created THRIFT-4495:
----------------------------------
Summary: Erlang records should allow 'undefined' for non-required
fields
Key: THRIFT-4495
URL: https://issues.apache.org/jira/browse/THRIFT-4495
Project: Thrift
Issue Type: Improvement
Components: Erlang - Compiler
Affects Versions: 0.11.0
Reporter: David Hull
Assignee: David Hull
The Erlang records created by the Erlang code generator allow only the type
declared by the Thrift definition file. If a field is not required, however,
the Erlang record should also allow the value {{undefined}} (this is similar to
a null value in other languages).
Erlang includes a tool, dialyzer, that does type analysis of Erlang code. Until
Erlang 19, dialyzer implicitly added `undefined` as an allowed type for all
record fields, but as of Erlang 19 it no longer does. This means that dialyzer
now emits error messages whenever a record is constructed and initial values
are not specified for all of its fields.
So, for example, the following thrift definition
{noformat}
struct Test {
1: required i32 a
2: i32 b
3: optional i32 c
}{noformat}
currently produced the following Erlang record:
{noformat}
-record('Test', {'a' :: integer(),
'b' :: integer(),
'c' :: integer()}).{noformat}
However it should produce the following:
{noformat}
-record('Test', {'a' :: integer(),
'b' :: integer() | undefined,
'c' :: integer() | undefined}).{noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)