static SerializedValueType forValue(ConfigValue value) {
      ConfigValueType t = value.valueType();
      if (t == ConfigValueType.NUMBER) {
        if (value instanceof ConfigInt) return INT;
        else if (value instanceof ConfigLong) return LONG;
        else if (value instanceof ConfigDouble) return DOUBLE;
      } else {
        for (SerializedValueType st : values()) {
          if (st.configType == t) return st;
        }
      }

      throw new ConfigException.BugOrBroken("don't know how to serialize " + value);
    }