I have an enum, say:

enum AssetCategory {
  Investment,
  PrimaryResidence,
  FamilyProperty,
  FinancialInstrument
}

and I have functions that convert to/from strings to be used in Json (via vibe json). The vibe wants to call out to user supplied toJson/fromJson if both functions are provided and the test for it is:

Json serializeToJson(T)(T value) {
...
static if( __traits(compiles, value = T.fromJson(value.toJson())) ){
   return value.toJson();
...
}

I would like to use this feature to have the json output the string instead of numeric value (while still retaining numeric value in data structures). The toJson/fromJson functions below are close. They allow for this:

if( __traits(compiles, t.fromJson(t.toJson()) ))

to be true - but that is not the same thing. Is there a trickery to associate a static function with an enum? (e.g. AssetCategory.fromJson(json)) )

Thanks
Dan
-----------

static void fromJson(ref AssetCategory assetType, Json src) {
  string value = cast(string)src;
  writeln("value is ",value);
  final switch(value) {
case "Investment": { assetType = AssetCategory.Investment; break; } case "PrimaryResidence": { assetType = AssetCategory.PrimaryResidence; break; } case "FamilyProperty": { assetType = AssetCategory.FamilyProperty; break; } case "FinancialInstrument": { assetType = AssetCategory.FinancialInstrument; break; }
  }
}

static Json toJson(AssetCategory assetType) {
  auto result = Json();
  result = text(assetType);
  return result;
}

Reply via email to