Igor Tkach created THRIFT-3122:
----------------------------------
Summary: Javascript struct constructor should properly initialize
struct and container members from plain js arguments
Key: THRIFT-3122
URL: https://issues.apache.org/jira/browse/THRIFT-3122
Project: Thrift
Issue Type: Improvement
Components: JavaScript - Compiler
Affects Versions: 1.0
Reporter: Igor Tkach
Currently constructors for struct types in generated javascript accept {{args}}
object and initialize struct's members by simply assigning a value from
corresponding {{args}} object property (if not undefined). If struct member is
another struct it must be explicitly created with constructor and passed as an
argument value.
Given following definitions:
{code}
struct A {
1: string something
}
struct B {
1: A value
}
{code}
this works:
{code:javascript}
var b1 = new B(
{
value: new A(
{
something: 'hello'
}
)
}
);
{code}
this doesn't:
{code:javascript}
var b2 = new B(
{
value: {
something: 'hello'
}
}
);
{code}
Attempt to serialize b2 will result in error because {{b2.a}} doesn't have a
{{write}} method.
This becomes especially problematic when deep objects are used with libraries
like [Underscore.js|http://underscorejs.org/], [lodash|https://lodash.com/],
[React's immutability
helpers|https://facebook.github.io/react/docs/update.html] or
[Immutable.js|https://github.com/facebook/immutable-js]: most operations will
return or produce plain javascript objects without read/write methods even if
Thrift objects were given as input. Manually converting object graphs back to
Thrift serializable form is not workable.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)