[ 
https://issues.apache.org/jira/browse/THRIFT-3122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14559101#comment-14559101
 ] 

ASF GitHub Bot commented on THRIFT-3122:
----------------------------------------

Github user itkach commented on the pull request:

    https://github.com/apache/thrift/pull/476#issuecomment-105526647
  
    Copy functions are now in libs, for js and node, tests for js are added. 
While porting tests to use json protocol for js/browser I noticed a fix for 
list values in maps was present in js version but not in nodejs (f9b1ca8) and 
nested lists where not properly read 
(35b6163199ee2dd8d30689fdb429656aaa09330d). Is there anything else that needs 
to be addressed here?



> 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
>            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)

Reply via email to