You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Igor Tkach (JIRA)" <ji...@apache.org> on 2015/05/01 20:34:06 UTC
[jira] [Created] (THRIFT-3122) Javascript struct constructor should
properly initialize struct and container members from plain js arguments
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)