When I tried to use std.conv.to to serialize enum values that are based on string type I faced with situation that *to* not exactly as I expected. As far as I understand it tries to find match between passed string value and enum value identifier instead of just casting it to enum type.

1. So I want to know if it is expected behaviour?
2. What are the reasons for it?

There is a simple example that illustrates what I'm talking about.

import std.stdio, std.conv;

enum Category: string { first = "I", second = "II", third = "III" };

void main()
{
        
assert( to!Category("first") == Category.first ); //This runs succesfully //assert( to!Category("I") == Category.first ); //This conversion fails

}

As a result I could try to fix it if it's not correct behaviour. Another concern about using *cast* is that it doesn't make some checks if value is one of enum values declared in code.

I found some topics about enum conversions.

http://forum.dlang.org/thread/bug-474...@http.d.puremagic.com%2Fissues%2F
http://forum.dlang.org/thread/bug-982...@http.d.puremagic.com%2Fissues%2F
http://forum.dlang.org/thread/fpzhgzhrhaxjfuiyd...@forum.dlang.org

Problem is that (as I think) that std.conv.to documentation doesn't describe how *to* SHOULD work for different ways of coversions so it's not obvious how to *fix* it. The only way of using is via trials and errors and it's not garanteed that found out with this way will not be changed and your code will not be broken. It's because that implementers don't have information about how exactly it SHOULD work.

Sorry for some emotions but I have problems with lack of doc sometimes and it makes my job harder.

Reply via email to