[ 
https://issues.apache.org/jira/browse/THRIFT-224?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Piotr Kozikowski updated THRIFT-224:
------------------------------------

    Attachment: thrift-224-v2.patch

Here is a new patch that follows the approach you proposed. It's more elegant 
indeed. There is a catch now:  the ruby freeze method doesn't work as one would 
expect with class Set:

set = Set.new([1,2])
set.freeze
set << 4
puts set.inspect

#<Set: {1, 2, 4}>

This happens because internally the set uses a hash, and it is that hash that 
should be frozen. Because of this users can alter the set of valid values for 
an enum type and thus compromise the validate method.

Do you know of any simple way to overcome this? (i.e. without having to 
redefine the class Set, etc.)

>  Validate method should check that enum types are assigned valid values
> -----------------------------------------------------------------------
>
>                 Key: THRIFT-224
>                 URL: https://issues.apache.org/jira/browse/THRIFT-224
>             Project: Thrift
>          Issue Type: Improvement
>          Components: Compiler (Ruby)
>            Reporter: Nathan Marz
>            Assignee: Piotr Kozikowski
>         Attachments: thrift-224-v2.patch, thrift-224.patch
>
>
> The validate method generated currently checks that required fields are set. 
> It would be nice if it were to enforce more parts of the schema. One example 
> of this are the values assigned to enum types. For example, if I have this 
> enum:
> enum MyEnum {
>  FOO = 1;
>  BAR = 3;
>  BAZ = 4;
>  BIZ = 5;
> } 
> and this struct:
> struct MyStruct {
>  MyEnum e;
> }
> The validate method would ensure that MyStruct#e is either 1, 3, 4, or 5.
> The naive way of implementing this would be to generate a conditional 
> statement for every value, aka 
> "e==1 || e==3 || e==4 || e==5"
> A better implementation would generate something like:
> "e==1 || (e>=3 && e<=5)"
> Since the common case seems to be having large ranges of contiguous values, 
> this is the difference between having N conditionals execute versus 2.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to