static bool TryGetAttribute(XmlNode node, string attribute, out CapnpGen.CapParameterType value) { value = CapnpGen.CapParameterType.@float; if (node.Attributes[attribute] == null) { return(false); } string valueString = node.Attributes[attribute].Value; var enumValues = Enum.GetValues(typeof(CapnpGen.CapParameterType)); foreach (var enumValue in enumValues) { string enumValueString = enumValue.ToString(); if (enumValueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away { enumValueString = enumValueString.Substring(1); } if (valueString == enumValueString) { value = (CapnpGen.CapParameterType)enumValue; return(true); } } return(false); }
static bool ParseParameter(XmlNode parameterNode, List <CapnpGen.CapParameter> parameters, out string error) { error = ""; CapnpGen.CapParameter parameter = new CapnpGen.CapParameter(); string name = ""; if (!TryGetAttribute(parameterNode, "name", out name)) { error = "Parameter node does not have a name attribute"; return(false); } parameter.Name = name; CapnpGen.CapParameterType parameterType = CapnpGen.CapParameterType.@float; if (!TryGetAttribute(parameterNode, "type", out parameterType)) { error = "Parameter node \"" + parameter.Name + "\" does not have a valid type attribute, valid values: "; var values = Enum.GetValues(typeof(CapnpGen.CapParameterType)); foreach (var value in values) { string valueString = value.ToString(); if (valueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away { valueString = valueString.Substring(1); } error += value + " "; } return(false); } parameter.Type = parameterType; if (parameterType.ToString().StartsWith("texture")) { CapnpGen.CapSubType subType = CapnpGen.CapSubType.@float; if (!TryGetAttribute(parameterNode, "subtype", out subType)) { error = "Parameter node \"" + parameter.Name + "\" is of a texture type but does not have a valid subtype attribute, valid values: "; var values = Enum.GetValues(typeof(CapnpGen.CapSubType)); foreach (var value in values) { string valueString = value.ToString(); if (valueString[0] == '@') // Capnproto will prepend "@" on reserved keywords, let's filter that away { valueString = valueString.Substring(1); } error += value + " "; } return(false); } parameter.SubType = subType; } parameters.Add(parameter); return(true); }