thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Hull (JIRA)" <j...@apache.org>
Subject [jira] [Created] (THRIFT-4495) Erlang records should allow 'undefined' for non-required fields
Date Tue, 13 Feb 2018 18:02:00 GMT
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)

Mime
View raw message