private static IntermediateField AssignFieldValue(IntermediateField field, object data) { field.Value = new IntermediateFieldValue { Context = valueContext, Data = data, PreviousValue = field.Value }; return(field); }
internal static IntermediateSymbol Deserialize(ISymbolDefinitionCreator creator, Uri baseUri, JsonObject jsonObject) { var definitionName = jsonObject.GetValueOrDefault <string>("type"); var idJson = jsonObject.GetValueOrDefault <JsonObject>("id"); var sourceLineNumbersJson = jsonObject.GetValueOrDefault <JsonObject>("ln"); var fieldsJson = jsonObject.GetValueOrDefault <JsonArray>("fields"); var tagsJson = jsonObject.GetValueOrDefault <JsonArray>("tags"); var id = (idJson == null) ? null : Identifier.Deserialize(idJson); var sourceLineNumbers = (sourceLineNumbersJson == null) ? null : SourceLineNumber.Deserialize(sourceLineNumbersJson); // TODO: this isn't sufficient. if (!creator.TryGetSymbolDefinitionByName(definitionName, out var definition)) { throw new WixException(ErrorMessages.UnknownSymbolType(definitionName)); } var symbol = definition.CreateSymbol(sourceLineNumbers, id); for (var i = 0; i < fieldsJson.Count && i < symbol.Fields.Length; ++i) { if (fieldsJson[i] is JsonObject fieldJson) { symbol.Fields[i] = IntermediateField.Deserialize(symbol.Definition.FieldDefinitions[i], baseUri, fieldJson); } } if (tagsJson == null || tagsJson.Count == 0) { } else if (tagsJson.Count == 1) { symbol.tags = (string)tagsJson[0]; } else { var tags = new string[tagsJson.Count]; for (var i = 0; i < tagsJson.Count; ++i) { tags[i] = (string)tagsJson[i]; } symbol.tags = tags; } return(symbol); }
public static IntermediateField Set(this IntermediateField field, IntermediateFieldPathValue value) { object data; if (field == null) { throw new ArgumentNullException(nameof(field)); } else if (value == null) // null is always allowed. { data = null; } else { switch (field.Type) { case IntermediateFieldType.Bool: throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value)); case IntermediateFieldType.LargeNumber: throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value)); case IntermediateFieldType.Number: throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value)); case IntermediateFieldType.Path: data = value; break; case IntermediateFieldType.String: data = value.Path; break; default: throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); } ; } return(AssignFieldValue(field, data)); }
public static IntermediateFieldPathValue AsPath(this IntermediateField field) { if (field == null || field.Value == null || field.Value.Data == null) { return(null); } switch (field.Definition.Type) { case IntermediateFieldType.String: return(new IntermediateFieldPathValue { Path = field.Value.AsString() }); case IntermediateFieldType.Path: return(field.Value.AsPath()); default: throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string"); } }
public static int?AsNullableNumber(this IntermediateField field) { if (field == null || field.Value == null || field.Value.Data == null) { return(null); } switch (field.Definition.Type) { case IntermediateFieldType.Bool: return(field.Value.AsBool() ? 1 : 0); case IntermediateFieldType.Number: return(field.Value.AsNumber()); case IntermediateFieldType.String: return(Convert.ToInt32(field.Value.AsString())); default: throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number"); } }
public static bool?AsNullableBool(this IntermediateField field) { if (field == null || field.Value == null || field.Value.Data == null) { return(null); } switch (field.Definition.Type) { case IntermediateFieldType.Bool: return(field.Value.AsBool()); case IntermediateFieldType.Number: return(field.Value.AsNumber() != 0); case IntermediateFieldType.String: return(!String.IsNullOrEmpty(field.Value.AsString())); default: throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean"); } }
internal static IntermediateTuple Deserialize(ITupleDefinitionCreator creator, Uri baseUri, JsonObject jsonObject) { var definitionName = jsonObject.GetValueOrDefault <string>("type"); var idJson = jsonObject.GetValueOrDefault <JsonObject>("id"); var sourceLineNumbersJson = jsonObject.GetValueOrDefault <JsonObject>("ln"); var fieldsJson = jsonObject.GetValueOrDefault <JsonArray>("fields"); var id = (idJson == null) ? null : Identifier.Deserialize(idJson); var sourceLineNumbers = (sourceLineNumbersJson == null) ? null : SourceLineNumber.Deserialize(sourceLineNumbersJson); creator.TryGetTupleDefinitionByName(definitionName, out var definition); // TODO: this isn't sufficient. var tuple = definition.CreateTuple(sourceLineNumbers, id); for (var i = 0; i < fieldsJson.Count; ++i) { if (tuple.Fields.Length > i && fieldsJson[i] is JsonObject fieldJson) { tuple.Fields[i] = IntermediateField.Deserialize(tuple.Definition.FieldDefinitions[i], baseUri, fieldJson); } } return(tuple); }
public static IntermediateField Set(this IntermediateField field, int value) { object data; if (field == null) { throw new ArgumentNullException(nameof(field)); } switch (field.Type) { case IntermediateFieldType.Bool: data = (value != 0); break; case IntermediateFieldType.LargeNumber: data = (long)value; break; case IntermediateFieldType.Number: data = value; break; case IntermediateFieldType.Path: throw new ArgumentException($"Cannot convert number '{value}' to a 'Path' field type.", nameof(value)); case IntermediateFieldType.String: data = value.ToString(); break; default: throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); } ; return(AssignFieldValue(field, data)); }
private static IntermediateField EnsureField(IntermediateField field, IntermediateFieldDefinition definition) { return(field ?? new IntermediateField(definition)); }
public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, string value) { return(EnsureField(field, definition).Set(value)); }
public static IntermediateField Set(this IntermediateField field, string value) { object data; if (field == null) { throw new ArgumentNullException(nameof(field)); } else if (value == null) // Null is always allowed. { data = null; } else { switch (field.Type) { case IntermediateFieldType.Bool: if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase)) { data = true; } else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase)) { data = false; } else { throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value)); } break; case IntermediateFieldType.LargeNumber: if (Int64.TryParse(value, out var largeNumber)) { data = largeNumber; } else { throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value)); } break; case IntermediateFieldType.Number: if (Int32.TryParse(value, out var number)) { data = number; } else { throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", nameof(value)); } break; case IntermediateFieldType.Path: data = new IntermediateFieldPathValue { Path = value }; break; case IntermediateFieldType.String: data = value; break; default: throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}"); } ; } return(AssignFieldValue(field, data)); }
public static void Overwrite(this IntermediateField field, string value) => field.Value.Data = value;
public static object AsObject(this IntermediateField field) { return(field?.Value.Data); }
public static bool IsNull(this IntermediateField field) => field?.Value?.Data == null;